2013-04-12 3 views
2

Я новичок в программировании, поэтому извиняюсь, если есть очень простой ответ на этот вопрос, но я не могу найти ничего, что на самом деле. Я использую объект сканера для ввода пользователем в угадывание вашей номерной игры. Сканер объявлен в моем основном методе и будет использоваться в одном другом методе (но этот метод будет называться повсеместно).Использование сканера внутри метода

Я пробовал объявить его статичным, но затмение имеет подгонку над этим и не будет работать.

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() с

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

снаружиmain способ.

+0

С помощью «Сделать статический сканер в классе», я полагаю, вы имеете в виду «Сделать сканер статическим атрибутом в классе». – ddmps

+0

@ Pescis Я расширил ответ примерами. – dasblinkenlight

+0

это очень helfpul, thankyou –

1

Вы не можете получить доступ к переменным, объявленным другими методами, даже основным методом. Эти переменные имеют метод scope, что означает, что они просто не существуют вне метода, в котором они объявлены. вы можете исправить это, перемещая объявление сканера вне всех ваших методов. Таким образом, он будет обладать классом и может использоваться в любом месте вашего основного класса.

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 
     } 
} 
Смежные вопросы