You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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();

额外代码问题修复

除了输入问题,你的代码还有几个小问题需要修正,否则功能会异常:

  1. if语句结构错误:最后一个if (choice.equals("/"))是独立判断,会导致即使前面的+、-、*匹配成功,也会进入else分支输出无效提示,需要改成else if。
  2. 方法名不符合Java规范:Sub方法名应改为小驼峰的subtract,和其他方法保持一致。
  3. 缺少结果输出:减、乘、除操作后没有打印计算结果,需要添加输出语句。
  4. 拼写错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 22:10:01