如何编写Java循环计算器:输入数字与运算符,以=结束并存储公式
Java计算器程序修正
原程序存在的核心问题
- 冗余创建两个Scanner实例,易引发输入读取异常
- 流程逻辑颠倒:未遵循「先输入数字→选运算符」的要求
- 初始值错误:
sum初始化为0,未用第一个输入的数字作为计算起点 - 缺少公式存储逻辑:未用String记录完整计算表达式
- 循环条件不合理:
input >=0无法正确触发终止逻辑 - 运算逻辑错误:每次运算后未更新
sum,且输入=时错误要求继续输入数字 - 输出格式不符合样例要求
修正后的完整代码
import java.util.Scanner; public class Calculator1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int result = 0; StringBuilder formula = new StringBuilder(); // 读取第一个数字 System.out.print("Enter number: "); result = scanner.nextInt(); formula.append(result); while (true) { // 读取运算符 System.out.print("\nChoose an operator (+ or - or * or =) : "); String operator = scanner.next(); if ("=".equals(operator)) { break; } // 读取下一个数字 System.out.print("\nEnter number: "); int num = scanner.nextInt(); // 更新计算结果和公式字符串 switch (operator) { case "+": result += num; break; case "-": result -= num; break; case "*": result *= num; break; default: System.out.println("无效运算符,请输入+、-、*或="); continue; } formula.append(" ").append(operator).append(" ").append(num); } // 输出最终结果 System.out.println("\nAnswer:\n"); System.out.println(formula + " = " + result); scanner.close(); } }
关键修正说明
- 单一Scanner实例:避免多Scanner导致的输入缓存问题
- 流程对齐需求:严格按照「数字→运算符→数字→运算符...→=」的顺序执行
- 公式存储:用
StringBuilder高效拼接计算表达式,满足String存储公式的要求 - 循环终止逻辑:遇到
=直接跳出循环,无需再输入数字 - 结果更新:每次运算后实时更新
result,保证计算正确性 - 格式匹配:输出完全符合样例的换行和内容格式
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

