Я сейчас работаю над маленькой игрой, и у меня возникла проблема, которую я не могу исправить. У меня есть метод, который считывает ввод и сохраняет его в переменных. Для любого неправильного ввода будет выведено исключение IllegalArgumentException, где вы можете попробовать ввести еще раз. Но если вы сделаете это неправильно еще раз, он просто перейдет к следующему типу ввода. Но я хочу, чтобы он запрашивал ввод до ввода. Мой наставник сказал мне сделать это с попыткой и поймать, что я сделал, но поскольку сказал, что это будет делать это дважды, а затем продолжить.рекурсивно перехватывает исключения в Java
Here's код:
public void readSettings(){
Scanner userinput = new Scanner(System.in);
System.out.println("Wie lange soll der Code sein? (4-10):");
String input = userinput.nextLine();
//Eingabe der Länge des zu lösenden Codes. Bei einer Eingabe außerhab des Wertebereichs wird dies gemeldet und neu gefragt.
try{
if (input.matches("[4-9]|10")) {
this.codelength = Integer.parseInt(input);
}
else {
throw new IllegalArgumentException();
}
}
catch (IllegalArgumentException e) {
System.out.println("Eingabe außerhalb des Wertebreichs!");
//readSettings();
System.out.println("Wie lange soll der Code sein? (4-10):");
input = userinput.nextLine();
if (input.matches("[4-9]|10")) {
this.codelength = Integer.parseInt(input);
}
else {
throw new IllegalArgumentException(e);
}
} finally {
System.out.println("Welche Ziffern sind erlaubt? 0- (1-9):");
input = userinput.nextLine();
//Hier wird die valuerange(Also die Maximale Zahl in der Reihe) abgefragt.
//Auch hier wird eine falche Eingabe abgefangen und der Input neu gestartet. (Leider nicht sehr elegant und benutzerfreundlich.
try {
if (input.matches("[1-9]")) {
this.valuerange = Integer.parseInt(input);
}
else {
throw new IllegalArgumentException();
}
}
catch (IllegalArgumentException f) {
System.out.println("Eingabe außerhalb des Wertebreichs!");
//readSettings();
System.out.println("Welche Ziffern sind erlaubt? 0- (1-9):");
input = userinput.nextLine();
if (input.matches("[1-9]")) {
this.valuerange = Integer.parseInt(input);
}
else {
throw new IllegalArgumentException(f);
}
} finally {
//Falls der Modus nicht Cpmouter gegen Computer ist, wird ein Spielername mit abgefragt.
try {
if(!cpumode) {
System.out.println("Spielername:");
this.spielername = userinput.nextLine();
//Falls kein input bein Namen vorhanden, wird ein Fehler ausgegeben.
if (spielername.length()==0) {
throw new IllegalArgumentException("Fehler, kein Spielername eingegeben!");
}
}
} catch (IllegalArgumentException e) {
System.out.println("Spielername:");
this.spielername = userinput.nextLine();
if (spielername.length()==0) {
//throw new IllegalArgumentException("Fehler, kein Spielername eingegeben!");
throw new IllegalArgumentException(e);
}
}
}
}
}
Я надеюсь, что вы можете мне помочь. Спасибо!
_ «Но я хочу, чтобы он запрашивал ввод до тех пор, пока вход не будет действительным» _ Используйте структуру do/while. –
Домашнее оповещение! – Sikorski
@Sikorski Этот вопрос, похоже, касается тех, кто сталкивается с проблемой во время своей домашней работы. Это не одна из тех типичных * Прямая копия заданий + Вопросительный знак *. – skiwi