nextInt()方法的noSuchElement异常

时间:2013-01-18 23:55:38

标签: eclipse exception java.util.scanner

嘿伙计们,我不明白为什么我会在这个简单的代码中得到一个例外 我正在尝试制作一个纸牌游戏,并尝试在手中阅读用户想要的卡片索引(用德语)

public Karte abschlagen(Karte gegnK) {
    System.out
            .println("Bitte die Zahl für die jeweilige Karte auswählen: ");
    gibHandAus(); // prints the users cards with their indexes 

    try {
        Scanner sc = new Scanner(System.in);
        int index = sc.nextInt();
        if (index < 0 || index >= getHand().size()) {
            System.out
                    .println("Bitte nur eine der gegebenen Zahlen auswählen!");
                     sc.close();
            return abschlagen(gegnK);
        }
        Karte k = getHand().get(index);
        getHand().remove(index);
        sc.close();

那么这里有什么问题?
在我可以选择一个数字之前,它会抛出noSuchElement异常 我在另一个问题中读到了close()方法可能导致这种情况,但它仍然没有它。

错误消息是:

Exception in thread "main" java.util.NoSuchElementException
   at java.util.Scanner.throwFor(Unknown Source) 
   at java.util.Scanner.next(Unknown Source) 
   at java.util.Scanner.nextInt(Unknown Source) 
   at java.util.Scanner.nextInt(Unknown Source) 
   at durak.Spiel.spielerWehrtAb(Spiel.java:229) 
   at durak.Spiel.main(Spiel.java:314) 

编辑:spielerWehrAb代码():

public static boolean spielerWehrtAb(Karte k) {
.
.
.
try {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
sc.close();

if (x == 0) {
... }
else if(x == 1) {
System.out.println("1 ausgewählt");
Karte k2 = spieler.abschlagen(k);
....
} 
else return spielerWehrAb(k);

1 个答案:

答案 0 :(得分:1)

问题是Scanner.close();关闭了基础流。第二次,你试图从封闭的流中读取,所以它显然失败了。

请参阅我设计的测试,以便在此处演示此行为:java.util.Scanner strange behaviour when used with System.in

关闭Scanner后,解决方案不会被解读。例如,您可以将Scanner定义为类成员并始终使用该成员。