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 接口供调用
一步步来,别急。先把基础打牢,后面自然水到渠成。