在Java中重做try-after捕获

在Java中重做try-after捕获,java,try-catch,Java,Try Catch,现在,它在一次错误后在捕获上无限循环。我怎样才能让它在接球后回到试球区?布尔条件声明正确,没有编译错误或任何东西。类中的其余代码有点混乱,因为我正在等待关于重新尝试的答案。forjava.util.Scanner状态 当扫描器抛出InputMismatchException时,扫描器将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该令牌 因此,您将使用此方法无限期地检索。在catch块中,您需要跳过标记。以及Jeff的回答,没有迹象表明在设置为false一次后,任何东西都会将条件设置回t

现在,它在一次错误后在捕获上无限循环。我怎样才能让它在接球后回到试球区?布尔条件声明正确,没有编译错误或任何东西。类中的其余代码有点混乱,因为我正在等待关于重新尝试的答案。

for
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);
}