3

我是编程新手,所以如果对此有一个非常简单的答案,我深表歉意,但实际上我似乎找不到任何东西。我在猜数字游戏中使用扫描仪对象进行用户输入。扫描仪在我的 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;
}
4

2 回答 2

7

您看到这些错误的原因是该方法dataIn本地main,这意味着除非您将扫描仪显式传递给该方法,否则没有其他方法可以访问它。

有两种解决方法:

  • 将扫描仪传递给DataTest方法,或
  • static在课堂上制作扫描仪。

以下是通过扫描仪的方法:

public static int DataTest(int selectionBound, Scanner dataIn) ...

这是制作Scanner静态的方法:替换

Scanner dataIn = new Scanner(System.in);

main()

static Scanner dataIn = new Scanner(System.in);

main方法之外

于 2013-04-12T01:56:52.100 回答
1

您不能访问在其他方法中声明的变量,即使是 main 方法。这些变量具有方法范围,这意味着它们根本不存在于声明它们的方法之外。您可以通过将 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
      }
}
于 2013-04-12T01:58:53.497 回答