Java扫描仪提供NoSuchElementException

时间:2018-06-20 11:47:34

标签: java java.util.scanner nosuchelementexception

我的代码为我的扫描仪抛出错误,我不知道为什么。我的代码今天早上工作了,但是大多数代码都和main放在一个类中,我知道这是一种不好的编程方式,所以我将所有方法都移到了各自的类中,此后此错误就开始了。我什至无法输入任何数字之前,都会弹出错误提示。我的代码编译时没有错误或警告,我无法弄清楚。任何帮助将不胜感激。

public static Card trapCard(Player player, int pick) throws InterruptedException {

    Scanner scan = new Scanner(System.in);
    int i = 1;
    Card choice = null;
    int value = 0;
    System.out.println("");

    for(Card card : player.trap.cards) {

        value = Arena.mySwitch(pick, card);
        if(value>0) {

            break;
        }
    }

    if(value> 0) {          

        System.out.println("(0) No Card");

        for(Card card: player.trap.cards) {

            System.out.println("(" + i + ") "+card.name);
            i++;
        }

        System.out.print("\nPick a trap card: ");
        int x = 100;

        while(x < 0 || x > player.trap.cards.size()) {

            x = scan.nextInt();
            System.out.print("\n");

            if(x <0 || x > player.trap.cards.size() ) {

                System.out.println("Invalid choice, pick again");
            }

            if(pick >= 0 || pick <= player.trap.cards.size()) {
                break;          
            }
        }

        if(x == 0) {

            choice = null;
        }

        else {

            choice = player.trap.cards.get(x-1);
        }               
    }
    scan.close();
    return choice;      

}

Attached is a picture of the errors returned

1 个答案:

答案 0 :(得分:0)

该解决方案已发表在评论中,因此我将在此处提及。

可能与您在扫描仪上调用close()有关。您应该始终关闭打开的资源,但扫描仪位于System.in上。您从未打开过System.in,而是由操作系统为您完成的。因此,也不是您要关闭它的地方,除非您知道为什么选择关闭它以达到您知道的效果(您现在显然还没有)。相反,您应该在一开始就在整个程序中的System.in上创建一个Scanner,并始终使用该唯一的Scanner。正如我所说,永远不要关闭它。 – kumesana