64 votes

Obtenir la longueur d'un tableau à deux dimensions

Comment obtenir la deuxième dimension d'un tableau si je ne la connais pas ? array.length ne donne que la première dimension.

Par exemple, en

public class B {
    public static void main(String [] main){
        int [] [] nir = new int [2] [3];
        System.out.println(nir.length);
    }
}

Voir cela code run live at Ideone.com .

2

Comment puis-je obtenir la valeur de la deuxième dimension de nir Quel est le chiffre 3 ?

117voto

Brian Roach Points 43787

qui 3 ?

Vous avez créé un tableau multidimensionnel. nir est un tableau de tableaux d'int ; vous avez deux tableaux de longueur trois.

System.out.println(nir[0].length); 

vous donnerait la longueur de votre premier tableau.

Il convient également de noter qu'il n'est pas nécessaire d'initialiser un tableau multidimensionnel comme vous l'avez fait, ce qui signifie que tous les tableaux n'ont pas besoin d'avoir la même longueur (ou d'exister du tout).

int nir[][] = new int[5][];
nir[0] = new int[5];
nir[1] = new int[3];
System.out.println(nir[0].length); // 5
System.out.println(nir[1].length); // 3
System.out.println(nir[2].length); // Null pointer exception

9 votes

+1 en particulier pour les conseils dangereux concernant les données non rectangulaires (je veux dire par là qu'il est dangereux de faire des hypothèses sur vos données, et non pas qu'il est dangereux d'utiliser des données non rectangulaires). Cela a trompé plus d'un programmeur novice, et a ridiculisé plus d'un programmeur non novice qui aurait dû être plus avisé !

2 votes

Donc essentiellement le 3 en int [] [] nir = new int [2] [3]; est factice (sans utilité pratique). Ou est-il utilisé pour allouer 3 cellules dans chaque ligne - nombre par défaut de colonnes dans chaque ligne ?

0 votes

@KNU si vous utilisez cette syntaxe qui définit explicitement la deuxième dimension comme étant 3 ... alors vous obtenez cette longueur pour chaque tableau. La deuxième partie de ma réponse indique simplement que vous n'êtes pas obligé d'utiliser cette syntaxe.

21voto

Rasmus Norup Points 161

Dans la dernière version de JAVA, voici comment procéder :

nir.length //is the first dimension
nir[0].length //is the second dimension

12voto

krtek Points 15497

Vous pouvez faire :

 System.out.println(nir[0].length);

Mais sachez qu'il n'existe pas de véritable tableau à deux dimensions en Java. Chaque tableau de "premier niveau" contient un autre tableau. Chacun de ces tableaux peut être de taille différente. nir[0].length n'a pas nécessairement la même taille que nir[1].length .

6voto

confucius Points 6071

Utiliser

   System.out.print( nir[0].length);

Regardez cette boucle for qui imprime le contenu d'un tableau à deux dimensions la deuxième boucle itère sur la colonne de chaque ligne

for(int row =0 ; row < ntr.length; ++row)
 for(int column =0; column<ntr[row].length;++column)
    System.out.print(ntr[row][column]);

0 votes

Notez que cela peut provoquer une exception de pointeur nul si le tableau de la deuxième dimension n'a pas été créé ; il faut vérifier ntr[row] != null avant l'impression.

3voto

Igor Soudakevitch Points 406

Voici une solution complète pour énumérer les éléments d'un fichier irrégulier tableau à deux dimensions (avec 3 lignes et 3 à 5 colonnes) :

    String row = "";
    int[][] myArray = {{11, 12, 13}, {14, 15, 16, 17}, {18, 19, 20, 21, 22}};
    for (int i=0; i<myArray.length; i++) {
        row+="\n";
        for (int j = 0; j<myArray[i].length; j++) {
            row += myArray[i][j] + "  ";
        }
    }
    JOptionPane.showMessageDialog(null, "myArray contains:" + row);

Jagged array's contents

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X