Java计算器程序Scanner输入与if语句被跳过的修复咨询
解决Java Scanner跳过操作符输入的问题
问题根源
核心问题是Scanner输入流的残留换行符:
当使用scanner.nextInt()读取整数时,它只会读取数字部分,用户输入完整数后按下的回车(换行符)会留在输入流中。后续调用scanner.nextLine()时,会直接读取这个空的换行符,导致choice变量变成空字符串,程序直接触发"invalid operand"的提示分支,完全跳过了操作符的输入步骤。
解决方案
有两种简单的修复方式,任选其一即可:
方案1:用next()替代nextLine()读取操作符
next()方法会自动跳过所有空白字符(包括换行、空格),只读取到下一个空白前的内容,非常适合读取单个字符的操作符:
System.out.print("choose from these 4 options(+,-,/,*): "); String choice = scanner.next();
方案2:手动消耗残留的换行符
在最后一个nextInt()之后,额外调用一次scanner.nextLine()来吃掉输入流中残留的换行符,之后再用nextLine()读取操作符:
System.out.print("Enter the second integer: "); int num2 = scanner.nextInt(); // 消耗掉残留的换行符 scanner.nextLine(); System.out.print("choose from these 4 options(+,-,/,*): "); String choice = scanner.nextLine();
额外代码问题修复
除了输入问题,你的代码还有几个小问题需要修正,否则功能会异常:
- if语句结构错误:最后一个
if (choice.equals("/"))是独立判断,会导致即使前面的+、-、*匹配成功,也会进入else分支输出无效提示,需要改成else if。 - 方法名不符合Java规范:
Sub方法名应改为小驼峰的subtract,和其他方法保持一致。 - 缺少结果输出:减、乘、除操作后没有打印计算结果,需要添加输出语句。
- 拼写错误:
choose fromm改为choose from。
修正后的完整代码
Main类
public class Main { public static void main(String[] args) { int result = 0; Scanner scanner = new Scanner(System.in); System.out.println("Welcome to the worlds best calculator"); // 输入第一个整数 System.out.print("Enter the first integer: "); int num1 = scanner.nextInt(); // 输入第二个整数 System.out.print("Enter the second integer: "); int num2 = scanner.nextInt(); // 方案1:用next()读取操作符 System.out.print("choose from these 4 options(+,-,/,*): "); String choice = scanner.next(); if (choice.equals("+")) { result = Calculator.add(num1, num2); System.out.println("the answer is: " + result); } else if (choice.equals("-")) { result = Calculator.subtract(num1, num2); System.out.println("the answer is: " + result); } else if (choice.equals("*")) { result = Calculator.multiply(num1, num2); System.out.println("the answer is: " + result); } else if (choice.equals("/")) { result = Calculator.divide(num1, num2); System.out.println("the answer is: " + result); } else { System.out.println("invalid operand please try again"); } scanner.close(); } }
Calculator类
public class Calculator { public static int subtract(int num1, int num2) { return num1 - num2; } public static int multiply(int num1, int num2) { return num1 * num2; } public static int divide(int num1, int num2) { if (num2 == 0) { System.out.println("Division by zero is not allowed."); return 0; } return num1 / num2; } public static int add(int num1, int num2) { return num1 + num2; } }
内容的提问来源于stack exchange,提问作者Mustafa
相关产品推荐
相关产品推荐

