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();
可选优化
- printAnimals方法参数命名:把参数名
printAnimals改为option,避免和方法名混淆,提升可读性。 - 打印格式优化:打印动物名称时添加分隔符,避免名称连在一起:
// 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
相关产品推荐
相关产品推荐

