在方法中使用扫描仪

时间:2013-04-12 01:52:07

标签: java methods input

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

2 个答案:

答案 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
      }
}