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

Langage Java Discussion :

[PORTEE VARIABLES] Demande conseil je suis bloqué


Sujet :

Langage Java

  1. #1
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut [PORTEE VARIABLES] Demande conseil je suis bloqué
    Bonjour,

    J'aimerais ouvrir un fichier et remplir un tableau (donc variable) avec ce fichier.

    Ce tableau doit être utilisable depuis plusieurs fonctions (dans une fonction je le rempli, et dans 3 autres je le lis) ==> variable public au début de la classe.

    Mon problème :
    Cela fonctionne très bien pendant la programmation quand on fixe une taille de test au tableau, mais quand il ouvrira réellement le fichier, je ne sais pas combien il y aura d'élements dans ce tableau.

    J'ai pensé a essayer le miracle (mettre le tableau en public dans la fonction d'écriture des données) mais le miracle n'est pas pour aujourdhui.

    Pour info mon tableau : String[][] xml_commande = new String[nb_elements][4]; et je prog en J2ME.

    Quelqu'un a-t'il une idée pour me débloquer ???

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut Re: [PORTEE VARIABLES] Demande conseil je suis bloqué
    Citation Envoyé par PoZZyX
    Cela fonctionne très bien pendant la programmation quand on fixe une taille de test au tableau, mais quand il ouvrira réellement le fichier, je ne sais pas combien il y aura d'élements dans ce tableau.
    C'est pour cela qu'il faut utiliser une structure de donnée dynamique.
    Ansi, à chaque information lue dans ton fichier, tu te contentes de l'ajouter à ta structure qui sera redimensionnée automatiquement (dynamiquement).
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut
    hmm je suis relativement très débutant en Java, mais je connais les structures en C.

    Peux-tu m'expliquer comment programmer ton principe en Java.

    Merci d'avance

  4. #4
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut
    si tu parlais d'un vecteur, comment gérer le fait que ce soit un tableau à 2 dimension [nombre_elements][4] ???

  5. #5
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Citation Envoyé par PoZZyX
    si tu parlais d'un vecteur, comment gérer le fait que ce soit un tableau à 2 dimension [nombre_elements][4] ???
    Vecteur contenant des tableaux de 4 éléments, ou vecteur de vecteurs...

  6. #6
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    C:\WTK22\apps\dips\src\dips.java:108: incompatible types
    found   : java.lang.Object
    required: java.lang.String[]
    		commande = lst_commande.elementAt(n);
                                           ^
    une idée pourquoi j'obtiens ça avec ce 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
     
    		int n;
     
    		n=11;
     
    		commande[0] = "Fenebet"; //description
    		commande[1] = "fenebet"; // commande
    		commande[2] = "10"; // catégorie
    		lst_commande.insertElementAt(commande, n);
     
    		commande[0] = "";
    		commande[1] = "";
    		commande[2] = "";
    		System.err.println("Vide : " + commande[0]);
    		System.err.println("Vide : " + commande[1]);
    		System.err.println("Vide : " + commande[2]);
     
    		commande = lst_commande.elementAt(n);
    		System.err.println("Plein : " + commande[0]);
    		System.err.println("Plein : " + commande[1]);
    		System.err.println("Plein : " + commande[2]);
    Merci de ton aide

  7. #7
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Un Vector stocke des Object. Donc quand tu fais du
    Il te retourne un Object.
    Tu dois donc casté le résultat de la méthode get() en String[].

  8. #8
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut
    Maintenant j'ai ça :
    java.lang.ArrayIndexOutOfBoundsException: 11 > 0
    at java.util.Vector.insertElementAt(+45)
    at dips.<init>(+147)
    at java.lang.Class.runCustomCode(+0)
    at com.sun.midp.midlet.MIDletState.createMIDlet(+19)
    at com.sun.midp.midlet.Selector.run(+22)


    avec :
    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
     
    		commande[0] = "11"; // id
    		commande[1] = "Fenebet"; //description
    		commande[2] = "fenebet"; // commande
    		commande[3] = "10"; // catégorie
    		lst_commande.insertElementAt(commande,11);
     
    		commande[0] = "";
    		commande[1] = "";
    		commande[2] = "";
    		commande[3] = "";
    		System.err.println("Vide : " + commande[0]);
    		System.err.println("Vide : " + commande[1]);
    		System.err.println("Vide : " + commande[2]);
    		System.err.println("Vide : " + commande[3]);
     
    		commande = (String[]) lst_commande.elementAt(11);
    		System.err.println("Plein : " + commande[0]); 
    		System.err.println("Plein : " + commande[1]); 
    		System.err.println("Plein : " + commande[2]);
    		System.err.println("Plein : " + commande[3]);
    Si je mets get à la place de elementAt, il me fait une erreur comme quoi il connait pas get.

    C'est bien gentil de m'aider, je sais je suis débutant

  9. #9
    Membre habitué Avatar de manube
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2004
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 180
    Points : 178
    Points
    178
    Par défaut
    Salut,
    Bon je te conseille de changer tes habitudes acquises avec le C.
    En java, avec les tableaux tu vas te rendre fou dc utilise les Collections (non triées) ou les List (triées).
    Pour parcourir ces types de données utilise les "Iterator" ou mieux depuis Java 5.0 tu as une boucle for qui ne devrait pas trop te dépayser
    http://java.developpez.com/faq/java/...ORD_for_etendu. De cette facon ca t'évitera d'avoir des ArrayOutOfBoundException

    Pour revenir à ton pb, tu peux faire des listes de listes à la place de tableaux de tableaux (comme List est une interface, je vais prendre la class Vector).
    Ca te donne qque chose comme (en java 5):
    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
     
    // Construction
    			// Ton tableau à 2 dimensions
    			Vector<Vector<String>> monGrandTableau = new Vector<Vector<String>>();
    			// 1er tableau à 1 dimension
    			Vector<String> tab1 = new  Vector<String>();
    			tab1.add("element 1");
    			tab1.add("element 2");
    			// 2nd tableau à 1 dimension
    			Vector<String> tab2 = new  Vector<String>();
    			tab1.add("element 18");
    			tab1.add("element 25");
    			// .... etc 
    			// Tu ajoutes tous tes tableaux à 1 dim dans ton tableau à 2 dim
    			monGrandTableau.add(tab1);
    			monGrandTableau.add(tab2);
     
    			// Lecture
    			for(Vector<String> tab : monGrandTableau)
    			{
    				// tab est une liste de String
    				for(String elements : tab)
    					System.out.println(elements);
    			}
    			// ou
    			Vector<String> tab18 = monGrandTableau.get(18); // il faut que tu ais bien 18 tableau dans 'monGrandTableau'
    //...
    Voila en espérant que tu ais tout compris.
    +

  10. #10
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut
    Visiblement mon wireless toolkit n'a pas la bonne version, une idée comment la changer ???

    generics are not supported in -source 1.3
    (try -source 1.5 to enable generics)
    Vector<Vector<String>> monGrandTableau = new Vector<Vector<String>>();

  11. #11
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Citation Envoyé par PoZZyX
    Maintenant j'ai ça :
    java.lang.ArrayIndexOutOfBoundsException: 11 > 0
    at java.util.Vector.insertElementAt(+45)
    at dips.<init>(+147)
    at java.lang.Class.runCustomCode(+0)
    at com.sun.midp.midlet.MIDletState.createMIDlet(+19)
    at com.sun.midp.midlet.Selector.run(+22)


    avec :
    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
     
    		commande[0] = "11"; // id
    		commande[1] = "Fenebet"; //description
    		commande[2] = "fenebet"; // commande
    		commande[3] = "10"; // catégorie
    		lst_commande.insertElementAt(commande,11);
     
    		commande[0] = "";
    		commande[1] = "";
    		commande[2] = "";
    		commande[3] = "";
    		System.err.println("Vide : " + commande[0]);
    		System.err.println("Vide : " + commande[1]);
    		System.err.println("Vide : " + commande[2]);
    		System.err.println("Vide : " + commande[3]);
     
    		commande = (String[]) lst_commande.elementAt(11);
    		System.err.println("Plein : " + commande[0]); 
    		System.err.println("Plein : " + commande[1]); 
    		System.err.println("Plein : " + commande[2]);
    		System.err.println("Plein : " + commande[3]);
    Si je mets get à la place de elementAt, il me fait une erreur comme quoi il connait pas get.

    C'est bien gentil de m'aider, je sais je suis débutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.ArrayIndexOutOfBoundsException: 11 > 0
    Cette erreur vient de là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lst_commande.insertElementAt(commande,11);
    Tu essaies d'insérer "commande" à la 11ème place de ton vecteur. Or tu es obligé de commencer à la position 0 et d'insérer l'élément suivant dans la case suivante.
    D'où l'utilisation de la méthode add(Object) qui t'insère ton Object à la place adéquate.
    C'est tout bête...

  12. #12
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Citation Envoyé par PoZZyX
    Visiblement mon wireless toolkit n'a pas la bonne version, une idée comment la changer ???

    generics are not supported in -source 1.3
    (try -source 1.5 to enable generics)
    Vector<Vector<String>> monGrandTableau = new Vector<Vector<String>>();
    J'imagine que tu utilises le JRE 1.3.
    Donc cherche n'importe quel tuto java, regarde à Vector et tu trouveras la syntaxe adéquate.

    Dans les versions précédentes de Java, tu n'as pas besoin de préciser le type d'éléments stockés dans ton Vector : tu fais juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vector toto = new Vector();
    Pour le reste, je te laisse chercher un peu

  13. #13
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    C:\WTK22\apps\dips\src\dips.java:112: incompatible types
    found   : java.lang.String[]
    required: java.util.Vector
    			read_commande = (String[]) lst_commande.elementAt(i); 
                             ^
    1 error
    com.sun.kvem.ktools.ExecutionException
    Voila l'erreur que j'ai avec mon dernier 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
     
    		int i,j;
    		// fait un lien avec l'affichage
     
    		commande[0] = "11"; // id 
    	    commande[1] = "Fenebet"; //description 
    	    commande[2] = "fenebet"; // commande 
    	    commande[3] = "10"; // catégorie 
    	    lst_commande.addElement(commande); 
     
    	    commande[0] = ""; 
    	    commande[1] = ""; 
    	    commande[2] = ""; 
    	    commande[3] = ""; 
    	    System.err.println("Vide : " + commande[0]); 
    	    System.err.println("Vide : " + commande[1]); 
    	    System.err.println("Vide : " + commande[2]); 
    	    System.err.println("Vide : " + commande[3]); 
     
    		for (i=0; i<lst_commande.size();i++)
    		{
    			Vector read_commande = new Vector();
    			read_commande = (String[]) lst_commande.elementAt(i); 
     
    			for (j=0; j<read_commande.size();j++)
    			{
    				System.err.println("Plein : " + (String) read_commande.elementAt(j)); 
    			}
    		}
    En tout cas je te remercie pour l'aide que tu me fourni, peu à peu ça se rapproche (enfin il me semble en tout cas )

  14. #14
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    C'est logique ton erreur, tu dit que read_commande qui est un vector devienne un élément de list_commande, ce qui retourne un tableau de String...

    Vector n'est pas égal à String[]

    C'est quoi que tu veut faire exactement avec ca...

    Si tu veut stocker chaque élément de ton tableau de String dans ton vector, faut faire une boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int j = 0; j < list_commande.elementAt(i);j++){
         readCommande.add(list_commande.elementAt(i)[j]);
    }

  15. #15
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut
    Bah je veux simplement lire les valeurs qui sont dans mon vecteur

    avec ta méthode j'obtiens ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    C:\WTK22\apps\dips\src\dips.java:114: operator < cannot be applied to int,java.lang.Object
    			for(j = 0; j < lst_commande.elementAt(i);j++)
                          ^
    C:\WTK22\apps\dips\src\dips.java:116: array required, but java.lang.Object found
    				read_commande.addElement(lst_commande.elementAt(i)[j]); 
                                                                  ^
    2 errors
    avec le 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
     
    		int i,j;
     
    		commande[0] = "11"; // id 
    	    commande[1] = "Fenebet"; //description 
    	    commande[2] = "fenebet"; // commande 
    	    commande[3] = "10"; // catégorie 
    	    lst_commande.addElement(commande); 
     
    	    commande[0] = ""; 
    	    commande[1] = ""; 
    	    commande[2] = ""; 
    	    commande[3] = ""; 
    	    System.err.println("Vide : " + commande[0]); 
    	    System.err.println("Vide : " + commande[1]); 
    	    System.err.println("Vide : " + commande[2]); 
    	    System.err.println("Vide : " + commande[3]); 
     
    		for (i=0; i<lst_commande.size();i++)
    		{
    			Vector read_commande = new Vector();
     
    			for(j = 0; j < lst_commande.elementAt(i);j++)
    			{ 
    				read_commande.addElement(lst_commande.elementAt(i)[j]); 
    			}
    		}

  16. #16
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    oups autant pour moi, je me suis trompé

    la vrai ligne c'est ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(j = 0; j < lst_commande.elementAt(i).length;j++){

  17. #17
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    C:\WTK22\apps\dips\src\dips.java:117: cannot find symbol
    symbol  : variable length
    location: class java.lang.Object
    			for(j = 0; j < lst_commande.elementAt(i).length;j++)
                                                  ^
    C:\WTK22\apps\dips\src\dips.java:119: array required, but java.lang.Object found
    				read_commande.addElement(lst_commande.elementAt(i)[j]); 
                                                                  ^
    2 errors
    Encore des problèmes. C'est pas possible que ce soit aussi compliqué de faire un "tableau" dimensionnable

  18. #18
    Membre habitué Avatar de manube
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2004
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 180
    Points : 178
    Points
    178
    Par défaut
    Il faut que "cast" lst_commande.elementAt(i) en tableau de String afin qu'il sache de quoi il s'agit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((String[])lst_commande.elementAt(i)).length
    C'est pour éviter ces pbs avec les tableaux que je te conseillais d'utiliser les collections (Pour le JRE 1.3 tu supprimes toutes les <...> de mon code. Tu devras aussi te passer de la boucle for et utiliser les Iterator si ca t'interesse)

  19. #19
    Membre habitué Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Points : 154
    Points
    154
    Par défaut
    Ok merci pour ton aide je vais voir ce que je peux faire

    merci bcp

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

Discussions similaires

  1. Demande conseils orientation, je suis perdue..
    Par celestialcrystal dans le forum Etudes
    Réponses: 9
    Dernier message: 05/02/2015, 19h09
  2. Projet WEB : demande conseil et avis !
    Par xG-Hannibal dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 04/03/2006, 21h03
  3. [UML] Débutant demande conseil
    Par materiel67 dans le forum Débuter
    Réponses: 3
    Dernier message: 28/12/2005, 19h56
  4. [VB6] Demande conseil
    Par eagleleader dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 22/11/2005, 17h43

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