我应该把Scanner.close()放在哪里;?

时间:2015-01-14 17:23:50

标签: java

我需要知道我应该在这个代码中放置一个扫描仪,以阻止资源泄漏。

public class guess_main {

    public static void main(String[] args) {

         Random numGenerated = new Random();
         int numToGuess = numGenerated.nextInt(100);
         int numTries =0;
         int Guess;
         boolean win = false;

         Scanner inputNum = new Scanner(System.in);

         while (win == false){

             System.out.println("Please guess a number between 1 and 100");
             Guess = inputNum.nextInt();
             numTries++;

             if (Guess == numToGuess){
                  win = true;
             }
             else if  (Guess < numToGuess) {
                 System.out.println("Your guess is LOW!");
             }

             else if (Guess > numToGuess){
                 System.out.println("Your guess is HIGH!");
             }
         }//End of loop

         System.out.println("You won in " + numTries + " goes. Well done!");
    }
}

2 个答案:

答案 0 :(得分:1)

在循环结束时添加。

一旦你完成使用它们就应该关闭。 如果您使用扫描仪进行其他任何操作,则需要移动它。例如,如果您重写它以提供另一个游戏的选项,则需要在确认他们不想玩之后放置结束语句。

答案 1 :(得分:0)

你应该在循环结束后把它放在:

while (win == false) {
    ...Game logic...
}
inputNum.close();

这样做会关闭输入流,因此您不会有内存泄漏。

除此之外,请关注Java coding conventions。我看到的唯一(非缩进相关)违规行为是Guess大写,但它是一个对象,而guess_main应该是GuessMain(大写并使用camelCase而不是强调,但为了以防万一,请注意一下。

附录:正如大卫华莱士指出的那样,有一种方法可能会引发异常。如果你不在乎,那么上面的解决方案就可以了,但如果你这样做,那就更好了:

try (Scanner inputNum = new Scanner(System.in)) {
    ...Game logic...
} catch (InputMismatchException e) {
    e.printStackTrace();
}