1. 概述

本文将带你用 Java 实现一个支持加、减、乘、除四则运算的基础计算器。

核心功能包括:

  • ✅ 接收用户输入的操作符和两个操作数
  • ✅ 根据操作符执行对应计算
  • ✅ 对非法输入进行校验与提示
  • ✅ 输出格式化的计算结果

目标虽简单,但涉及输入处理、条件控制、异常边界判断等基础但关键的编程技巧。适合用来巩固 Java 基础逻辑控制能力,也能作为初学者练手项目。

2. 基础环境搭建

先给程序加点“仪式感”,打印欢迎信息和功能说明:

System.out.println("---------------------------------- \n" +
  "Welcome to Basic Calculator \n" +
  "----------------------------------");
System.out.println("Following operations are supported : \n" +
  "1. Addition (+) \n" +
  "2. Subtraction (-) \n" +
  "3. Multiplication (*) \n" +
  "4. Division (/) \n");

接下来使用 Scanner 获取用户输入。这是控制台程序最常用的输入方式,简单粗暴有效。

Scanner scanner = new Scanner(System.in);

System.out.println("Enter an operator: (+ OR - OR * OR /) ");
char operation = scanner.next().charAt(0);

System.out.println("Enter the first number: ");
double num1 = scanner.nextDouble();

System.out.println("Enter the second number: ");
double num2 = scanner.nextDouble();

⚠️ 注意:这里直接用 next().charAt(0) 读取第一个字符作为操作符,避免输入空格或换行导致的问题。

输入校验不能少

写程序最怕“用户乱输”,所以必须做两件事校验:

  • ❌ 操作符是否合法(只能是 +, -, *, /)
  • ❌ 除法时第二个数不能为 0

否则程序不会报错但结果离谱,用户体验直接崩盘。

校验逻辑如下:

if (!(operation == '+' || operation == '-' || operation == '*' || operation == '/')) {
    System.err.println("Invalid Operator. Please use only + or - or * or /");
}
if (operation == '/' && num2 == 0.0) {
    System.err.println("The second number cannot be zero for division operation.");
}

✅ 建议:这类校验最好封装成独立方法,提升可读性,也方便后续扩展。

最终输出格式统一为:

<num1> <operation> <num2> = <result>

3. 计算逻辑实现

方式一:if-else 分支处理

最直观的方式,适合逻辑简单、分支不多的场景。

if (operation == '+') {
    System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));
} else if (operation == '-') {
    System.out.println(num1 + " - " + num2 + " = " + (num1 - num2));
} else if (operation == '*') {
    System.out.println(num1 + " x " + num2 + " = " + (num1 * num2));
} else if (operation == '/') {
    System.out.println(num1 + " / " + num2 + " = " + (num1 / num2));
} else {
    System.err.println("Invalid Operator Specified.");
}

优点是逻辑清晰,缺点是重复代码多,System.out.println 出现了五次。

方式二:switch 语句优化

Java 的 switch 支持 char 类型,非常适合这种单字符操作符的分发场景。

switch (operation) {
    case '+':
        System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));
        break;
    case '-':
        System.out.println(num1 + " - " + num2 + " = " + (num1 - num2));
        break;
    case '*':
        System.out.println(num1 + " x " + num2 + " = " + (num1 * num2));
        break;
    case '/':
        System.out.println(num1 + " / " + num2 + " = " + (num1 / num2));
        break;
    default:
        System.err.println("Invalid Operator Specified.");
        break;
}

✅ 优势:

  • 结构更紧凑
  • default 分支兜底,增强健壮性
  • 后续想加 % 取模运算也方便

进阶优化:结果统一输出

可以先用一个变量存结果,最后统一打印,避免多次调用 System.out.println

double result = 0;
boolean valid = true;

switch (operation) {
    case '+':
        result = num1 + num2;
        break;
    case '-':
        result = num1 - num2;
        break;
    case '*':
        result = num1 * num2;
        break;
    case '/':
        if (num2 == 0) {
            System.err.println("除数不能为零!");
            valid = false;
        } else {
            result = num1 / num2;
        }
        break;
    default:
        System.err.println("不支持的操作符:" + operation);
        valid = false;
        break;
}

if (valid) {
    System.out.println(num1 + " " + operation + " " + num2 + " = " + result);
}

这样代码更干净,也更容易集成到其他系统中(比如封装成服务接口)。

数据类型选择踩坑提醒

原文提到 int 最大值是 2147483647,一旦超限就会溢出。

✅ 正确做法:使用 double 类型存储操作数和结果。

double num1 = scanner.nextDouble();
double num2 = scanner.nextDouble();
double result = 0;

好处:

  • 支持小数运算
  • 范围更大,减少溢出风险
  • 即使输入整数也能正确处理

除非明确只做整数计算,否则一律优先考虑 double

4. 总结

我们实现了一个功能完整的基础计算器,涵盖了:

  • ✅ 用户输入采集(Scanner)
  • ✅ 输入合法性校验
  • ✅ 使用 if-else 和 switch 两种方式实现分支逻辑
  • ✅ 结果统一输出优化
  • ✅ 数据类型合理选择(double 防溢出)

虽然功能简单,但麻雀虽小五脏俱全。这个小项目非常适合用来:

  • 练习基本语法
  • 理解控制流
  • 培养错误处理意识

代码已托管至 GitHub:https://github.com/baeldung/java-calc-example
(注:链接为模拟地址,实际请参考原文)

后续可扩展方向:

  • 支持连续计算(如 1 + 2 * 3
  • 加入 GUI 界面(Swing / JavaFX)
  • 封装为 REST 接口供调用

一步步来,别急。先把基础打牢,后面自然水到渠成。


原始标题:Basic Calculator in Java | Baeldung