Повторяю попытку после улова в Java - PullRequest
2 голосов
/ 23 сентября 2011
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 ]

8 голосов
/ 23 сентября 2011

Документация для java.util.Scanner состояний

Когда сканер генерирует исключение InputMismatchException, сканер не пропустит токен, вызвавший исключение, чтобы его можно было извлечьили пропущен каким-либо другим методом.

Таким образом, вы будете получать его бесконечно долго, используя этот метод.В блоке catch вам нужно пропустить токен.

2 голосов
/ 23 сентября 2011

Так же как и ответ Джеффа, нет никаких признаков того, что что-либо когда-либо будет устанавливать condition обратно на true после того, как один раз было установлено значение false. Вы можете сделать его локальной переменной или просто вернуться из блока try:

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

Теперь этот метод не влияет ни на одно состояние, кроме сканера, что, вероятно, является тем, что вам нужно, и (IMO) также проще.

...