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

Java程序完成任务后如何返回初始菜单?

问题修复:让程序执行完操作后返回主菜单

你的核心问题是没有用循环包裹主菜单逻辑,原代码里的if (isactive = true)是单次赋值判断,执行一次后程序就走到末尾退出了。下面是修复后的完整代码,同时修正了其他几个影响功能的小问题:

修复点说明

  • 用循环包裹主菜单逻辑,确保执行完操作后自动回到菜单
  • 只创建一个Scanner实例,避免资源浪费和输入异常
  • 编辑数组时用set()方法替换元素,原代码的add()会插入新元素而非替换
  • 修正编辑菜单里的重复文字错误
  • 移除不必要的System.exit(1),改为回到主菜单
  • 添加输入合法性检查,避免数组越界

修复后的代码

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    static ArrayList<String> planets = new ArrayList<>();

    public static void main(String[] args) {
        // 初始化行星列表
        planets.add("Mars");
        planets.add("Jupiter");
        planets.add("Earth");
        planets.add("Venus");
        planets.add("Neptune");
        planets.add("Saturn");
        
        Scanner scn = new Scanner(System.in);
        boolean isActive = true;

        // 主循环:维持程序运行直到用户选择退出
        while (isActive) {
            System.out.println("=== 行星管理程序 ===");
            System.out.println("1. 打印行星列表");
            System.out.println("2. 编辑指定位置的行星");
            System.out.println("3. 添加新行星");
            System.out.println("4. 退出程序");
            System.out.print("请输入选项:");

            int menuOption = scn.nextInt();
            scn.nextLine(); // 处理nextInt()留下的换行符,避免后续输入异常

            switch (menuOption) {
                case 1:
                    System.out.println("当前行星列表:" + planets);
                    break;
                case 2:
                    System.out.println("请选择要编辑的位置(0-" + (planets.size()-1) + "),输入9返回主菜单");
                    int editPos = scn.nextInt();
                    scn.nextLine();
                    
                    if (editPos == 9) {
                        break;
                    }
                    // 检查输入位置是否合法
                    if (editPos >= 0 && editPos < planets.size()) {
                        System.out.print("请输入新的行星名称:");
                        String newPlanet = scn.nextLine();
                        planets.set(editPos, newPlanet); // 替换指定位置元素
                        System.out.println("修改后的列表:" + planets);
                    } else {
                        System.out.println("输入的位置不合法!");
                    }
                    break;
                case 3:
                    System.out.print("请输入要添加的行星名称:");
                    String addPlanet = scn.nextLine();
                    planets.add(addPlanet);
                    System.out.println("添加后的列表:" + planets);
                    break;
                case 4:
                    System.out.println("感谢使用本程序!");
                    isActive = false; // 终止循环,程序正常退出
                    break;
                default:
                    System.out.println("无效选项,请重新输入!");
            }
            System.out.println(); // 换行分隔,提升可读性
        }
        scn.close(); // 关闭Scanner资源
    }
}

关键改进细节

  1. 循环逻辑:用while(isActive)包裹整个主菜单流程,用户选择退出时将isActive设为false,循环结束后程序正常退出。
  2. Scanner优化:仅创建一个Scanner实例,在nextInt()后补充nextLine()处理换行符,避免后续nextLine()读取空值的问题。
  3. 编辑功能修正:使用planets.set(editPos, newPlanet)实现元素替换,原代码的add()会在指定位置插入新元素,导致原元素后移,不符合编辑需求。
  4. 合法性校验:编辑时检查输入的位置是否在列表有效索引范围内,避免抛出数组越界异常。
  5. 代码简化:用switch-case替代多个if判断,让代码逻辑更清晰易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:40:58