Java简易计算器输入兼容问题求助:支持两种输入格式实现
兼容两种输入格式的简易计算器实现方案
嘿,我来帮你搞定这个兼容两种输入格式的问题!你的当前代码之所以会崩溃,是因为它固定按「数字→数字→运算符」的顺序读取输入,当用户输入「数字→运算符→数字」格式时,第二个nextInt()会试图读取运算符字符串,直接抛出InputMismatchException。
下面是一个简单的解决方案,核心思路是先收集所有输入元素,再动态区分运算符和数字,不管输入顺序如何都能正确识别:
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Calculator { public static void main(String[] args) { Scanner kb = new Scanner(System.in); System.out.println("Enter what you want to calculate"); String line = kb.nextLine(); Scanner scan = new Scanner(line); // 把输入的所有元素收集到列表中 List<String> elements = new ArrayList<>(); while (scan.hasNext()) { elements.add(scan.next()); } // 初始化变量,准备提取数字和运算符 int num1 = 0, num2 = 0; char operator = ' '; // 遍历元素,区分数字和运算符 for (String elem : elements) { // 判断是否是合法运算符(长度为1,且属于四则运算符号) if (elem.length() == 1 && "+-*/".contains(elem)) { operator = elem.charAt(0); } else { // 尝试将元素转为数字,这里可以加异常处理防止非法输入 try { if (num1 == 0) { num1 = Integer.parseInt(elem); } else { num2 = Integer.parseInt(elem); } } catch (NumberFormatException e) { System.out.println("Error: Invalid number input"); return; } } } // 检查是否获取到了合法的运算符和两个数字 if (operator == ' ' || (num1 == 0 && num2 == 0)) { System.out.println("Error: Invalid input format"); return; } // 执行计算并输出结果 int result = 0; switch (operator) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': if (num2 == 0) { System.out.println("Error: Cannot divide by zero"); return; } result = num1 / num2; break; default: System.out.println("Error: Invalid operator"); return; } System.out.println("Result: " + result); } }
关键逻辑说明:
- 收集输入元素:先用
Scanner把整行输入拆分成独立的字符串元素,存入列表,这样就不用关心输入顺序了。 - 动态识别运算符:遍历列表时,判断元素是否是长度为1的四则运算符号,是的话标记为运算符。
- 提取数字:剩下的两个元素尝试转为整数,分别赋值给
num1和num2,同时加了try-catch处理非数字输入的情况。 - 异常防护:额外检查了运算符缺失、数字缺失、除零等异常场景,避免程序崩溃。
这样修改后,不管用户输入5 5 *还是5 * 5,程序都能正确处理啦!
内容的提问来源于stack exchange,提问作者John Erwin
相关产品推荐
相关产品推荐

