我对Java的扫描仪有疑问。我正在编写井字游戏程序,每次玩家移动时都会调用此函数。
public void mossa(){
int riga, colonna;
int errore;
Scanner input = new Scanner(System.in);
if(player=='O')
System.out.println("GIOCATORE O\n");
else
System.out.println("GIOCATORE X\n");
do{
errore = 0;
System.out.println("Riga: ");
riga = input.nextInt();
System.out.println("Colonna: ");
colonna = input.nextInt();
if(board[riga][colonna]!=' '){
errore=1;
System.out.println("Hai scelto una casella gia occupata!\n");
}
if(riga>3 || colonna>3 || riga<0 ||colonna<0){
errore=1;
System.out.println("Hai scelto una casella che non esiste!\n");
}
}while(errore==1);
//----->input.close();<------
if(player == 'X')
board[riga][colonna] = 'X';
else
board[riga][colonna] = 'O';
togglePlayer();
}
Run Code Online (Sandbox Code Playgroud)
起初,我认为最好是在捕获到玩家的动作后关闭扫描仪,然后在再次调用该函数时再次打开它(请参见input.close()注释)。问题是,如果我关闭扫描仪,则会遇到运行时错误,指出扫描仪为空,而将nextInt()放入由hasNextInt()驱动的if中则无济于事。那么,不关闭输入扫描器是否是错误的(我只有资源泄漏的警告)?
先感谢您。
您不必关闭扫描仪。它是标准输入的包装,当程序终止时,JVM将为您关闭stdin。
静态代码分析仅检测到您有未关闭的可关闭对象,因此它抱怨。它没有注意扫描仪包装的东西。
文件,网络套接字和jdbc对象之类的东西都需要关闭。jvm会帮您处理stdin,stdout和stderr,byteArray流没有什么需要关闭的。但是Java使用装饰器模式包装流,并且静态分析工具没有区别。
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |