Java面向对象开发计算器时加法方法未正常执行问题排查
Java计算器程序问题排查与修复
存在的问题
- 构造函数赋值逻辑颠倒:构造方法中代码写为
valueTyped = currentValue,实际是将currentValue的默认值0赋值给参数,你输入的初始值没有存入类的属性,导致后续计算的基数始终为0 - 运算结果未处理:调用加法方法后只执行了计算逻辑,既没有更新计算器的当前值,也没有打印返回的运算结果,所以看不到计算效果
- (优化建议)
currentValue用static修饰不符合面向对象封装逻辑,多个计算器实例会共享该值,互相干扰,建议去掉static修饰
修复后的代码
CalculatorOOP.java
import java.util.Scanner; public class CalculatorOOP { Scanner input = new Scanner(System.in); // 去掉static修饰,改为实例属性 public double currentValue; public double valueInput; public CalculatorOOP(double valueTyped){ // 修正赋值顺序,把传入的初始值赋值给类属性 currentValue = valueTyped; } public double addToValue(){ System.out.println("Type the value you want to add:"); double valueToAdd = input.nextDouble(); double valueAfterAddition = currentValue + valueToAdd; // 更新当前值,支持后续连续运算 currentValue = valueAfterAddition; return valueAfterAddition; } public double substractToValue(){ System.out.println("Type the value you want to substract:"); double valueToSubstract = input.nextDouble(); double valueAfterSubstraction = currentValue - valueToSubstract; currentValue = valueAfterSubstraction; return valueAfterSubstraction; } public double multiplyValue(){ System.out.println("Type the factor value:"); double factor = input.nextDouble(); double valueAfterMultiplication = currentValue * factor; currentValue = valueAfterMultiplication; return valueAfterMultiplication; } public double divideValue(){ System.out.println("Type the divisor value:"); double divisor = input.nextDouble(); double valueAfterDivision = currentValue / divisor; currentValue = valueAfterDivision; return valueAfterDivision; } }
Main.java
import java.util.Scanner; public class Main { public static void main(String[]args){ Scanner input = new Scanner(System.in); System.out.println("Type a value:"); double valueInput = input.nextDouble(); CalculatorOOP obj = new CalculatorOOP(valueInput); System.out.println("Enter the calculation option (1, 2, 3, or 4):"); int optionEntered = input.nextInt(); switch (optionEntered){ case 1 : double addRes = obj.addToValue(); // 打印运算结果 System.out.println("运算结果:" + addRes); break; // 可自行补充其他运算的case逻辑 default: System.out.println("无效选项"); } } }
修复后运行效果
Type a value: 2 Enter the calculation option (1, 2, 3, or 4): 1 Type the value you want to add: 4 运算结果:6.0 Process finished with exit code 0
内容的提问来源于stack exchange,提问作者1010l0gic
相关产品推荐
相关产品推荐

