基于多类实现计算器的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(); } }
核心修复点总结
- GetData类:修正成员变量赋值逻辑,优化命名提升可读性
- MathOps类:解决return语句缺失问题,增加异常处理,移除冗余组件
- L3Operations类:完善流程控制,修复Scanner方法调用错误,实现完整的用户交互逻辑
内容的提问来源于stack exchange,提问作者LCDIgnited
相关产品推荐
相关产品推荐

