编写Java时,在多个函数中声明了Scanner对象并且最后都使用close()函数关闭了Scanner对象
当第一个定义了Scanner对象的函数运行完毕后,第二个函数运行到含有Scanner对象的输入语句后就会出现以下错误:
当你在前面的语句中关闭了任意一个Scanner对象,Scanner就无法在后面的语句中打开。例如以下代码
import java.util.*;
public class GuessGame {
private int myGuess,robotGuess;
public void Player(){
System.out.println("请输入你的出拳(1剪刀,2石头,3布)");
Scanner input = new Scanner(System.in);
myGuess = input.nextInt();
input.close();
}
public void Robot(){
robotGuess = (int)(Math.random()*3)+1;// 返回一个随机数,随机数范围为0.0 =< Math.random < 1.0
switch(robotGuess){
case 1:System.out.println("机器出拳:剪刀"); break;
case 2:System.out.println("机器出拳:石头"); break;
case 3:System.out.println("机器出拳:布");break;
}
}
public void Star(){
String chose;
do{
Player();
Robot();
int complete = myGuess - robotGuess;
switch(complete){
case -2:System.out.println("胜利\n可以的兄弟");
case 0:System.out.println("平局\n兄弟,我相信你能行。"); break;
case -1:System.out.println("失败\n你真衰"); break;
case 2:System.out.println("失败\n你真衰"); break;
case 1:System.out.println("胜利\n可以的兄弟"); break;
}
System.out.println("还玩吗,兄弟?(yes or no)");
Scanner string = new Scanner(System.in);
chose = string.next();
string.close();
}while(chose.equals("yes"));
}
最好的解决办法就是在全局中声明一个静态的Scanner对象,在最后一处需使用Scanner的地方用close()函数关闭它
import java.util.*;
public class GuessGame {
private int myGuess,robotGuess;
private static Scanner input = new Scanner(System.in);
public void Player(){
System.out.println("请输入你的出拳(1剪刀,2石头,3布)");
myGuess = input.nextInt();
}
public void Robot(){
robotGuess = (int)(Math.random()*3)+1;// 返回一个随机数,随机数范围为0.0 =< Math.random < 1.0
switch(robotGuess){
case 1:System.out.println("机器出拳:剪刀"); break;
case 2:System.out.println("机器出拳:石头"); break;
case 3:System.out.println("机器出拳:布");break;
}
}
public void Star(){
String chose;
do{
Player();
Robot();
int complete = myGuess - robotGuess;
switch(complete){
case -2:System.out.println("胜利\n可以的兄弟");
case 0:System.out.println("平局\n兄弟,我相信你能行。"); break;
case -1:System.out.println("失败\n你真衰"); break;
case 2:System.out.println("失败\n你真衰"); break;
case 1:System.out.println("胜利\n可以的兄弟"); break;
}
System.out.println("还玩吗,兄弟?(yes or no)");
chose = input.next();
}while(chose.equals("yes"));
input.close();
}
public static void main(String args[]){
GuessGame open = new GuessGame();
open.Star();
}
}
这样在运行就没得问题了。