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 :

Déclaration tableau 2 dimensions


Sujet :

Collection et Stream Java

  1. #1
    Membre éclairé
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Par défaut Déclaration tableau 2 dimensions
    Bonjour, je souhaite afficher à partir d'une base de données les données qui respectent une certaine contrainte.

    J'ai besoin pour cela d'avoir un tableau par rapport à mon interface Java/Swing .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     you can initialize the row dimension without initializing the columns but not vice versa
     
        int[][] myArray = new int[5][];
        // illegal
        int[][] myArray = new int[][5];
    Or ici l'application que je ne vais pas développer fait ceci :

    Et donc je ne peux pas selon le théorème cité au dessus faire
    Object data[][] = new Object[][10];


    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
     
     
        /** Vector of Object[], this are the data of the table */
        Object data[][] = new Object[100][10];
     
     
       data[i][0] = (String)v.elementAt(1) + " " + (String)v.elementAt(2);                      // Nom d'invité
                data[i][1] =  (String)v.elementAt(3) + " " + (String)v.elementAt(4);    // Nom de bénéficaire
                data[i][2] = (String)v.elementAt(7);      // Categorie
                data[i][3] = (String)v.elementAt(10);      // Organisation
                data[i][4] = (String)v.elementAt(9);      // Fonction
                data[i][5] = (String)v.elementAt(15);      // Vip
                data[i][6] = (String)v.elementAt(16);      // Type Badge
                data[i][7] = (String)v.elementAt(13);      // Venus
                data[i][8] = (String)v.elementAt(12);      // Cadeau
                data[i][9] = (String)v.elementAt(8);   // User
    Suffirait-t-il alors que j'inverse colonne et ligne dans ma matrice?
    merci.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par cotede2 Voir le message
    Suffirait-t-il alors que j'inverse colonne et ligne dans ma matrice?
    Oui.
    Mais pourquoi tu ne veux pas allouer une taille dès le départ ? Tu seras obliger de le faire un jour ou l'autre dans ton programme.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre éclairé
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Par défaut
    Je connais pas d'avance combien de lignes je vais avoir
    des idées?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 245
    Par défaut
    bonjour, une idée serait de faire une requete pour connaitre le nombre de résultats tu crées ton tableau avec la taille retournée par la premiere requete puis tu exécutes la requete voulu (récupération des infos) et tu remplis ton tableau.

  5. #5
    Membre éclairé
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Par défaut
    Pour le moment j'essaie d'inverser les colonnes et lignes (il n'y a pas besoin de déclarer le nombre de lignes normalement pour un tableau).
    Mais le programme tel qu'il avait été fait, je pense à inverser le stockage ce qui rendait impossible la déclaration.

    Mon souci c'est que ce tableau c'est un attribut de ma classe... Et que d'autres méthodes appellent ce tableau. Donc pour l'initialiser dans la classe en attribut alors que d'autres méthodes l'appellent c'est délicat.


    Une idée serait de le déclarer dans le constructeur, sauf que j'ai l'impression que le tableau est amené à évoluer durant l'existence de l'objet instancié.

  6. #6
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    Si tu ne connais pas le nombre de ligne pourquoi ne pas utiliser une liste qui contient un tableau de int ?
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre éclairé
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Par défaut
    Désolé je comprends pas. Je stocke des informations autre que des entiers.
    Pouvez-vous développer merci.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Par défaut
    Salut,
    /** Vector of Object[], this are the data of the table */
    Comment est rempli ton vector, en faisant une requête dans la base? Qu'est-ce qu'il contient? S'il contient les données récupérées depuis la base, tu peux initialiser ton tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Object data[][] = new Object[v.size()][10];
    J'ai l'impression que tu fais une boucle
    data[i][0] = (String)v.elementAt(1) + " " + (String)v.elementAt(2); // Nom d'invité
    data[i][1] = (String)v.elementAt(3) + " " + (String)v.elementAt(4); // Nom de bénéficaire
    data[i][2] = (String)v.elementAt(7); // Categorie
    data[i][3] = (String)v.elementAt(10); // Organisation
    data[i][4] = (String)v.elementAt(9); // Fonction
    data[i][5] = (String)v.elementAt(15); // Vip
    data[i][6] = (String)v.elementAt(16); // Type Badge
    data[i][7] = (String)v.elementAt(13); // Venus
    data[i][8] = (String)v.elementAt(12); // Cadeau
    data[i][9] = (String)v.elementAt(8); // User
    à quoi correspond le i?

    Je ne sais pas quel composant swing tu utilises. Si c'est une JTable, saches que tu peux la remplir avec des vectors

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 156
    Par défaut
    Dans un premier temps il faut revenir au fonctionnement des tableaux d'objets en java. En java les tableaux d'objets contiennent des Objets, c'est objets peuvent être le type que l'on désire stocker. Mais ils peuvent également être des tableau. Il n'y a pas de vrai tableau multidimensionnelle en java.

    L'opération de transposition pose un autre problème en plus de la connaisance du nombre de ligne qu'il va falloir créer : pour bien faire il faudrait connaitre le types des colonnes, il n'est donc pas si simple de transposer proprement. Mais en supposant que tu stock uniquement des chaînes de caractères, tu peut le faire de la façon suivante : supposont que au départ tu es un tableau comme cela :
    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
     
    String[][] array = new String[][]{{"a","b","c","d"},{"a1","b1","c1"},{"a2","b2","c2","d2","e2"}};
    int maxlen = 0;
    for(String[] e : array)
    {
    if(e.length>maxlen){maxlen = e.length}
    }
     
    String[][] arrayt = new String[maxlen][];
    for(int i = 0 ; i < arrayt.length; i++)
    {
    arrayt[i] = new String[array.length];
    }
     
    for(int i = 0 ; i < array.length;i++)
    {
    for(int j = 0 ; j < array[i].length ; j++)
    {
    arrayt[j][i] = array[i][j];
    }
    }
    Le résultat sera une matrice rectangulaire, il y aura des éléments null quand il n'y a pas d'élément à transposer.

  10. #10
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    Désolé je n'avais pas fait attention, si c'est pour une jtable tu peux utiliser un vector de vector pour les data. Et donc pas besoin de déterminer la taille avant
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre éclairé
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Par défaut
    Ok je vais me renseigner.
    Pour le moment voilà où ça plante :



    Sachant que ROWS vaut 2 (2 lignes) et COLS vaut 10 (10 colonnes)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data = new Object[ROWS][COLS]; <--- ca plante :
    NullPointerException



    A la base, mon tableau est déclaré de la sorte en tant qu'attribut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        /** Vector of Object[], this are the data of the table */
        Object data[][] = new Object[0][0];
    Ensuite, j'arrive à savoir combien de lignes et combien de colonnes et enfin je peux le redéfinir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data = new Object[ROWS][COLS];
    Et là ça plante ..
    Peut-être il y a déjà une solution pour ce code?

  12. #12
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 245
    Par défaut
    Le NullPointerException vient bien de ton tableau ou est lié à tes variables ROWS/COLS? Tu as vérifié que tes variables sont bien instanciées? Parce que à part ça je ne vois pas ce qui pourrait lever cette Exception.

    Bon courage

  13. #13
    Membre éclairé
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Par défaut
    oui elles le sont (je fais un log() ) juste avant

  14. #14
    Membre très actif
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Par défaut
    ArrayList<ArrayList<Object>> ?

    Remplacez
    tab[i][j] = X;
    par
    tab.get(i).set(j, X);

    et
    X = tab[i][j];
    par
    X = tab.get(i).get(j);

    Pour créer des lignes :
    tab.set(i, new ArrayList()); //i n° de la ligne.

  15. #15
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par cotede2 Voir le message
    Je connais pas d'avance combien de lignes je vais avoir
    des idées?
    Ce n'est pas un soucis. Tu déclares le tableau avec une taille initiale. Au cours du remplissage, s'il devient trop petit, tu en créés un plus grand en recopiant les données dedans. C'est le fonctionnement des ArrayList et autre Vector.
    Une copie d'un simple tableau se fait par "System.arraycopy".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

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

Discussions similaires

  1. déclaration dynamique tableau 2 dimensions
    Par boboss123 dans le forum C
    Réponses: 1
    Dernier message: 23/03/2015, 16h05
  2. déclaration tableau à M dimensions
    Par Dadeap dans le forum C
    Réponses: 9
    Dernier message: 31/05/2013, 20h30
  3. Déclaration Tableau 2 dimensions
    Par vincent.gad dans le forum Débuter
    Réponses: 5
    Dernier message: 21/11/2008, 18h02
  4. Réponses: 1
    Dernier message: 09/03/2006, 17h25
  5. [Tableaux] Déclaration d'un tableau à 2 dimensions
    Par kcizth dans le forum Langage
    Réponses: 5
    Dernier message: 04/01/2006, 15h35

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