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

Java程序printAnimals方法打印内容无限重复问题求助

问题根源

你的程序并非printAnimals方法内部无限重复,而是main方法的循环逻辑错误:每次执行完菜单选项(比如选4打印狗列表)后,没有重新获取新的用户输入,menuChoice会一直保持为之前的选项(比如"4"),导致循环反复执行同一个操作,看起来像是打印内容无限重复。

核心修复方案

调整main方法的while循环结构,把显示菜单和获取用户输入的逻辑移到循环内部,确保每次循环都能获取新的选项:

public static void main(String[] args) {
    String menuChoice = "";
    initializeDogList();
    initializeMonkeyList();

    while(!menuChoice.equalsIgnoreCase("q")){
        displayMenu();  // 每次循环都重新显示菜单
        menuChoice = scnr.nextLine();  // 每次循环都获取新的用户输入
        switch(menuChoice) {
            case "1":
                intakeNewDog(scnr);
                break;
            case "2":
                intakeNewMonkey(scnr);
                break;
            case "3":
                reserveAnimal(scnr);
                break;
            case "4":
                printAnimals("4");
                break;
            case "5":
                printAnimals("5");
                break;
            case "6":
                printAnimals("6");
                break;
            case "q":
                // 退出逻辑,无需额外操作
                break;
            default:
                System.out.println("\n无效输入,请输入1-6或q");
                break;
        }
    }
}
额外问题修复

除了无限循环的问题,你的程序还有Scanner输入残留的bug,会导致新增动物时后续输入读取异常:
在intakeNewDog和intakeNewMonkey方法中,使用scnr.nextBoolean()后会留下换行符,需要添加scnr.nextLine()清除:

// intakeNewDog方法中修改
System.out.println("Is this dog reserved?");
boolean reserved = scnr.nextBoolean();
scnr.nextLine(); // 清除nextBoolean留下的换行符
System.out.println("Which country is the dog in service");
String inServiceCountry = scnr.nextLine();

// intakeNewMonkey方法中同理修改
System.out.println("Is this monkey reserved?");
boolean reserved = scnr.nextBoolean();
scnr.nextLine(); // 清除换行符
System.out.println("Which country is the monkey in service");
String inServiceCountry = scnr.nextLine();
可选优化
  1. printAnimals方法参数命名:把参数名printAnimals改为option,避免和方法名混淆,提升可读性。
  2. 打印格式优化:打印动物名称时添加分隔符,避免名称连在一起:
// case "4"的循环中
for (int i = 0; i < dogList.size(); ++i) {
    Dog dog = dogList.get(i);
    System.out.print(dog.getName());
    if (i != dogList.size() - 1) {
        System.out.print(", ");
    }
}
System.out.println(); // 打印完后换行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:47:03