在Java中捕获后重做一次尝试

时间:2011-09-23 12:42:48

标签: java try-catch

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

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

2 个答案:

答案 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)它也更简单。