Java计算器Restart功能失效:如何触发操作选择逻辑?
问题分析与修复方案
你的核心问题是外层while循环的代码结构错误——当前写法里while(MO==true)只执行了MO=false;这一行,后续的操作选择代码根本不在循环体内,所以即使触发Restart设置MO=true,也无法回到操作选择环节。另外还有几处小逻辑问题影响功能,下面是具体修复步骤:
1. 修正外层while循环结构
把操作选择的所有代码(从打印菜单到运算处理逻辑)都包裹到外层while循环的大括号里,这样当MO=true时,才能重新执行操作选择流程:
boolean MO = true; while (MO) { // 简化写法,等价于MO==true MO = false; // 初始设为false,除非触发Restart,否则循环结束 // 操作选择的所有代码都放到这里面 System.out.println("Please enter your operation"); System.out.println("1 - Addition"); System.out.println("2 - Subtraction"); System.out.println("3 - Multiplication"); System.out.println("4 - Division"); // ... 后续运算处理代码 }
2. 修复Clear功能的逻辑
当前Clear分支里只是定义了局部变量ae=0,并没有真正重置加法的起始值as,导致缓存清空无效,要改成直接修改as:
else if (Objects.equals(an, "Clear")) { as = 0; // 重置加法起始值 System.out.println("Cache clear!"); ab = true; // 继续循环等待输入 }
3. 修复End功能的退出逻辑
当前End分支没有设置ab=false,导致加法循环会继续执行,需要添加退出标记:
if (Objects.equals(an, "End")) { System.out.println("Quitting"); ab = false; // 退出加法循环 }
4. 优化Scanner的使用
不需要频繁调用scanner.reset(),且只需创建一个Scanner实例即可,避免重复初始化,最后记得关闭资源。
完整修复后的代码
import java.util.Objects; import java.util.Scanner; public class Main { public static void main(String[] args) { boolean MO = true; Scanner scanner = new Scanner(System.in); // 只初始化一次Scanner while (MO) { MO = false; System.out.println("Please enter your operation"); System.out.println("1 - Addition"); System.out.println("2 - Subtraction"); System.out.println("3 - Multiplication"); System.out.println("4 - Division"); int op = scanner.nextInt(); System.out.println(op); // Addition if (op == 1) { System.out.println("Enter a starting value!"); int as = scanner.nextInt(); boolean ab = true; while (ab) { ab = false; System.out.println("Please enter a number to add or type 'End' to end or 'Clear' to reset or 'Restart' to exit the mode"); String an = scanner.next(); if (Objects.equals(an, "End")) { System.out.println("Quitting"); ab = false; } else if (Objects.equals(an, "Clear")) { as = 0; System.out.println("Cache clear!"); ab = true; } else if (Objects.equals(an, "Restart")) { System.out.println("Restarting!"); MO = true; break; } else { try { int ra = Integer.parseInt(an); as += ra; // 简化加法赋值逻辑 System.out.println(as); ab = true; // 继续循环等待下一次输入 } catch (NumberFormatException e) { System.out.println("Invalid input! Please enter a number or valid command."); ab = true; } } } } // 可在此扩展减法、乘法、除法的逻辑 } scanner.close(); // 关闭Scanner释放资源 } }
额外说明
- 新增
try-catch处理非数字输入的异常,避免程序直接崩溃; - 简化加法赋值为
as += ra,代码更简洁; - 统一Scanner实例的创建与关闭,符合Java资源管理规范。
内容的提问来源于stack exchange,提问作者ThunderCoder
相关产品推荐
相关产品推荐

