我正在为一家宠物店制作基本菜单,在我编写的程序中,您可以拥有多只宠物并从这家商店购买。我在命令行上运行此菜单并尝试使用
scan.nextInt()
获取用户输入,发生的情况是菜单重复了第二次,但是在第二次循环中输入任何内容似乎什么都不做,程序继续进行。互联网搜索建议我需要使用 scan.nextLine()
清除扫描仪,但这似乎也无法解决问题。如果您需要更多代码,请告诉我,但这应该足够了,我是编程新手,所以请保持温柔
public Pet showMenu()
{
Scanner scan = new Scanner(System.in);
int result = 10;
while(true)
{
System.out.println("Welcome to the pet store: ");
System.out.println("Please pick a pet ");
for (int i = 0; i < availablePets.size(); i++)
{
System.out.println(i + ")");
availablePets.get(i).printStats();
System.out.println();
}//End for
try
{
System.out.println("Which pet would you like? (Type any other number to quit)");
result = scan.nextInt();
scan.nextLine();
if (result >= 0 && result <= 3)
{
Pet tempPet = availablePets.get(result);
availablePets.remove(result);
return tempPet;
}
else
{
Pet quitObj = new Pet("Quit");
return quitObj;
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
看起来问题可能与在 scan.nextInt() 之后使用 scan.nextLine() 有关。原因是 scan.nextInt() 仅从输入中读取整数值并将换行符留在输入缓冲区中。然后,当您调用 scan.nextLine() 清除缓冲区时,它会读取这个换行符并停止,因此会跳过下一个输入。
要解决此问题,您可以在 scan.nextInt() 之后添加对 scan.nextLine() 的额外调用以清除换行符。以下是如何修改代码的示例:
System.out.println("Which pet would you like? (Type any other number to quit)");
result = scan.nextInt();
scan.nextLine(); // add this line to clear the newline character
if (result >= 0 && result < availablePets.size())
{
// code for selecting a pet
}
else
{
// code for quitting
}
通过此修改,对 scan.nextLine() 的额外调用将从输入缓冲区中清除换行符,并且后续输入应该按预期工作。