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 :

Transformer une liste en un tableau


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Transformer une liste en un tableau
    Hello

    voici mon code pour transformer la Liste MyList en tableau que je veux appeler toto et réutiliser dans une autre classe. Cependant cela ne fonctionne pas et je ne sais pas trop si en fait l'idée du toArray est la bonne, ou s'il manque un bout de code à la suite de ceci ?

    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
    import java.util.ArrayList;
     
    public class Liste {
     
    	private ArrayList<Liste> liste;
     
    	public Liste() // Constructeur
    	{
    		liste = new ArrayList<Liste>();
    	}
     
    	Liste MyList = new Liste(); // nouvel objet nommé "MyList" grâce au
    	// constructeur
     
    	double toto [][]= MyList.toArray();
     
    }
    merci d'avance

  2. #2
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    Ça ressemble un peu à de la science-fiction ton truc...

    Comprends-tu ce que fais ta classe?
    Sais-tu ce que tu veux faire?

  3. #3
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    de toute les façons la méthode toArray() te retournera un tableau en une seule dimension.
    comme Heimdal questce que tu cherche à faire exactement?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class Liste {
       Liste MyList = new Liste();
    }
    Là, tu déclares que chaque instance de Liste doit contenir un champ MyList de type Liste.
    Donc chaque instance de Liste doit contenir une instance de Liste, qui doit contenir une instance de Liste, qui doit contenir une instance de Liste, qui doit contenir une instance de Liste, qui doit contenir une instance de Liste, qui doit contenir une instance de Liste, qui doit contenir une instance de Liste, qui doit contenir une instance de Liste........


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double XY[][]= MyList.toArray();
    Le champ MyList est de type Liste, donc il faudrait que tu définisses la méthode toArray() dans ta classe.



    En tous cas je n'arrive pas à comprendre ce que tu cherches à faire, et apparemment je ne suis pas la seule...
    Explique-nous tout ça

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par Okeano Voir le message
    Je le lis et mets les résultats dans une liste à 2 colonnes et n lignes.
    Pour toi qu'est-ce qu'une "liste à deux colonnes et n lignes" ?
    Les classes représentant des listes sont habituellement uni-dimensionnelles. Ensuite, on peut utiliser des listes de listes pour passer à la deuxième dimension.
    Cependant, dans ton cas, voici comment je représenterais une "liste de points" : en créant une classe Point avec deux champs de type double représentant les deux coordonnées d'un point, et en stockant les n points dans une ArrayList<Point>.

    Citation Envoyé par Okeano Voir le message
    J'ai vu quelque part sur Internet que toArray pouvait faire ceci.
    La méthode toArray de l'interface java.util.Collection transforme une collection en tableau de type Object[] (donc unidimensionnel).
    Tu ne peux pas l'utiliser sur une classe quelconque n'implémentant pas Collection, et tu ne peux pas t'attendre à obtenir un tableau de type double[][].
    Si tu utilises une liste de points ArrayList<Point> comme suggéré plus haut, tu pourrais obtenir un tableau de points Point[] en utilisant la version générique de toArray. Mais pour obtenir un tableau de type double[][] il va falloir que tu codes toi-même ta méthode de transformation.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Première question :
    A quel point es-tu débutant en Java ? Parce que tu nous sors des trucs complètement tordu, je me demande vraiment ce que tu essayes de faire et "ce que ça veut dire" dans ta tête au moment où tu écris ça...
    Je ne dis pas ça pour te vexer, hein tout le monde a débuté un jour. Simplement, il serait peut-être plus efficace de commencer par lire un bon cours pour assimiler les principes de la programmation objet, plutôt que de tâtonner comme tu le fais.


    Rien que sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XY.add(i, Abscisse(i) - Ordonnee(i));
    Tu as défini XY comme un ArrayList<Point>. C'est une liste d'objets de type Point. Tu peux donc lui ajouter des objets de type Point.
    Or là tu essaies d'ajouter un entier et... quoi au juste ? C'est quoi Abscisse(i) et Ordonnee(i) ? Tu as certes défini un champ Abscisse mais que signifie Abscisse(i) ?

    Autre point :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class Point {
    	private ArrayList<Point> XY;
    }
    Pourquoi voudrais-tu qu'un point contienne une liste de points ?
    Tu nous refais une boucle de références comme avec ta classe Liste.

    Citation Envoyé par Okeano Voir le message
    Une question me turlupine: pourrai je par la suite utiliser XY comme un "tableau" càd si je code XY[i][j] est ce que ça passera comme sur un tableau pour récupérer un élément en particulier ?
    Si tu définis XY comme un ArrayList<Point>, alors non, tu ne pourras pas l'utiliser comme un double[][].
    Par contre, si tu définis deux getters getX() et getY() dans ta classe Point, tu pourras appeler XY.get(i).getX() (abscisse du i-ième point) ou XY.get(i).getY() (ordonnée du i-ième point).

    Note à propos de la modélisation du problème:
    Si tout ce dont tu as besoin c'est un tableau double[][], ne te gêne pas pour utiliser purement et simplement un tableau double[][]. Ma proposition d'une List<Point> est la représentation objet la plus claire d'une "liste de points" mais tu n'as peut-être pas besoin de te lancer là-dedans.
    Que comptes-tu faire de tout ça en fait ?


    Citation Envoyé par Okeano Voir le message
    En fait, je ne vois pas comment récupérer les coordonnées qui sont dans un fichier texte. Initialement, j'avais créé un BufferedReader afin de lire le fichier texte puis ensuite écrire les coordonnées dans une liste et la convertir en un tableau. Comme ça ne marche pas trop et que je n'ai plus cette étape, comment m'y prendre à présent ?
    Qu'est-ce qui ne "marche pas trop" ?
    As-tu réussir à lire ton fichier texte et à en extraire les coordonnées, ne serait-ce que pour les afficher ?

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par Okeano Voir le message
    Je ne sais pas si j'arrive à le lire: on m'a dit qu'on affichait qu'en tout dernier.
    Tu peux à tout moment appeler System.out.println(ceQueTuVeux); dans ton programme pour afficher ceQueTuVeux dans la sortie standard (typiquement: la console).

    Citation Envoyé par Okeano Voir le message
    Je ne sais plus s'il me faut un tableau, une liste un ArrayList...
    Ça dépend vraiment de ce que tu veux faire...
    Si tu dois stocker en mémoire tous les chiffres lus dans le fichier, sans savoir à l'avance combien de chiffres contient le fichier, il te faudra une liste. Si tu sais combien de chiffres contient le fichier, tu peux te contenter d'un tableau. Si tu n'as pas besoin de stocker les chiffres en mémoire mais que tu dois juste les ré-afficher, tu n'as même pas besoin de liste ni de tableau, tu lis, tu affiches, tu jettes et tu passes à la suite ! Ça ne servirait pas à grand chose, c'est sûr. C'est juste pour dire qu'il faut savoir ce qu'on veut faire avant de se lancer dans quoi que ce soit.
    Si tu dois manipuler des "points", définir une classe Point peut avoir un sens. Dans d'autres cas, ça sera peut-être inutilement lourd.

    Mais dans tous les cas, au vu des erreurs grossières dont sont parsemés tes bouts de code, tu devrais commencer par lire un cours sur Java

  8. #8
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Avoir une List<Point> est la meilleure option dans ce cas.

    Je te conseille aussi de lire des choses en ligne sur Java, tu gagneras du temps par rapport à passer du temps à tâtonner.

    Par contre je m'étonne d'un point : on vous donne un exercice sans avoir eu de cours au préalable ? Ou bien c'est juste que tel l'étudiant moyen d'école d'ingé, tu n'y as pas été (inutile de nier, j'ai fait ça avant toi ).

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Ok. Je vais creuser au niveau de List<Point>.

    Sinon, on a bien un cours mais ça va trop vite pour moi. Je n'ai aucune base en info. J'ai suivi tous les cours et TD. Simplement ce n'est pas du tout mon truc

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Je crois avoir enfin bien avancé. Cependant il y a un petit buh que je ne parviens pas à résoudre

    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
    import java.io.*;
    import java.util.StringTokenizer;
     
    public class Coord {
    	public void main(String[] args) throws IOException {
     
    		BufferedReader Lecture = null;
    		String Line;
    		int i = 0;
    		int Var[];
     
    		try {
    			Lecture = new BufferedReader(new FileReader("monfichier.dat"));
    		} catch (FileNotFoundException exc) {
    			System.out.println("Wrong File");
    		}
     
    		while ((Line = Lecture.readLine()) != null) {
    			StringTokenizer value = new StringTokenizer(Line, " ");
    			while (value.hasMoreTokens()) {
    				Var[i] = Integer.parseInt(value.nextToken());
    				System.out.println("Var[" + i + "] = " + Var[i]);
    				i++;
    			}
    		}
    		Lecture.close();
    	} catch (Exception e) {
    		System.out.println(e.toString());
    	}
    }
    Il n'aime pas beaucoup le "catch" en bas. Si je l'enlève il m'embête car il veut initialiser "Var" mais je ne comprends pas pourquoi.

    Voilà, après je pense que je n'aurai plus qu'à mettre mes Var[i] en fonction de la parité dans un tableau à 2 colonnes et je devrais en être tiré d'affaire concernant cette partie là...

  11. #11
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    le dernier catch ne suis pas un try, vérifie tes accolades.
    ou enlève le carrément, je ny vois aucun intérêt

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par Okeano Voir le message
    Alors du coup, il veut que j'initialise "Var" sinon il ne veut pas compiler.
    Je n'arrive pas à résoudre le problème.
    La solution semble pourtant simple : il suffit que tu initialises le tableau...
    (note : par convention, les noms de variables commencent par des minuscules => 'var')

  13. #13
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Points : 313
    Points
    313
    Par défaut
    Bonjour,

    pour initialiser votre tableau Var, il faudrait que vous connaissiez à l'avance sa taille. Il serait donc astucieux d'utiliser une liste.

    Voici ce que je vous propose :
    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
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.StringTokenizer;
     
    public class Coordonnees {
    	public void main(String[] args) throws IOException {
     
    		BufferedReader Lecture = null;
    		String Line;
    		int i = 0;
    		ArrayList<Integer> var = new ArrayList<Integer>();
     
    		try {
    			Lecture = new BufferedReader(new FileReader("monfichier.dat"));
    			
    			while ((Line = Lecture.readLine()) != null) {
    				StringTokenizer value = new StringTokenizer(Line, " ");
    				while (value.hasMoreTokens()) {
    					var.add(new Integer(value.nextToken()));
    					System.out.println("Var[" + i + "] = " + var.get(i).toString());
    					i++;
    				}
    			}
    			Lecture.close();
    		} catch (FileNotFoundException exc) {
    			System.out.println("Wrong File");
    		}
    	}
    }
    Est-ce que cela correspond à ce que vous cherchez ?

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Oui je pense que je vais opter pour cela car je ne m'en sors pas avec un tableau. J'arrive bien a extraire le nombre de ligne de mon fichier initiale ce qui me donne la taille du tableau mais impossible de m'en servir dans une autre classe.

    En revanche, je viens de m'apercevoir que le code ne lit que la 1ère ligne en boucle...

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Trouvé =) Juste parce que tu avais mis
    "public void main(String[] args) throws IOException {"
    au lieu de
    "public static void main(String[] args) throws IOException {"

    C'est malheureux pour si peu...

    Merci en tout cas

Discussions similaires

  1. Transformer une liste chainée en tableau
    Par tolliob dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 06/08/2014, 11h53
  2. Réponses: 1
    Dernier message: 02/04/2007, 15h56
  3. Transformer une liste en tableau
    Par basket dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 07/09/2006, 16h01
  4. Réponses: 2
    Dernier message: 13/07/2006, 22h18
  5. Transformer une liste en chaîne de caractères
    Par nounjours dans le forum Prolog
    Réponses: 1
    Dernier message: 23/02/2006, 15h41

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