我是编程的新手,所以如果对此有一个非常简单的答案我会道歉,但我似乎找不到任何实际的东西。我正在使用扫描仪对象来猜测您的数字游戏中的用户输入。扫描程序在我的main方法中声明,并将在单个其他方法中使用(但该方法将在整个地方调用)。
我已经尝试将其声明为静态,但是eclipse与此相符并且无法运行。
public static void main(String[] args) {
int selection = 0;
Scanner dataIn = new Scanner(System.in);
Random generator = new Random();
boolean willContinue = true;
while (willContinue)
{
selection = GameList();
switch (selection){
case 1: willContinue = GuessNumber(); break;
case 2: willContinue = GuessYourNumber(); break;
case 3: willContinue = GuessCard(); break;
case 4: willContinue = false; break;
}
}
}
public static int DataTest(int selectionBound){
while (!dataIn.hasNextInt())
{
System.out.println("Please enter a valid value");
dataIn.nextLine();
}
int userSelection = dataIn.nextInt;
while (userSelection > selectionBound || userSelection < 1)
{
System.out.println("Please enter a valid value from 1 to " + selectionBound);
userSelection = dataIn.nextInt;
}
return userSelection;
}
答案 0 :(得分:4)
您看到这些错误的原因是dataIn
是本地到main
方法,这意味着除非您明确地将扫描程序传递给DataTest
方法,否则没有其他方法可以访问它那种方法。
有两种解决方法:
static
方法或public static int DataTest(int selectionBound, Scanner dataIn) ...
。以下是传递扫描仪的方法:
Scanner
以下是如何使Scanner dataIn = new Scanner(System.in);
静态:替换
main()
<{1>}中的
static Scanner dataIn = new Scanner(System.in);
外部 main
方法。
答案 1 :(得分:1)
您无法访问在其他方法中声明的变量,甚至是主方法。这些变量具有方法范围,这意味着它们根本不存在于声明它们的方法之外。你可以通过在所有方法之外移动Scanner的声明来解决这个问题。这样它就会享受课程范围,可以在主要课程的任何地方使用。
class Main{
//this will be accessable from any point within class Main
private static Scanner dataIn = new Scanner(System.in);
public static void main(String[] args){ /*stuff*/ }
/*Other methods*/
}
作为java中的一般经验法则,变量不存在于声明它们的最小{}
对之外(唯一的例外是定义类体的{}
):
void someMethod()
{
int i; //i does not exist outside of someMethod
i = 122;
while (i > 0)
{
char c; //c does not exist outside of the while loop
c = (char) i - 48;
if (c > 'A')
{
boolean upperCase = c > 90; //b does not exist outside of the if statement
}
}
{
short s; //s does not exist outside of this random pair of braces
}
}