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

Collection et Stream Java Discussion :

Lire un tableau depuis une autre méthode


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Commercial
    Inscrit en
    Août 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Commercial
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2015
    Messages : 2
    Par défaut Lire un tableau depuis une autre méthode
    Bonjour à tous,

    Je débute actuellement en Java et dans la POO étant plus habitué à des langages de dev purement procéduraux.

    J'essaye là de lire, une valeur dans un tableau de long sachant que :
    - Je ne connais pas la dimension du tableau avant l'appel du constructeur de ma classe
    - Pour les besoins de mon application, j'aurais besoin d'affecter des valeurs dans le tableau dans le constructeur de ma classe
    - Enfin, je veux qu'une méthode de ma classe soit en mesure de retourner la valeur à partir de l'index du tableau quand elle est appelée (de l’extérieur ou de l'intérieur de la classe)


    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
     
    package fr.monprog;
     
    public class Main {
     
    	long tableau[]; // J'ai besoin de déclaré un tableau mais je connais 
    	                // pas encore la taille dont j'aurais besoin
     
    	public static void main(String[] args) {
     
     
    		long tableau[] = new long[5]; // Maintenant je connais la taille
     
    		tableau[3] = 147;             // Je remplis le tableau avec les valeurs
    		System.out.print(tableau[3]+" (la ca marche)\n"); // La ca marche ... mais...
    		test(3);                       // Je lis le tableau a l'aide d'une méthode une autre mérhode
     
    	}
     
    	public void test(int i){
     
    		System.out.print(tableau[i]);   // Boum exception :(
     
    	}
     
    }

    Résultat :
    147 (la ca marche)
    Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    Cannot make a static reference to the non-static field tableau

    at fr.monprog.Main.test(Main.java:21)
    at fr.monprog.Main.main(Main.java:15)
    Qu'est-ce qui m'échappe ?

  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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    La classe n'est pas compilable parce que la méthode test() est une méthode de la classe Main : il faut l'appeler sur une instance de classe Main. Là, dans la méthode main, qui est static, tu n'est pas dans une instance de classe Main, donc tu ne peux pas aller une méthode d'une instance quelconque sans indiquer cette instance (seules les autres méthodes statiques évenuelles pourraient être appelées).

    Il faudrait donc écrire :

    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
    public class Main {
     
    	long tableau[]; 
     
    	public static void main(String[] args) {
     
                    Main instance = new Main(); // je créé une instance de Main
    		instance.test(3);                       // Je lis le tableau a l'aide d'une méthode une autre mérhode
     
    	}
     
    	public void test(int i){
     
    		System.out.print(tableau[i]);   // Boum exception :(
     
    	}
     
    }
    Autre chose : dans ton programme, il y a 2 variables tableau différentes :

    1. l'une membre de classe Main, déclarée ici :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      long tableau[]; // J'ai besoin de déclaré un tableau mais je connais
    2. l'autre locale à la méthode main
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      long tableau[] = new long[5]; // Maintenant je connais la taille


    tu instancies et dimensionnes le tableau dans la méthode main, puis le remplis, mais celui de la classe Main est un autre tableau, donc lui reste non instancié, et non remplis.

    La solution est dans ton énoncé :

    Citation Envoyé par Baumy Voir le message
    - Pour les besoins de mon application, j'aurais besoin d'affecter des valeurs dans le tableau dans le constructeur de ma classe
    Non seulement il faut remplir le tableau dans le constructeur, mais aussi instancier et dimensionner ce tableau dans le constructeur, et pour ça, il faut avoir sa taille : comme c'est la méthode main() qui connait cette valeur, elle doit pouvoir la transmettre à la classe Main au moment de la création de la classe, donc simplement la passer en paramètre du constructeur, pour qu'on puisse l'utiliser dans le constructeur.
    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 éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 764
    Par défaut
    Bonjour !

    J'ajouterai, à ce qu'à écrit Joel, ceci :

    Tu dois déclarer tes variables au plus près de l'endroit où elles vont être utilisées. Ainsi, dans ton code, vu que tu n'utilise le tableau que dans la méthode main(), il faut le déclarer dans la méthode.

    C'est une autre raison, en plus que celle que Joel a écrite, pour affirmer qu'il te faut instancier ce tableau dans la méthode.


Discussions similaires

  1. Réponses: 2
    Dernier message: 02/05/2012, 11h19
  2. Réponses: 5
    Dernier message: 18/09/2008, 17h20
  3. Réponses: 3
    Dernier message: 11/06/2008, 21h09
  4. Réponses: 6
    Dernier message: 29/04/2008, 09h34
  5. Réponses: 5
    Dernier message: 23/04/2007, 16h31

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