我需要知道我应该在这个代码中放置一个扫描仪,以阻止资源泄漏。
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!");
}
}
答案 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();
}