我无法关闭扫描仪

时间:2013-07-06 12:57:03

标签: java if-statement while-loop

我环顾四周,似乎无法找到答案。我创建了一个程序,输入一个与国际象棋棋盘相对应的数字,并一直提供一个答案,最多可以打印一个错误报告。我无法找到关闭扫描仪的方法。我是java的新手,需要一些关于我的代码的帮助:

while (true) {  

//learned the import scanner from Greg and managed to get it working with my code :) 
System.out.println("Please select chess square from 1 - 25");
Scanner scan = new Scanner(System.in);
final int SIZE = 5;
//the plus one makes it start in the correct point
int SQUARENUM = scan.nextInt()+1; 

int grains = 1; 
int j = 1;
int tGrains = 0;


if (SQUARENUM > 26){
    System.out.println("****************---------------****************");
    System.out.println("** ERROR Only 25 squares to choose from ERROR **");
    System.out.println("****************---------------****************");

    continue;}

//still trying to get it to close without the error. 
//if(scan!=null)
//scan.close();


System.out.println("The amount of squares on the 5 by 5 board is: " + (SIZE*SIZE));
System.out.println("Looking at Square:"+(SQUARENUM - 1));

while(j < SQUARENUM){           
    System.out.println("Grains of wheat on square:" + j + " is:" + grains);
    grains *= 2; 
    tGrains = tGrains + grains;
    j++;        
}
System.out.println(" *** Total Grains of Wheat = " + (tGrains/  2) + " ***");
}

2 个答案:

答案 0 :(得分:1)

循环的第一次迭代会很好,你可以做

scan.close();

问题是当循环进入第二次迭代时。你打电话给

scan.nextInt();

关闭扫描仪后。关闭后无法再次使用扫描仪。 所以你应该将scan.close()移到循环之外。

答案 1 :(得分:0)

完成使用后关闭Scanner来电close

通常,您应该在try-catch-finally块中访问扫描仪并关闭finally块中的扫描仪,以确保它始终关闭。

有关使用Scanner

的教程,请参阅here

您可能还想查看Java 7中的try with resource功能。