Вопрос
Я пытаюсь зациклить исключение, но по какой-то причине оно не дает мне возможности перезаписать файл сканера:
Я не знаю, как использовать BufferedReader, поэтому использую его.Есть какие-нибудь подсказки?
Вот мой стандартный класс с моим методом
package arrayExceptionsWithInput;
import java.util.*;
public class GetThoseNumbersBaby {
int firstInt;
int secondInt;
boolean error;
Scanner yourNumbers = new Scanner(System.in);
public void findNumbers()
{
System.out.println(" please enter your first number");
firstInt = yourNumbers.nextInt();
System.out.println(" pleas enter your second number");
secondInt = yourNumbers.nextInt();
int finalInt = (firstInt+secondInt);
System.out.println("total is: " + finalInt);
}
}
А вот мой основной класс с исключением, реализованным с помощью цикла:
package arrayExceptionsWithInput;
import java.util.*;
public class InputException
{
public static void main(String[] args)
{
boolean error = false;
GetThoseNumbersBaby zack = new GetThoseNumbersBaby();
{
do {
try
{
zack.findNumbers();
}
catch(InputMismatchException Q)
{
System.out.println(" one of your integers was incorrect, please try again");
Q.printStackTrace();
error = true;
}
} while (error == true);
}
error = false;
}
}
Если у кого-нибудь есть идеи о том, как это зациклить по-другому, я внимательно слушаю.
Решение 2
Я также решил избавиться от класса метода и просто поместить метод в область исключений Try.
использовал .nextLine после сканера, и он кажется исправленным.
это выглядит нормально?
package arrayExceptionsWithInput;
import java.util.*;
public class InputException
{
public static void main(String[] args)
{
boolean error = false;
int firstInt;
int secondInt;
Scanner yourNumbers = new Scanner(System.in);
{
do{
try
{
System.out.println(" please enter your first number");
firstInt = yourNumbers.nextInt();
yourNumbers.nextLine();
System.out.println(" pleas enter your second number");
secondInt = yourNumbers.nextInt();
yourNumbers.nextLine();
int finalInt = (firstInt+secondInt);
System.out.println("total is: " + finalInt);
yourNumbers.nextLine();
}
catch(InputMismatchException Q)
{
Q.printStackTrace();
System.out.println(" one of your integers was incorrect, please try again");
error = true;
yourNumbers.nextLine();
}
}while (error == true);
}error = false;
}
}
Другие советы
Установить ошибку false до Действие.Таким образом, у вас будет правильное условие выхода, если пользователь его правильно понял.
error = false;
zack.findNumbers();
Вы зацикливаетесь, пока 'ошибка' переменная имеет значение 'истинный'.Однако становится 'истинный' только тогда, когда бросается (т.е.когда 'ловить' блок выполняется).Поток управления до него не доходит.