import java.util.Scanner;
public class Questioner {
Scanner scanner = new Scanner(System.in);
boolean condition;
int tempInt;
double tempDouble;
public Questioner()
{
condition = true;
}
public String stringInput(String text)
{
System.out.print(text);
return scanner.nextLine();
}
public int intInput(String text)
{
do
{
System.out.print(text);
try
{
tempInt = scanner.nextInt();
condition = false;
}
catch (java.util.InputMismatchException error)
{
System.out.println("Please use valid input.");
}
} while (condition == true);
return tempInt;
}
public double doubleInput(String text)
{
System.out.print(text);
try
{
return scanner.nextDouble();
}
catch (java.util.InputMismatchException error)
{
System.out.println("Please use valid input.");
return 0;
}
}
}
现在,它在一次错误后无限循环捕获。我怎样才能让它在捕获后回到尝试?布尔条件被正确声明,没有编译错误或任何东西。这个代码中的其余代码有点混乱,因为我正在等待重新尝试的答案。
答案 0 :(得分:8)
java.util.Scanner
州的documentation
当扫描程序抛出InputMismatchException时,扫描程序将不会传递导致异常的标记,因此可以通过其他方法检索或跳过它。
因此,您将使用此方法无限期地检索。在catch块中,您需要跳过令牌。
答案 1 :(得分:2)
除了杰夫的答案之外,没有任何迹象表明在将condition
设置为假一次后,任何内容都会将true
设置回public int intInput(String text)
{
do
{
System.out.print(text);
try
{
return scanner.nextInt();
}
catch (java.util.InputMismatchException error)
{
System.out.println("Please use valid input.");
// Consume input here, appropriately...
}
} while (true);
}
。你可以使它成为局部变量,或者你可以从try块返回:
{{1}}
现在该方法不会影响扫描仪以外的任何状态,这可能是您想要的 - 而且(IMO)它也更简单。