所以我对Java很陌生,我正在为学校制作一个程序。我在使用扫描仪时遇到问题。
public int[] userShoot(int shotType)
{
int[] returnThis = {0,0};
int hitFlag = 0, shotProb;
int flag = 1;
if(shotType != 0)
{
while(flag == 1)
{
System.out.println("Pick a shot");
System.out.println("1: Field Goal (Normal)");
System.out.println("2: Three Pointer (Hard)");
System.out.println("3: Backwards Field Goal (Hard)");
System.out.println("4: Backwards Three Pointer (Very Hard)");
System.out.println("5: Trickshot (Completely Random");
Scanner sc = new Scanner(System.in);
shotType = sc.nextInt();
sc.close();
if(shotType >= 1 && shotType <= 5)
{
flag = 0;
}
else
{
flag = 1;
System.out.println("Invalid Response.");
}
}
}
switch(shotType)
....
returnThis[0] = shotType;
returnThis[1] = hitFlag;
return returnThis;
}
使用此版本的代码,我在第一次运行while循环后得到NoSuchElement异常。所以我搜索了这个异常的修复程序,大多数答案告诉我使用hasNextInt()。
所以我改变了我的代码
Scanner sc = new Scanner(System.in);
if(sc.HasNextInt())
shotType = sc.nextInt();
else
shotType = 0;
现在当然显而易见的问题是,如果我使shotType = 0,我得到的回复无效。然后它只是循环,无法实际突破while循环。所以我的问题是:如何通过while循环在Java中正确地获取多个输入,例如在这段代码中?我不知道如何修复通过代码的每个循环耗尽的输入。我是否必须在循环外关闭扫描仪?
编辑:我尝试在循环之外关闭:Scanner sc = new Scanner(System.in);
while(flag == 1)
{....}
sc.close();
但是这并没有解决,它仍然给出了NoSuchElement异常
EDIT2:
结合这两个修复工作,但没有给我我需要的行为。 代码如下:
Scanner sc = new Scanner(System.in);
while(flag == 1)
{
...
if(sc.hasNextInt())
shotType = sc.nextInt();
...
}
sc.close();
现在的问题是它只保留第一个输入,并且每次while循环时都不允许用户输入。
EDIT3:
在我的userShoot方法之外打开和关闭我的扫描仪工作
但是,我还必须更改原型并调用该方法。
IE userShoot(int shotType, Scanner sc);
作为原型,并在调用它时:userShoot(shotType, sc);
谢谢大家的帮助!!