在Java中重做try-after捕获
现在,它在一次错误后在捕获上无限循环。我怎样才能让它在接球后回到试球区?布尔条件声明正确,没有编译错误或任何东西。类中的其余代码有点混乱,因为我正在等待关于重新尝试的答案。for在Java中重做try-after捕获,java,try-catch,Java,Try Catch,现在,它在一次错误后在捕获上无限循环。我怎样才能让它在接球后回到试球区?布尔条件声明正确,没有编译错误或任何东西。类中的其余代码有点混乱,因为我正在等待关于重新尝试的答案。forjava.util.Scanner状态 当扫描器抛出InputMismatchException时,扫描器将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该令牌 因此,您将使用此方法无限期地检索。在catch块中,您需要跳过标记。以及Jeff的回答,没有迹象表明在设置为false一次后,任何东西都会将条件设置回t
java.util.Scanner
状态
当扫描器抛出InputMismatchException时,扫描器将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该令牌
因此,您将使用此方法无限期地检索。在catch块中,您需要跳过标记。以及Jeff的回答,没有迹象表明在设置为false一次后,任何东西都会将
条件
设置回true
。可以将其设置为局部变量,也可以从try块返回:
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;
}
}
}
现在,该方法不会影响扫描器以外的任何状态,扫描器可能正是您想要的——而且(依我看)它也更简单。您如何知道它正在捕获上循环?它应该返回到try,在那里打印或使用调试器。还有,是什么让你认为再试一次会改变你得到的结果?
while(condition==true)
:为什么不调用标志done
,颠倒它的意思,然后说while(!done)
?我们需要所有的代码。在哪里声明条件变量?它初始化为什么?如果条件初始化为true,scanner.nextInt()抛出异常而不实际移动“指针”,则将得到一个无限循环。由于输入在try中,因此它将是不同的输入,因此结果也不同。对不起,这让我有点不知所措。你能给我举个例子吗?它抛出异常,但不推进文件指针。假设文件内容是“香蕉123”,它位于流的开头(例如,文件指针位于B)。显然,香蕉不是整数,因此将引发异常,但下次文件指针仍将位于同一位置。在异常之后,您可以执行类似“scanner.next()”的操作,它将返回下一个字符串(“香蕉”)。现在,当您执行scanner.nextInt()时,它将返回123。对不起,我的问题。我想我现在明白了。
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);
}