java - Scanner.nextInt() NoSuchElementException

标签 java unicode java.util.scanner utf nosuchelementexception

我得到了这个代码(抱歉里面有德语):

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/

相关文章:

java - 我可以告诉 Jackson 根据不同类型的方法有条件地序列化私有(private)实例变量吗?

java - 将 hashmap 的字符串值添加到 JComboBox

php - 变音符号和 mb_substr 的问题

java - 如何从数组列表中删除元素?

java - JMockit 未正确初始化

java - 如何使用maven-flatten解决pom.xml父项目修订中的fecth问题?

java - 如何检查 Java 字符串是否包含 GSM 扩展字符(非 Unicode)

Python 脚本无法正确编码特殊的 Unicode 字符

java - 逐行读取一个.txt文件到ArrayList

java - 字符串是否有等效的 hasNext() 方法?