在下面的代码中,当我输入除整数值之外的任何内容时,代码不会再次请求我的输入,只是无限循环字符串输出。一点帮助......
int choice = 0;
while(choice == 0)
{
try
{
System.out.println("Start by typing the choice number from above and hitting enter: ");
choice = input.nextInt();
}
catch(Exception e)
{
}
if ((choice == 1) || (choice == 2) || (choice == 3))
{
break;
}
else
{
System.out.println("Invalid choice number. Please carefully type correct option.");
choice = 0;
}
}
答案 0 :(得分:3)
输入非整数时,不会消耗它。你需要扫描过去。例如,可以通过向input.nextLine()
块添加catch
语句来完成此操作。这将消耗无效输入并允许程序读取新数据。
这将解决您的问题:
catch(Exception e)
{
input.nextLine(); // Consume the invalid line
System.out.println("Invalid choice number. Please carefully type correct option.");
}
您还可以将该行读作字符串并尝试使用Scanner.nextLine
和Integer.parseInt
将其解析为数字,但我更喜欢将nextInt
用于整数。它使代码的目的更加清晰(在我看来)。
答案 1 :(得分:2)
当使用nextInt
并且下一个输入不是int时,它将抛出异常,但不消耗数据,即下一个调用将立即返回,因为数据仍然是当下。
您可以通过使用skip
之类的模式调用[^0-9]*
方法来解决此问题,以跳过所有无效输入。那么像“aaa3”这样的输入就可以了。如果您想忽略所有内容,请使用.*
作为模式。
答案 2 :(得分:1)
您使用的是Scanner(system.in);
套餐中的import java.util.Scanner;
吗?
尝试在catch中添加input.nextLine();
以清除值以停止无限循环。
public static void main(String[] args) {
int choice = 0;
Scanner input = new Scanner(System.in);
while(choice == 0)
{
try
{
System.out.println("Start by typing the choice number from above and hitting enter: ");
choice = input.nextInt();
}
catch(Exception e)
{
input.nextLine();
System.out.println("Invalid choice number. Please carefully type correct option.");
}
if ((choice == 1) || (choice == 2) || (choice == 3))
{
break;
}
else
{
System.out.println("Invalid choice number. Please carefully type correct option.");
choice = 0;
}
}
}
答案 3 :(得分:1)
问题是您没有消耗流中的剩余数据。我使用以下代码解决了这个问题,尽管在程序中使用代码之前,您需要更好地记录代码:
int choice = 0;
while(choice == 0)
{
try
{
System.out.print("Start by typing the choice number from above and hitting enter: ");
choice = input.nextInt();
}
catch(Exception e)
{
input.next();
System.out.println("Invalid choice number. Please carefully type correct option.");
}
if ((choice == 1) || (choice == 2) || (choice == 3))
{
break;
}
choice = 0;
}
答案 4 :(得分:1)
您可以按如下方式简化和减少代码:
int choice;
System.out.println("Start by typing the choice number from above and hitting enter: ");
while(true)
{
try {
choice = input.nextInt();
if ((choice == 1) || (choice == 2) || (choice == 3))
break;
} catch(InputMismatchException e) { // handle only the specific exception
input.nextLine(); // clear the input
}
System.out.println("Invalid choice number. Please carefully type correct option.");
}
答案 5 :(得分:0)
在choice = input.nextInt();
行中看起来像
选择值始终为0.之后不久打印选择。
对于非整数值,添加一个从循环中断的条件。