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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:29:00