Utilisation d'un scanner à l'intérieur d'une méthode


Je suis nouveau dans la programmation, donc je m'excuse s'il y a une réponse très simple à cela, mais je n'arrive pas à trouver quoi que ce soit en fait. J'utilise un objet scanner pour l'entrée de l'utilisateur dans un jeu devinez votre numéro. Le scanner est déclaré dans ma méthode principale et sera utilisé dans une seule autre méthode (mais cette méthode sera appelée partout).

J'ai essayé de le déclarer comme statique, mais eclipse a un ajustement sur cela et ne s'exécutera pas.

 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;
}
Author: Marshall Tigerus, 2013-04-12

2 answers

La raison pour laquelle vous voyez ces erreurs est que dataInest local à la méthode main, ce qui signifie qu'aucune autre méthode ne peut y accéder sauf si vous passez explicitement le scanner à cette méthode.

Il y a deux façons de le résoudre:

  • Passer le scanner à la méthode DataTest, ou
  • Faire le scanner static dans la classe.

Voici comment vous pouvez passer le scanner:

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

Voici comment vous pouvez rendre le Scanner statique: remplacer

Scanner dataIn = new Scanner(System.in);

Dans le main() avec

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

en dehors de le main méthode.

 4
Author: dasblinkenlight, 2013-04-12 01:56:52

Vous ne pouvez pas accéder aux variables déclarées dans d'autres méthodes, même la méthode principale. Ces variables ont une portée de méthode , ce qui signifie qu'elles n'existent tout simplement pas en dehors de la méthode dans laquelle elles sont déclarées. vous pouvez résoudre ce problème en déplaçant la déclaration du scanner en dehors de toutes vos méthodes. De cette façon, il appréciera la portée de la classe et peut être utilisé n'importe où dans votre classe principale.

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*/
}

En règle générale en java, les variables n'existent pas en dehors de la plus petite paire de {} dans lequel ils ont été déclarés (la seule exception étant les {} qui définissent les corps de classes):

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
      }
}
 1
Author: ApproachingDarknessFish, 2013-04-12 02:05:47