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

基于多类实现计算器的Java代码报错及整合问题求助

计算器代码问题修复方案

1. GetData类问题修复

你写的GetData类存在隐性问题:getInt()和getDouble()方法里重新定义了局部变量intx和inty,导致类的成员变量始终是默认值0.0,后续调用无法获取用户输入的数值。修正方法是去掉局部变量的类型声明,直接给成员变量赋值,同时优化命名提升可读性:

import java.util.Scanner;
public class GetData {    
    Scanner getdata = new Scanner(System.in);
    public double num1;
    public double num2;
                
    public void getFirstNum() {
       System.out.print("Enter first number: ");
       num1 = getdata.nextDouble(); 
    }
           
    public void getSecondNum() {
       System.out.print("Enter second number: ");
       num2 = getdata.nextDouble(); 
    }
}

2. MathOps类编译错误修复

编译错误源于sub()和divide()方法中,编译器认为存在未返回值的执行路径(即便逻辑上覆盖了所有情况,编译器也不会做逻辑推导)。此外还有几个优化点:移除不必要的Scanner、统一参数为double支持小数运算、增加除数为0的异常处理。修正后的代码:

public class MathOps {
    public double add(double x, double y) {
        System.out.println("Adding " + x + " and " + y);
        return x + y;
    }

    public double multiply(double x, double y) {
        System.out.println("Multiplying " + x + " and " + y);
        return x * y;
    }

    public double sub(double x, double y) {
        System.out.println("Subtracting " + x + " and " + y);
        if (x >= y) {
            return x - y;
        } else {
            return y - x;
        }
    }

    public double divide(double x, double y) {
        System.out.println("Dividing " + x + " and " + y);
        if (y == 0 || x == 0) {
            System.out.println("Error: Cannot divide by zero!");
            return 0;
        }
        if (x >= y) {
            return x / y;
        } else {
            return y / x;
        }
    }
}

3. L3Operations整合类修复

原代码存在Scanner方法调用错误、未实例化核心类、缺少运算选择逻辑等问题,修正后实现完整的计算器流程:

import java.util.Scanner;

public class L3Operations {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        GetData input = new GetData();
        MathOps calculator = new MathOps();
        double result = 0;

        // 获取用户输入的两个数字
        input.getFirstNum();
        input.getSecondNum();

        // 让用户选择运算类型
        System.out.println("\nChoose operation:");
        System.out.println("1. Add");
        System.out.println("2. Multiply");
        System.out.println("3. Subtract");
        System.out.println("4. Divide");
        System.out.print("Enter your choice (1-4): ");
        int choice = scanner.nextInt();

        // 根据选择调用对应运算方法
        switch (choice) {
            case 1:
                result = calculator.add(input.num1, input.num2);
                break;
            case 2:
                result = calculator.multiply(input.num1, input.num2);
                break;
            case 3:
                result = calculator.sub(input.num1, input.num2);
                break;
            case 4:
                result = calculator.divide(input.num1, input.num2);
                break;
            default:
                System.out.println("Invalid choice!");
                return;
        }

        // 输出结果
        System.out.println("Result: " + result);
        scanner.close();
    }
}

核心修复点总结

  1. GetData类:修正成员变量赋值逻辑,优化命名提升可读性
  2. MathOps类:解决return语句缺失问题,增加异常处理,移除冗余组件
  3. L3Operations类:完善流程控制,修复Scanner方法调用错误,实现完整的用户交互逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:00:38