2

我有一个名为 的类PlayGame,在main方法中我有这段代码:

public class PlayGame {
    public static void main(String args[]) {
        while (true) {
            System.out.println("Where would you like your adventure to begin? (Enter a number)\n");
            System.out.println("1. Play the Game\n2. Quit the Game");
            Scanner userInput = new Scanner(System.in);
            String userAction;
            try {
                userAction = userInput.nextLine().trim();
                if (userAction.equals("1")) {
                    pressPlay();
                } else if (userAction.equals("2")) {
                    System.exit(0);
                } else {
                    System.out.println("Sorry, your selection wasn't valid.");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

这一切都很好,当用户键入1时,pressPlay()会调用它并继续执行下一个方法,该方法会做一些事情,主要是将事情打印到屏幕上。但是,当我离开该pressPlay()方法并返回此主方法时,我开始收到读取输入的错误:

java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1516)
    at PlayGame.main(PlayGame.java:17)

你能告诉我如何解决这个问题吗?非常感激!

编辑- 我只是希望它返回到 main 方法中的 while 循环并再次请求 1 或 2,并取一个有效的 1 或 2。我的代码一直运行到userAction = userInput.nextLine().trim();第二次不再等待用户输入,离开该pressPlay()方法后。

编辑- 该pressPlay()方法生成一个网格,玩家可以通过键入特定命令在其中移动。它内部有一个while (true) {循环,并Scanner userInput = new Scanner(System.in);接受玩家的输入。如果玩家键入 quit,它会调用 while 循环的中断并返回到 main 方法,然后出现问题。

4

1 回答 1

2

我已经设法解决了这个问题。

在我的 main 方法和我的pressPlay()方法中,我创建了单独的扫描仪从System.in. 相反,我将 Scanner 从 main 方法中取出并将其放在 之后public class PlayGame {,并在我的两种方法中都使用了相同的扫描仪,而不是单独的方法。

感谢 Jayamohan 和 Hossam 的意见(:

于 2013-02-23T03:54:56.467 回答