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 :

Tableau dynamique object[][]


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 14
    Par défaut Tableau dynamique object[][]
    Bonjour,

    J'ai créer un tableau avec netbeans (genre de feuille excel) dont le code généré est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    jTable.setModel(new javax.swing.table.DefaultTableModel(new Object[][]{
    {null, null, null, null, null, null},
    {null, null, null, null, null, null},
    {null, null, null, null, null, null},
    {null, null, null, null, null, null}
    };
    new String [] {
    "A", "B", "C", "D", "E", "F"
    }
    ));
    Je souhaite ajouté des valeurs à dans le tableau de façon dynamique :
    Il suffit que je fasse ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int longueur = tableau.length;
    String[][] truc = new String[longueur][6];
    Object[][]{truc};new String [] {
    "A", "B", "C", "D", "E", "F"
    }
    ));
    Corriger moi si c'est inexacte

    Maintenant, reste à programmer "truc" pour en faire une chaine dynamique.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for (int i=0;i<20;i++)
    {
    truc[i][1]="A";
    truc[i][2]="B";
    truc[i][3]="D";
    truc[i][4]="E";
    truc[i][5]="";
    truc[i][6]="DD";
    }
    Bon, ici, dans mon exemple, le nombre est connu (20) mais j'utilise une fonction qui est dynamique.

    J'ai tenté de faire une list et listarray comme dans la FAQ mais je ne comprend pas bien son fonctionnement (dans le cadre des accces) j'ai juste compris que ça stocké les informations les uns à la suite des autres et pour l'acces, ce n'est pas pareil qu'un tableau; dans le cas d'une map... j'ai pas trouvé autant d'info dessus

    Si qq'un pouvait me fournir un exemple de code pour faire des tableaux multidimensionnel avec object : Merci de poster

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Le plus simple pour comprendre comment utiliser et redéfinir (ce qui est très souvent un corollaire) un TableModel est d'aller à l'adresse suivante

    http://java.sun.com/docs/books/tutor...able.html#data

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 14
    Par défaut
    Citation Envoyé par sinok
    Le plus simple pour comprendre comment utiliser et redéfinir (ce qui est très souvent un corollaire) un TableModel est d'aller à l'adresse suivante

    http://java.sun.com/docs/books/tutor...able.html#data
    Merci pour le lien, cependant, il n'est pas indiqué dedans comment on fait pour créer un object tableau multidimensionnel dynamiquement, vu que dans les exemples, tous le contenu du tableau est de taille prédéfinit ou encore, des cases fixe où le contenu est défini par l'utilisateur.

    Or, ce que je cherche, c'est plutot redimenssionné le tableau en longueur.

    Merci d'avance

  4. #4
    Membre confirmé Avatar de Thor Tillas
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Par défaut
    Salut,

    D'après ce que j'ai compris, tu veux faire un Vector de Vector (même s'il me semble que c'est plus vector maintenant qu'il faut utiliser...)

    Un tableau en java à une taille fixe... si tu veux la changer, tu recrée un tableau avec la nouvelle taille et tu écrase ta variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void changeSize(String[][] tab){
      String [][] newTab = new String[tab.length+123][tab[0].length+123];
      tab = newTab;
    }
    J'espère que je suis pas trop à côté de la plaque parce que j'ai pas tout à fait compris ton problème

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 14
    Par défaut Merci, probleme résolu ! :)
    Ah ! Merci Thor Tillas :

    Ta réponse m'a fortement guidé à trouver la solution :
    Cependant, j'ai du corriger un peu ta méthode (c'est vrai que créé une méthode était une résolution dont je n'avais pas réfléchit)

    La méthode donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public static String[][] changeSize(String[][] tab){
    String[][] newTab = new String[tab.length+123][6];
    System.arraycopy(tab, 0, newTab, 0, tab.length);
    return newTab;
    }
    Afin de mieu comprendre le code :
    La méthode doit être static pour être compiler (pourquoi ?)
    On déclare le nouveau tableau : on spécifie la taille en longueur (pour mon cas, on redimensionne seulement en longueur, la largeur restant identique.)
    tab.lenght+1 si on souhaite ajouté une ligne à la fois
    Ensuite, j'ai remplacé ton "tab = newTab;" par la fonction arraycopy qui permet de copier le contenu du tableau tab dans le nouveau tableau plus grand dont nous avons dimensionné juste la ligne du dessus.
    (car le tab = newTab ne copie que des références.. en gros, ça ne recopie pas les données en elle même.. ce qui fait que à chaque appel de la fonction. Le tableau est redéclaré, et donc, on ne conserve pas les données de l'ancien tableau.
    Mais je n'ai pas fait que changé cette ligne, étant donnée qu'il ne s'agit pas d'une méthode avec passage par référence ou valeur (arf, j'ai du mal à savoir laquel fait quoi, mais je sais que l'une modif directement les valeurs mis en parametre);
    Donc, afin de recevoir la valeur de la méthode, j'utilise "return".

    Et voilà comment on l'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int longueur;
    String[][] table = new String[1][6];
    longueur = table.lenght;
    System.out.println("La longueur de la table est de : "+longueur);
    table = changeSize(table);
    longueur = table.lenght;
    System.out.println("La longueur de la table après passage de la méthode est de : "+longueur);
    Ensuite, pour afficher le tableau, c'est très simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (int y = 0;y <table.length;y++)
    {
          for(int x=0;x<6;x++)
          {System.out.println("table ["+y+"]-["+x+"] : "+table[y][x];}
    }
    Voilà, je pense que c'est assez claire pour les débutants qui souhaite faire un tableau comme moi

  6. #6
    Membre confirmé Avatar de Thor Tillas
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Par défaut
    Pour le coup du static...

    J'imagine que tu appel cette méthode depuis le main dont la déclacaration est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public static void main(String[] args){
    }
    C'est donc une méthode static.

    Et il est impossible d'appeler une méthode non-static depuis une méthode static.

    Voilà j'espère que ca répond à ta question...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/03/2015, 18h31
  2. récupérer la memoire et tableau dynamique
    Par Guigui_ dans le forum Langage
    Réponses: 6
    Dernier message: 06/01/2003, 08h02
  3. AFFICHER UN TABLEAU DYNAMIQUE
    Par ghassenus dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2002, 14h19
  4. [Kylix] tableau dynamique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 31/10/2002, 08h57
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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