我得到了这个代码(抱歉里面有德语):
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
我知道异常的文档,但我不明白为什么它此时会中断。 希望任何人都可以提供帮助。 也许我应该意识到这完全不同? 还有另一种方法称为“programmabruch()”,它会导致无限循环。此方法以与此整数输入菜单样式相同的方式调用自身。
编辑: 我现在尝试证明整数如下
if(myScanner.hasNextInt()){
this.max = myScanner.nextInt();
}
然后我尝试
if(myScanner.hasNextInt()){
this.max = Integer.parseInt(myScanner.nextLine());
}
这会导致第二个方法 public void programmabruch(){...} 的无限循环
其中包含与 int steuerInt 方法中相同的 Menue..
最佳答案
当你这样做时
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();
,为了避免这个问题,我将使用 Integer
包装类重写这些分配。
this.max = Integer.parseInt(myScanner.nextLine());
this.wurfzahl = Integer.parseInt(myScanner.nextLine());
这会将整个下一行作为字符串接收,然后解析它并为您提供一个漂亮的干净整数。
关于java - Scanner.nextInt() NoSuchElementException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49925297/