IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

appeler la class scanner une seule fois ?


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 174
    Par défaut appeler la class scanner une seule fois ?
    Bonsoir,

    Voici ma class main ()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    import java.util.Scanner;
     
     
    /**
     * Je crée la class main qui va lancer le programme
     */
    public class main {
        public static void main(String[] args) {
     
            AccueilChoix choix = new AccueilChoix();// grace à la classe AccueilChoix, je crée un objet choix
     
            System.out.println("Que voulez-vous faire parmi ces choix : ");
            System.out.println("1 - Travailler sur la table des produits");
            System.out.println("2 - Travaille sur la table des TVA");
            System.out.println("3 - Faire les courses");
            System.out.print("Que souhaitez-vous faire ? : ");
     
            Scanner sc = new Scanner(System.in);// j'initialise une entrée system (du clavier)
            int nb = sc.nextInt(); //j'attends que l'utilisateur saisisse nb (1.2.3)
     
            choix.fonctionSelectionMenu(nb);// appelle la methode fonctionSelectionMenu et je lui passe le contenu de la variable nb
     
        }
    }
    Comme on peut le voir, j'utilise la class scanner. mais pour l'utiliser dans la "fonctionSelectionMenu", je suis encore obliger de créer un nouvel objet "sc"

    Ma question est la suivante :

    La class scanner étant appelée dans le main, pourquoi suis aussi obligé de l'appeler dans les autres class de mon programme ?

    Est-il possible de l'appeler une seule fois, puis de l'utiliser a chaque besoin ?

  2. #2
    Membre émérite Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 593
    Par défaut
    Citation Envoyé par papilou86 Voir le message
    Comme on peut le voir, j'utilise la class scanner. mais pour l'utiliser dans la "fonctionSelectionMenu", je suis encore obliger de créer un nouvel objet "sc"

    Ma question est la suivante :

    La class scanner étant appelée dans le main, pourquoi suis aussi obligé de l'appeler dans les autres class de mon programme ?

    Est-il possible de l'appeler une seule fois, puis de l'utiliser a chaque besoin ?
    Bonjour,

    Déjà, il vaudrait mieux trouver un nom plus explicite que "main" pour la classe... Et "main" ne respecte pas la syntaxe, il vaudrait mieux a minima écrire "Main". L'objet sc, instance de la classe Scanner, créé dans "main", n'est pas connu de la classe AccueilChoix. Donc il est nécessaire d'en créer un nouveau pour l'utiliser dans ce nouvel objet.

    L'objet sc, peut - et semble-t-il devrait - être membre de la classe AccueilChoix. Ainsi, il serait possible de définir une fois pour toutes cette instance et la réutiliser. De même, le code placé dans la méthode "main" devrait être déplacé dans la classe AccueilChoix.

    Par exemple, dans une méthode "menu", qui de plus clarifie le rôle du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    public class Main { // a renommer
        public static void main(String[] args) {
            AccueilChoix choix = new AccueilChoix();// grace à la classe AccueilChoix, je crée un objet choix
            int nb = choix.menu()
            choix.fonctionSelectionMenu(nb);// appelle la methode fonctionSelectionMenu et je lui passe le contenu de la variable nb     
      }
    }
    
    public class AccueilChoix { // a renommer
    
        private Scanner sc; // déclaration de l'instance de Scanner
    
        public AccueilChoix() { 
            sc = new Scanner(System.in);// j'initialise une entrée system (du clavier)       
        }
    
        public int menu() {
            int nb = 0;
            while ((nb != 1) && (nb != 2) && (nb != 3))  {
              System.out.println("Que voulez-vous faire parmi ces choix : ");        
              System.out.println("1 - Travailler sur la table des produits");        
              System.out.println("2 - Travaille sur la table des TVA");        
              System.out.println("3 - Faire les courses");        
              System.out.print("Que souhaitez-vous faire ? : ");         
            
              nb = sc.nextInt(); //j'attends que l'utilisateur saisisse nb (1.2.3)               
           }
    
           return nb;
        }
    
        public void fonctionSelectionMenu(int nb) {
           ....
    D'ailleurs, il serait aussi préférable, à ce stade, de déplacer la méthode main dans la classe AccueilChoix. ça dépend aussi du reste du programme.

  3. #3
    Membre très actif
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 174
    Par défaut
    Cincinnatus, c'est sympa de me répondre, et je te remercie de ton aide.


    1/ Tu me dit :
    L'objet sc, instance de la classe Scanner, créé dans "main", n'est pas connu de la classe AccueilChoix. Donc il est nécessaire d'en créer un nouveau pour l'utiliser dans ce nouvel objet.
    Mais c'est ça ma question.
    Précisément, ma question était :

    Y a t'il un moyen de rendre l'objet sc global ?
    Je pense, qu’après avoir cherché dans beaucoup de forum, que cela n'est pas possible. Je voulais juste en être certain.

    Il fallait regarder mon programme comme un exemple, pas comme une réalité, toutes tes solutions sont celles qu'il faut adopter, évidemment, mais c'est juste une question, et j'ai proposé un exemple simple....




    Remarques :
    1/ Je n'est pas respecté les règles de nomination des mes class, j'ai donc fait un péché mortel, qui mérite une punition. J'espère éviter l'enfer, et peut-être te retrouverai-je, comme nombre d'entre nous, au purgatoire. (bon, on est pas non plus obligé d'y croire)
    A l'avenir je vais mettre une majuscule à main, (oh pardon, Main)

    2/ Je nomme ma première classe main, car c'est la première....... c'est elle qui contient le main()..... Ou est le problème ?????? C'est plus simple, quand on a une dizaine de class, d'aller directement sur la première.... on sait ce qu'elle contient.
    C'est mon truc à moi, je n'ai pas trouvé d'interdiction..... J'ai même trouvé des gens qui faisaient comme moi.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    en fait une variable statique, c'est un peu comme si elle était globale. C'est juste que le compilateur va pas deviner où la trouver, donc il faut quand même nommer la classe avant d'indiquer la variable statique que tu veux dans cette classe.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class A {
      public static final int ANSWER = 42;
    }
    qui peut être utilisé dans la classe B :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class B {
      public void analyze() {
        System.out.println("answer: " + A.ANSWER);
      }
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 3.X] Exécuter une Class qu'une seule fois
    Par Stephen49330 dans le forum Tkinter
    Réponses: 4
    Dernier message: 15/06/2015, 00h48
  2. Réponses: 1
    Dernier message: 19/04/2011, 15h00
  3. Charger une seule fois une classe serializable
    Par hassanJava dans le forum Langage
    Réponses: 3
    Dernier message: 20/10/2010, 17h22
  4. Appeler une fonction q'une seule fois
    Par kit dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/05/2009, 10h22
  5. [Java] Ne pouvoir instancier une classe qu'une seule fois
    Par Xiao-An dans le forum Design Patterns
    Réponses: 12
    Dernier message: 09/02/2007, 16h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo