【发布时间】:2014-01-29 04:53:43
【问题描述】:
我正在学习 Java,通过这样做,我编写了一个简单的猜谜游戏。现在我正试图通过添加额外的功能来改进它,但我一直试图让它更“模块化”,即:使用更多的方法而不是长的 main() 方法。
我有这个:
while(!guessed) {
System.out.println("Guess a number between 1 and 1000.");
guessedNum = Integer.parseInt(input.nextLine());
numCheck(guessedNum);
}
timeEnd = System.currentTimeMillis();
input.close();
System.out.println("Seconds to guess: " + (timeEnd - timeStart)/1000);
效果很好,但是如果我尝试为“猜数字”创建一个单独的方法,如下所示:
public static int guessNum() {
System.out.println("Escriba un numero entre 1 y 1000.");
Scanner input = new Scanner(System.in);
guessedNum = Integer.parseInt(input.nextLine());
input.close();
return guessedNum;
}
它会抛出以下错误:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at game.Guess.guessNum(Guess.java:40)
at game.Guess.start(Guess.java:28)
at game.Game.main(Game.java:21)
我一直在尝试使用分隔符和 nextLine(),但总是出现相同的错误。我也试过用 eclipse 调试它,但是当它转到 nextLine 时,它会跳转到一个显示 Source not found 的页面。
有什么线索吗?如果需要,我可以修改我的问题。
【问题讨论】:
-
可能是由于与其他NoSuchElementException 相关问题相同的根本原因。关闭扫描仪也会关闭
System.in,因此如果您在之前关闭类似的扫描仪后再次尝试new Scanner(System.in),它将不会读取任何内容。 -
感谢您的回答,但我不明白这种行为。如果我用 Scanner input = new Scanner(System.in); 再次打开它,它不应该像以前一样再次读取吗?
-
不,因为
System.in仍然关闭。创建第二个扫描仪不会重新打开它。