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

Java计算器代码编译失败及输入处理异常问题求助

解决你的Java计算器输入异常问题

嘿,我看到你遇到的问题了,咱们一步步拆解并解决它:

问题1:字符串比较逻辑错误

你现在判断用户输入的回答时用了==,但在Java里,==是用来比较对象的引用地址,而不是字符串的实际内容。哪怕用户输入了"yes",Answer == "yes"也会返回false——因为这两个是内存中不同的字符串对象,自然匹配不上。

解决办法是改用equals()(严格区分大小写)或者equalsIgnoreCase()(忽略大小写,对用户更友好):

if (Answer.equalsIgnoreCase("yes")) {
    Calculator();
} else if (Answer.equalsIgnoreCase("no")) {
    System.out.println("Thank you for using our Calculator app");
} else {
    System.out.println("Please, enter a valid answer");
}

问题2:Scanner输入缓冲区的换行符残留

这是更隐蔽的核心问题:你之前用reader.nextDouble()和reader.next()读取数字、操作符时,这些方法只会读取有效输入,不会处理用户输入结束后按下的回车键(也就是换行符)。当你创建reader2并调用reader2.nextLine()时,它会直接读取到缓冲区里残留的空换行符,导致Answer变成空字符串——这就会直接触发无效提示,不管你之后输入什么内容。

解决办法:

  • 不要创建多个Scanner对象,重复使用同一个即可(避免资源浪费)
  • 在读取用户的回答前,先调用reader.nextLine()清空缓冲区里的残留换行符

修改后的这部分代码:

// 复用之前的reader,不用新建reader2
System.out.println("Anything else to calculate?");
// 先清空缓冲区残留的换行符
reader.nextLine();
String Answer = reader.nextLine();

额外优化:方法返回值规范

你的Calculator()方法声明了返回double,但方法内没有统一的return语句(之前编译报错就是因为这个)。其实这个方法是执行计算逻辑,不需要返回结果,把它改成void类型更合理:

public static void Calculator(){
    // 内部逻辑不变,无需再添加return语句
}

完整修改后的代码

package calc; 
import java.util.Scanner; 

public class Calc { 
    public static void main(String[] args){
        Calculator(); 
    } 

    static double sum (double val1, double val2){
        return val1 + val2; 
    } 

    static double substract (double val1, double val2) {
        return val1 - val2; 
    } 

    static double multiply (double val1, double val2) {
        return val1 * val2; 
    } 

    static double divide (double val1, double val2) {
        return val1 / val2; 
    } 

    public static void Calculator(){
        Scanner reader = new Scanner(System.in); 

        System.out.println("Enter the first number, please");
        double x = reader.nextDouble(); 

        System.out.println("Enter the second number, please");
        double y = reader.nextDouble(); 

        System.out.println("Enter desired operation, please");
        char z = reader.next().charAt(0); 

        switch(z) { 
            case '+': 
                double a = sum(x,y); 
                System.out.println(a); 
                break; 
            case '-': 
                double b = substract(x,y); 
                System.out.println(b); 
                break; 
            case '*': 
                double c = multiply(x,y); 
                System.out.println(c); 
                break; 
            case '/': 
                double d = divide (x,y); 
                System.out.println(d); 
                break;
            default:
                System.out.println("Invalid operation!");
        } 

        System.out.println("Anything else to calculate?");
        // 清空缓冲区残留的换行符
        reader.nextLine();
        String Answer = reader.nextLine(); 

        if (Answer.equalsIgnoreCase("yes")) {
            Calculator(); 
        } else if (Answer.equalsIgnoreCase("no")) {
            System.out.println("Thank you for using our Calculator app");
            reader.close(); // 关闭Scanner避免资源泄漏
        } else {
            System.out.println("Please, enter a valid answer");
            Calculator(); // 递归让用户重新输入
        } 
    } 
}

这样修改后,你的计算器就能正常处理用户的输入回答,不会再出现不管输入什么都提示无效的问题啦!

内容的提问来源于stack exchange,提问作者Alex List

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:27:34