【问题标题】:Scanner.nextInt() NoSuchElementExceptionScanner.nextInt() NoSuchElementException
【发布时间】:2018-04-19 15:52:28
【问题描述】:

我得到了这个代码(对不起里面的德国人):

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());
    }

导致secon方法的无限循环 public void programmabruch(){...}

其中包括与 int steuerInt.. 方法中相同的 Menue。

【问题讨论】:

标签: java unicode java.util.scanner utf nosuchelementexception


【解决方案1】:

当你这样做时

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());

这会将整个下一行作为一个字符串,然后解析它并给你一个干净的整数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    相关资源
    最近更新 更多