我收到了这段代码(抱歉德语里面):
public void eingabewerte(){
int steuerInt;
steuerInt=-1;
Scanner myScanner = new Scanner(System.in);
System.out.println("Bitte geben Sie die maximal Augenzahl des Wuerfels an (Ganzzahl): ");
try{
this.max = myScanner.nextInt(); //liest den naechsten Integer Wert ein
System.out.println("Bitte geben Sie an wie oft gewuerfelt werden soll (Ganzzahl): ");
this.wurfzahl = myScanner.nextInt();
System.out.println("Wollen Sie");
System.out.println("----------");
System.out.println("(1)die Eingabe neustarten ");
System.out.println("(2)einen Versuch mit den Werten: "+this.max+"|"+this.wurfzahl+" starten.");
steuerInt = myScanner.nextInt();
} catch (InputMismatchException e){ //wenn nicht Integer oder nicht der Radix entspricht oder outofRange
e.printStackTrace();
e.toString();
System.out.println("Sie haben keinen Integer Wert oder einen zu großen/kleinen Integer Wert eingegeben!");
} catch (IllegalStateException e) { //wenn der Scanner closed ist
e.toString();
e.printStackTrace();
} //ende trycatch
myScanner.close(); //Scanner schlieszen
if (steuerInt == 1){
System.out.println("----------------------------------------------------------------");
System.out.println("Neue Eingabe");
System.out.println("----------------------------------------------------------------");
this.eingabewerte(); //eingabe neustarten
} else if (steuerInt==2) {
this.versuch();
} else {
System.out.println("Sie haben keine der erwarteten Steuerzeichen (Integer) 1 oder 2 eingegeben");
this.programmabbruch();
}
}
如果我在控制台上打字
,现在我回来了 Bitte geben Sie die maximal Augenzahl des Wuerfels an (Ganzzahl):
1
Bitte geben Sie an wie oft gewuerfelt werden soll (Ganzzahl):
2
Wollen Sie
----------
(1)die Eingabe neustarten
(2)einen Versuch mit den Werten: 1|2 starten.
1
----------------------------------------------------------------
Neue Eingabe
----------------------------------------------------------------
Bitte geben Sie die maximal Augenzahl des Wuerfels an (Ganzzahl):
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at aufgabe1oopwuerfel.Wuerfeltest.eingabewerte(Wuerfeltest.java:37)
at aufgabe1oopwuerfel.Wuerfeltest.eingabewerte(Wuerfeltest.java:69)
at aufgabe1oopwuerfel.Aufgabe1OOPWuerfel.main(Aufgabe1OOPWuerfel.java:22)
/home/r/.cache/netbeans/8.1/executor-snippets/run.xml:53: Java returned: 1
我知道Exception的文档,但我不明白为什么它会在此时中断。 希望任何人都能提供帮助。 也许我应该意识到这完全不同? 还有另一种方法称为" programmabruch()"这导致无限循环。此方法使用此整数输入菜单样式调用自身。
编辑: 我现在尝试证明整数跟随
if(myScanner.hasNextInt()){
this.max = myScanner.nextInt();
}
然后我正在尝试
if(myScanner.hasNextInt()){
this.max = Integer.parseInt(myScanner.nextLine());
}
它导致secon方法的无限循环public void programmabruch(){...}
包含与此方法相同的Menue,使用int steuerInt ..
答案 0 :(得分:3)
当你这样做时
this.max = myScanner.nextInt(); //liest den naechsten Integer Wert ein
System.out.println("Bitte geben Sie an wie oft gewuerfelt werden soll (Ganzzahl): ");
this.wurfzahl = myScanner.nextInt();
你的第二个整数赋值this.wurfzahl = myScanner.nextInt();
会在你执行this.max = myScanner.nextInt();
之后返回扫描程序对象中的换行符,以避免这个问题我会使用{{{{}}重写这些赋值。 1}}包装类。
Integer
这将把整个下一行作为一个字符串,然后解析它并给你一个很好的干净整数。