首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用扫描仪时java.util.NoSuchElementException

使用扫描仪时java.util.NoSuchElementException
EN

Stack Overflow用户
提问于 2017-11-01 05:04:28
回答 2查看 379关注 0票数 1

因此,在调用下面将发布的函数(在main中)之后,在同一个main中创建一个新的扫描对象无效,并给出了以下错误:

代码语言:javascript
复制
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)

将我链接到这段代码中的最后一行:

代码语言:javascript
复制
    int numHouse = 0;
    int numSeed = 0;
    System.out.println("Enter the total number of houses on the board: ");
    Scanner houseInput = new Scanner(System.in);
    numHouse = houseInput.nextInt();

它就放在我调用函数之后(我会在后面的代码中关闭扫描器)。当我注释掉调用这个函数时,这个扫描器可以工作,所以函数中的某些东西会导致扫描仪中的一个错误。我花了好几个小时寻找,但无法解决,如果有人可以的话,我会非常感激的。职能:

代码语言:javascript
复制
    public void InitializePlayers() {
    //change numPlayers to variable that contains number of players
    boolean validInput = false;
    do {
        System.out.print("Enter Number of Players (1/2): ");
        Scanner userInput = new Scanner(System.in); 
        int numPlayers = userInput.nextInt();
        System.out.print("\n");
        if(numPlayers == 1) {
            //One Human Player, One AI Player
            System.out.println("Single Player Selected");
            validInput = true;
            System.out.print("\n");             
            System.out.print("Enter Player One Name: ");

            //Initialize Player 1
            String p0_name = userInput.next();
            Player Human1 = new Player(p0_name,0,false);
            this.setPlayer0(Human1);

            //Initialize AI
            String AI_name = "Hal";
            Player AI = new Player(AI_name,1,true);
            this.setPlayer1(AI);
            userInput.close();
        }
        else if(numPlayers == 2){
            //Two Human Players
            System.out.println("Two Players Selected");
            validInput = true;
            System.out.print("Enter Player One Name: ");

            //Initialize Player 1
            String p0_name = userInput.next();
            Player Human1 = new Player(p0_name,0,false);
            this.setPlayer0(Human1);

            //Initialize Player 2
            System.out.print("Enter Player Two Name: ");
            String p1_name = userInput.next();
            Player Human2 = new Player(p1_name,0,false);
            this.setPlayer1(Human2);
            userInput.close();
        }
        else {
            System.out.println("Error, Player 1 Not set!");
            userInput.close();
        }
    }while(!validInput);
}

(测试时我总是输入2)我尝试过删除do-while循环,但这并没有解决问题。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-01 05:41:30

更好的是,如果可以使用一个扫描仪从System.in中读取整个应用程序

关闭接收播放机的扫描器将关闭InputStream,这将导致NoSuchElmentException.Better,如果您可以定义一个扫描器,并在两次输入时使用它

票数 1
EN

Stack Overflow用户

发布于 2017-11-01 05:44:49

就像另一个人说的,我终于发现了这个问题。关闭扫描仪一旦关闭InputStream,就不能再使用了。我必须在我的主屏幕开始时做一个扫描器,并将它传递给所有需要它的函数。我从每个函数中删除了所有的闭包,并在main的末尾关闭。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47048551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档