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 :

Problème variables dans méthode


Sujet :

avec Java

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut Problème variables dans méthode
    Bonjour à tous,

    Je suis complètement paralysé car mon code me donne un "tabSections cannot be resolved as a variable" en pointant sur le code en rouge.
    Le tableau est pourtant reconnu en tant que paramètre sans problème dans les autres méthodes, pourquoi pas dans ma méthode afficherMenu() ?que fais-je mal ?
    (Il nous est imposé de déclarer les tableaux dans le 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    public class Projet_Devis {
    
    	static String varTitreSection = null;
    
    	public static void main(String[] args) {
    
    		// Tableaux de données
    
    		String tabSections[] = new String[25];
    		String tabArticles[] = new String[100];
    		int[][] tabLignes = new int[3][100];
    
    		Terminal.sautDeLigne();
    		Terminal.ecrireString("---------- Logiciel d'édition de devis / factures ----------");
    		Terminal.sautDeLigne();
    		afficherMenu();
    				
    				
    			}
    		public static void afficherMenu(){
    			
    			// Affichage du menu principal
    
    			int varChoixMenu = 0;
    			
    			Terminal.sautDeLigne();
    			Terminal.ecrireStringln("                1: Creer nouvelle section");
    			Terminal.ecrireStringln("                2: Ouvrir une section existante");
    			Terminal.ecrireStringln("                3: Supprimer une section");
    			Terminal.ecrireStringln("                4: Creer une ligne");
    			Terminal.ecrireStringln("                5: Effacer une ligne");
    			Terminal.ecrireStringln("                6: Voir Devis / Facture");
    			Terminal.ecrireStringln("                7: Sortir");
    			Terminal.sautDeLigne();
    
    			// Enregistre et vérifie le choix utilisateur dans le menu principal
    
    			boolean testReponse = false;
    
    			while (testReponse == false) {
    				Terminal.ecrireString("  Veuillez entrer votre choix : ");
    				Terminal.sautDeLigne();
    				varChoixMenu = Terminal.lireInt();				
    
    				if (varChoixMenu != 0 && varChoixMenu <= 7) {
    					testReponse = true;
    				} else {
    					testReponse = false;
    					Terminal.ecrireString("  Le choix rentré n'est pas valide, vous devez rentrer un nombre entre 1 et 7");
    					Terminal.sautDeLigne();}
    				// Actions à éxécuter suivant le choix effectué dans le menu
    				// principal
    
    				if (varChoixMenu == 1) {
    					Terminal.ecrireString("Veuillez rentrer le titre de la nouvelle section : ");
    					varTitreSection = Terminal.lireString();
    					remplirTab1Dim(tabSections);	
    				}
    				if (varChoixMenu == 2) {
    					afficherTab1Dim(tabSections);
    				}
    		}}
    	
    
    	public static void remplirTab1Dim(String[] t) {
    		
    		String varValeur=null;
    
    		for (int i = 0; i < t.length; i++)
    			if (t[i] == null) {
    				t[i] = varValeur;
    				break;
    			}
    
    	}
    
    	public static void afficherTab1Dim(String[] t) {
    
    		// Vérifie que le tableau ne soit pas vide :
    
    		boolean estVide = true;
    
    		for (int i = 0; i < t.length; i++) {
    			if (t[i] != null) {
    				estVide = false;
    				break;
    			}
    
    			if (estVide) {
    				Terminal.sautDeLigne();
    				Terminal.ecrireString("-- AVERTISSEMENT : Aucune donnée n'a encore été enregistrée --");
    				Terminal.sautDeLigne();
    			
    			}
    
    			else {
    
    				// Affiche la liste des éléments du tableau
    
    				for (int j = 0; j < t.length; j++) {
    					if (t[j] != null) {
    						Terminal.ecrireStringln((j + 1) + ". " + t[j]);
    					}
    				}
    			}
    		}
    		
    	}
    }
    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    C'est un problème de visibilité de variable : tu ne peux pas déclarer une variable locale dans une méthode et y accéder dans une autre.

    Tu peux tout simplement passer cette variable en argument de la méthode, puisqu'elle est appelée dans la méthode qui crée cette variable.

    Puisque que tu veux utiliser ton tableau de String dans la méthode afficherMenu, ajoutes un paramètre tableau de String à cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static void afficherMenu(String[] tabSections){
    ...
    
      if (varChoixMenu == 1) {
         Terminal.ecrireString("Veuillez rentrer le titre de la nouvelle section : ");
         varTitreSection = Terminal.lireString();
         remplirTab1Dim(tabSections);	// ici on fait référence au paramètre de la méthode afficherMenu
      }
      if (varChoixMenu == 2) {
         afficherTab1Dim(tabSections);   // ici on fait référence au paramètre de la méthode afficherMenu
      }
    
    }
    Et pour l'appel :

    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
    public static void main(String[] args) {
    
    		// Tableaux de données
    
    		String tabSections[] = new String[25];
    		String tabArticles[] = new String[100];
    		int[][] tabLignes = new int[3][100];
    
    		Terminal.sautDeLigne();
    		Terminal.ecrireString("---------- Logiciel d'édition de devis / factures ----------");
    		Terminal.sautDeLigne();
    		afficherMenu(tabSections); // ici on passe le tableau en paramètre
    				
    				
    			}
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Je te remercie pour cette réponse mais cela provoque une autre erreur plus haut dans le afficherMenu() du main même si je recopie les arguments.

    Comme tu le vois, j'ai créée une procédure afficherMenu() qui est invoquée une première fois dans le main et ensuite dans toutes les autres procédures.

    Y aurait il un moyen pour que ce menu soit dans le main et que l'on puisse l’appeler depuis les procédure ou bien ma méthode était elle la bonne en dehors du fait que la portée des variables soit de cette façon affectée ?

    Bref ce petit projet s'articule autour d'un menu qui doit réapparaitre après chaque action utilisateur.

    J'avais tout déclaré en static en début de classe mais apparemment ça ne plaisait pas au prof donc j'ai été obligé de déclarer les variables et tableaux dans le main...

    Merci d'avance

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Par procédure, je suppose que tu parles de méthode

    Tu peux bien sûr déclarer autant de variables que tu veux dans une méthode. Que cela soit des tableaux ou autres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void methodeExemple1() {
    
        int[] tableau1 = new int[]{1,2,3};
        String[] tableau2 = new String[]{"Pim","Pam","Poum"};
        etc
    
    }
    Et tu peux définir plusieurs paramètres pour une même méthode, que cela soit des tableaux ou pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void methodeExemple2(String[] param1, int[] param2, etc) {
    
        ...
    
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Je viens d' éditer le post, merci à toi de le lire !

    N'y a t'il pas une façon plus élégante de coder (excepté en déclarant en début de classe) sans avoir à mettre tout ce chapelet de paramètres ?.

    Comment ferait un pro ?

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Personnellement, je ferais, pour commencer, une classe Menu, avec une méthode afficher(), par exemple :

    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
    35
    36
    37
    38
    39
    40
    public class Menu {
     
         private final static String[] OPTIONS = new String[]{
                "Creer nouvelle section",
                "Ouvrir une section existante",
    	    "Supprimer une section",
                "Creer une ligne",
                "Effacer une ligne",
                "Voir Devis / Facture",
                "Sortir"
         };
     
         public Menu() {
         }
     
         public void affiche() {
              for(int i=0;i<OPTIONS; i++) {
                   Terminal.ecrireStringln("                "+(i+1)+": "+OPTIONS[i]);
              }
              Terminal.sautDeLigne();
         }
     
         public int lireOption() {
              int option;
              boolean erreur;
              do {
                  Terminal.ecrireString("  Veuillez entrer votre choix : ");
                  option = Terminal.lireInt();
                  if (option<1 || option>7 ) {
                     Terminal.ecrireStringln("Erreur... option inconnue");
                     Terminal.sautDeLigne();
                     erreur=true;
                   } else {
                     erreur=false;
                   }
              while(erreur);
              return option;
         }
     
    }

    Et ta classe principale :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    public class ProgrammeDevisFacture {
     
         private Menu menu = new Menu();
     
         public void run() {
     
               int option;
               do {
                    menu.affiche();
                    option = menu.lireOption();
     
                        switch(option) {
                           case 1:
                              creerSection();
                              break;
                           case 2:
                              ouvrirSection();
                              break;
                           case 3:
                              supprimerSection();
                              break;
                           case 4:
                              creerLigne();
                              break;
                           case 5:
                              effacerLigne();
                              break;
                           case 6:
                              afficherDevisFacture();
                              break;
                      }
               }
               while(option!=7)
     
         }
     
         public void creerSection() {
     
               ...
     
         }
     
         ...
     
         public static void main(String[] args) {
            new ProgrammeDevisFacture.run();
         }
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Evites stp de modifier sans arrêt tes messages sinon je répondrai toujours à coté .

    Là, je fais pas une réponse de pro, mais une réponse de principe, adaptée à ce que tu as à faire.

    Si je devais faire une application professionnelle, je commencerais d'abord par mettre mes libellés de menu dans un ResourceBundle, et je créerais des actions (et des commandes), pour chaque menu. Et j'utiliserais probablement un système de services, pour gérer les UI, de manière à pouvoir rapidement remplacer l'UI en mode console par une UI graphique. D'autant plus que, professionnellement, j'ai plutôt l'habitude de faire des applications RCP, avec UI graphique.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Par ailleurs, tu devrais plutôt gérer les sections, les articles, etc, dans des java.util.List (ArrayList par exemple), plutôt que des tableaux : tu auras plus de facilités pour ajouter, supprimer, etc... et sans contrainte de dimensionnement (et donc de limite).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Bon , tout d'abord te remercier pour ton incroyable dévotion à une heure si tardive qui me donne envie de t'embrasser ne serait-ce qu'à distance .

    En 30 secondes mon projet a repris vie grâce à toi !

    Malheureusement je ne peux utiliser les arrays pour l'instant le projet doit utiliser uniquement ce qui est inclus dans le cours actuel, il est évident qu'il y a beaucoup mieux que des tableaux bruts ...

    Je garde précieusement ton post pour le futur mais je comprends déjà le cheminement ...

    Que Dieu te bénisse toi et les tiens !

    Bonne année 2014 !

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

Discussions similaires

  1. Problème variable dans info bulle
    Par sn@ke51 dans le forum JSF
    Réponses: 7
    Dernier message: 21/01/2008, 12h42
  2. problème variable dans substitution par regex
    Par gorgonite dans le forum Langage
    Réponses: 2
    Dernier message: 26/12/2007, 13h31
  3. [Configuration] problème variable dans l'url
    Par Sarrus dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 13
    Dernier message: 05/04/2007, 12h17
  4. [VB.NET] problème variables dans les textbox
    Par pierrepelerin dans le forum Windows Forms
    Réponses: 6
    Dernier message: 18/10/2006, 01h13
  5. problème variable dans formulaire
    Par calitom dans le forum Langage
    Réponses: 2
    Dernier message: 20/07/2006, 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