web-dev-qa-db-fra.com

Obtenir la longueur d'un tableau 2D en Java

Je dois 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);
    }
}

Cela affiche 5, 10 comme prévu.

Maintenant, jetez un oeil à cette ligne:

  int col = test[0].length;

Notez que je dois en fait référencer une ligne particulière pour obtenir la longueur de la colonne. Pour moi, cela semble incroyablement moche. De plus, si le tableau a été défini comme:

test = new int[0][10];

Ensuite, le code échouerait en essayant d'obtenir la longueur. Y a-t-il une manière différente (plus intelligente) de faire cela?

94
user432209

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
}

Les longueurs de colonne diffèrent par ligne. Si vous sauvegardez des données à l'aide d'un tableau 2D de taille fixe, fournissez des accesseurs aux valeurs fixes d'une classe wrapper.

131
NG.

Un tableau 2D n'est pas une grille rectangulaire. Ou peut-être mieux, 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));
  }
}

Les sorties

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

Les tableaux test et test2 sont (plus ou moins) identiques.

11
Ishtar

Java vous permet de créer des "tableaux déchiquetés" dans lesquels chaque "ligne" 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 ceci: 

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

Il n'y a pas de solution plus claire au niveau de la langue car tous les tableaux multidimensionnels ne sont pas rectangulaires. Des tableaux parfois irréguliers (longueurs de colonne différentes) sont nécessaires.

Vous pouvez facilement créer votre propre classe pour résumer les fonctionnalités dont vous avez besoin.

Si vous n'êtes pas limité aux tableaux, certaines des classes de collection fonctionneront peut-être aussi bien, comme un Multimap .

3
kaliatech

Si vous avez ce tableau:

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

Tu peux le faire:

example.length;

= 2

example[0].length;

= 2

example[1].length;

= 2

example[0][1].length;

= 3

example[1][0].length;

= 4

2
Andy

C'était vraiment difficile de se rappeler que 

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

Essayons de comprendre pourquoi et comment nous pouvons résoudre ce problème lorsque nous rencontrons un problème de tableau. Dans le code ci-dessous, nous pouvons voir 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 et ceux-ci 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 considérer sa longueur. Dans ce cas, nous accédons à [1, 1, 1, 1] et donc au nombre de lignes = 4. Lorsque vous rencontrez un problème qui vous empêche de voir le tableau, vous pouvez visualiser le tableau sous forme de rectangle avec n X m dimensions et concluez que nous pouvons obtenir le nombre de lignes en accédant au premier tableau puis à sa longueur. L'autre (arr.length) est pour les colonnes. 

2
gocode

Essayez ce programme suivant pour tableau 2d en Java:

public class ArrayTwo2 {
    public static void main(String[] args) throws  IOException,NumberFormatException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        int[][] a;
        int sum=0;
        a=new int[3][2];
        System.out.println("Enter array with 5 elements");
        for(int i=0;i<a.length;i++)
        {
            for(int j=0;j<a[0].length;j++)
            {
            a[i][j]=Integer.parseInt(br.readLine());
            }
        }
        for(int i=0;i<a.length;i++)
        {
            for(int j=0;j<a[0].length;j++)
            {
            System.out.print(a[i][j]+"  ");
            sum=sum+a[i][j];
            }
        System.out.println();   
        //System.out.println("Array Sum: "+sum);
        sum=0;
        }
    }
}
1

.length = nombre de lignes/longueur de la colonne

[0] .length = nombre de colonnes/longueur de la ligne

0
asdfgghjkll
import Java.util.Arrays;

public class Main {

    public static void main(String[] args) 
    {

        double[][] test = { {100}, {200}, {300}, {400}, {500}, {600}, {700}, {800}, {900}, {1000}};

        int [][] removeRow = { {0}, {1}, {3}, {4}, };

        double[][] newTest = new double[test.length - removeRow.length][test[0].length];

        for (int i = 0, j = 0, k = 0; i < test.length; i++) {
            if (j < removeRow.length) {
                if (i == removeRow[j][0]) {
                    j++;
                    continue;
                }
            }
            newTest[k][0] = test[i][0];
            k++;
        }

        System.out.println(Arrays.deepToString(newTest));   
    }
}
0
RobynVG