171 votes

Obtenir la longueur d'un tableau 2D en Java

J'ai besoin d'obtenir la longueur d'un tableau 2D pour la ligne et la colonne. J'ai réussi à le faire en utilisant le code suivant :

public class MyClass {

 public static void main(String args[])
    {
  int[][] test; 
  test = new int[5][10];

  int row = test.length;
  int col = test[0].length;

  System.out.println(row);
  System.out.println(col);
    }
}

Les chiffres 5 et 10 s'affichent comme prévu.

Regardez maintenant cette ligne :

  int col = test[0].length;

Remarquez que je dois faire référence à une ligne particulière pour obtenir la longueur de la colonne. Cela me semble incroyablement laid. De plus, si le tableau était défini comme suit :

test = new int[0][10];

Le code échouerait alors lorsqu'il essaierait d'obtenir la longueur. Existe-t-il une autre façon (plus intelligente) de procéder ?

232voto

NG. Points 12989

Considérer

public static void main(String[] args) {

    int[][] foo = new int[][] {
        new int[] { 1, 2, 3 },
        new int[] { 1, 2, 3, 4},
    };

    System.out.println(foo.length); //2
    System.out.println(foo[0].length); //3
    System.out.println(foo[1].length); //4
}

La longueur des colonnes varie d'une ligne à l'autre. Si vous sauvegardez des données dans un tableau 2D de taille fixe, fournissez des getters pour les valeurs fixes dans une classe enveloppante.

26voto

Ishtar Points 5751

Un tableau 2D n'est pas une grille rectangulaire. Ou mieux encore, il n'existe pas de tableau 2D en Java.

import java.util.Arrays;

public class Main {
  public static void main(String args[]) {

    int[][] test; 
    test = new int[5][];//'2D array'
    for (int i=0;i<test.length;i++)
      test[i] = new int[i];

    System.out.println(Arrays.deepToString(test));

    Object[] test2; 
    test2 = new Object[5];//array of objects
    for (int i=0;i<test2.length;i++)
      test2[i] = new int[i];//array is a object too

    System.out.println(Arrays.deepToString(test2));
  }
}

Sorties

[[], [0], [0, 0], [0, 0, 0], [0, 0, 0, 0]]
[[], [0], [0, 0], [0, 0, 0], [0, 0, 0, 0]]

Les tableaux test y test2 sont (plus ou moins) les mêmes.

21voto

gocode Points 177

Il était vraiment difficile de s'en souvenir

    int numberOfColumns = arr.length;
    int numberOfRows = arr[0].length;

Comprenons pourquoi il en est ainsi et comment nous pouvons nous en rendre compte lorsque nous sommes confrontés à un problème de tableau. Le code ci-dessous indique que les lignes = 4 et les colonnes = 3 :

    int[][] arr = { {1, 1, 1, 1}, 

                    {2, 2, 2, 2}, 

                    {3, 3, 3, 3} };

arr contient plusieurs tableaux, qui peuvent être disposés verticalement pour obtenir le nombre de colonnes. Pour obtenir le nombre de lignes, nous devons accéder au premier tableau et tenir compte de sa longueur. Dans ce cas, nous accédons à [1, 1, 1, 1] et le nombre de lignes est donc de 4. Lorsqu'on vous donne un problème où vous ne pouvez pas voir le tableau, vous pouvez visualiser le tableau comme un rectangle avec n X m dimensions et conclure que nous pouvons obtenir le nombre de lignes en accédant au premier tableau puis à sa longueur. L'autre tableau ( arr.length ) pour les colonnes.

5voto

RD1 Points 4458

Java vous permet de créer des "tableaux en dents de scie" où chaque "rangée" a des longueurs différentes. Si vous savez que vous avez un tableau carré, vous pouvez utiliser votre code modifié pour vous protéger contre un tableau vide comme celui-ci :

if (row > 0) col = test[0].length;

5voto

Si vous disposez de ce tableau :

String [][] example = {{{"Please!", "Thanks"}, {"Hello!", "Hey", "Hi!"}},
                       {{"Why?", "Where?", "When?", "Who?"}, {"Yes!"}}};

Vous pouvez le faire :

example.length;

\= 2

example[0].length;

\= 2

example[1].length;

\= 2

example[0][1].length;

\= 3

example[1][0].length;

\= 4

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