[英]How to create only one Scanner object throughout my program
如何在整个程序中只创建一个Scanner
对象,因为自动测试会导致您的程序生成异常并终止。 原因是在自动测试中,多行测试输入一起发送到程序。 它会导致线程“main” java.util.NoSuchElementException
的error.Exception
java.util.NoSuchElementException
import java.util.Scanner;
public class NimPlayer
{
public NimPlayer()
{
Scanner Keyboard=new Scanner(System.in);
System.out.println("Please enter Player 1's name:" );
String NameofPlayer1=Keyboard.nextLine();
System.out.println();
System.out.println("Please enter Player 2's name:" );
String NameofPlayer2=Keyboard.nextLine();
System.out.println();
do {
System.out.println("Please enter upper bound of stone removal:");
int Upperbound=Keyboard.nextInt();
System.out.println();
System.out.println("Please enter initial number of stones:");
int InitialNum=Keyboard.nextInt();
removeStone(NameofPlayer1,NameofPlayer2,InitialNum,Upperbound);
System.out.println();
System.out.println("Do you want to play again(Y/N):");
}while(Keyboard.next().equalsIgnoreCase("Y"));
}
public static void removeStone(String NameofPlayer1,String NameofPlayer2,int InitialNum,int Upperbound)
{
Scanner Keyboard1=new Scanner(System.in);
int Roundplayer=1;
while(InitialNum>0)
{
System.out.println();
System.out.print(InitialNum+" "+ "stones left:");
Star(InitialNum);
System.out.println();
if(Roundplayer>0)
{
System.out.println(NameofPlayer1+ "'s turn-remove how many?");
int NumofPlayer1=Keyboard.nextInt();
while(NumofPlayer1>Upperbound)
{
System.out.println("Larger than upper bound!" +"\nPlease enter it again\n");
break;
}
Roundplayer=Roundplayer-1;
InitialNum=InitialNum-NumofPlayer1;
}
else
{
System.out.println(NameofPlayer2+ "'s turn-remove how many?");
int NumofPlayer2=Keyboard1.nextInt();
Roundplayer=Roundplayer+1;
InitialNum=InitialNum-NumofPlayer2;
//System.out.print(InitialNum+ "stones left:");
//Star(InitialNum);
}
}
if(Roundplayer>0)
{
System.out.println();
System.out.println("Game Over");
System.out.println(NameofPlayer1+ " "+"wins");
}
else {
System.out.println();
System.out.println("Game Over");
System.out.println(NameofPlayer2+ " "+"wins!");
}
}
public static void Star(int InitialNum )
{
for(int i=0; i<InitialNum; i++ )
{
System.out.printf(" "+"*");
}
}
}
将 Scanner 对象设置为公共静态属性,如
import java.util.Scanner;
public class NimPlayer
{
public static Scanner Keyboard = new Scanner(System.in);
public NimPlayer()
{
...
}
}
确保在程序中也将 Keyboard1 Scanner 更改为 Keyboard。
从构造函数和其他方法中删除创建Scanner
。 将它作为实例变量放在类中,并在构造函数和其他方法中使用它。
public class NimPlayer {
Scanner keyboard = new Scanner(System.in);
public NimPlayer() {
// You can use keyboard here
}
public static void removeStone(String NameofPlayer1,String NameofPlayer2,int InitialNum,int Upperbound) {
// You can use keyboard here
}
//...Other parts of the program
}
我还建议您遵循Java 命名约定,例如您的变量名, Keyboard
应该是keyboard
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.