Obtenir la longueur de tableau D'un tableau 2D en Java

je dois obtenir la longueur d'un tableau 2D pour la ligne et la colonne. Je l'ai fait avec succès, 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);
    }
}

ça imprime 5, 10 comme prévu.

regardez maintenant cette ligne:

  int col = test[0].length;

Remarquez que j'ai fait référence à une ligne particulière, afin d'obtenir la longueur de la colonne. Pour moi, cela semble incroyablement laid. De plus, si le tableau a été défini comme:

test = new int[0][10];

alors le code échouerait en essayant d'obtenir la longueur. Est-il différent (plus intelligent) façon de le faire?

86
demandé sur robert_x44 2010-10-22 23:15:10

7 réponses

prendre en considération

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

diffère d'une rangée à l'autre. Si vous sauvegardez certaines données par un tableau 2D de taille fixe, alors fournissez getters aux valeurs fixes dans une classe de wrapper.

118
répondu NG. 2010-10-22 19:21:06

UN tableau 2D n'est pas une grille rectangulaire. Ou peut-être mieux, il n'y a 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 et test2 sont (plus ou moins) les mêmes.

11
répondu Ishtar 2010-10-22 19:35:02

Java vous permet de créer des "tableaux chiffrés" 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 ceci:

if (row > 0) col = test[0].length;
4
répondu robert_x44 2010-10-22 19:21:15

il n'y a pas de voie plus propre au niveau du langage parce que tous les tableaux multidimensionnels ne sont pas rectangulaires. Il est parfois nécessaire de recourir à des matrices dentelées (différentes longueurs de colonne).

vous pouvez facilement créer votre propre classe pour abstraire la fonctionnalité dont vous avez besoin.

si vous n'êtes pas limité aux tableaux, alors peut-être que certaines des différentes classes de collection fonctionneraient aussi bien, comme un Multimap .

3
répondu kaliatech 2010-10-22 19:23:36

essayez ce programme suivant pour le 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
répondu Pampanagouda Karmanchi 2017-01-11 06:51:50

si vous avez ce tableau:

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

vous pouvez faire ceci:

example.length;

= 2

example[0].length;

= 2

example[1].length;

= 2

example[0][1].length;

= 3

example[1][0].length;

= 4

1
répondu Andy 2017-10-03 15:15:32
public class Array_2D {
int arr[][];
public Array_2D() {
    Random r=new Random(10);
     arr = new int[5][10];
     for(int i=0;i<5;i++)
     {
         for(int j=0;j<10;j++)
         {
             arr[i][j]=(int)r.nextInt(10);
         }
     }
 }
  public void display()
  {
         for(int i=0;i<5;i++)

         {
             for(int j=0;j<10;j++)
             {
                 System.out.print(arr[i][j]+" "); 
             }
             System.out.println("");
         }
   }
     public static void main(String[] args) {
     Array_2D s=new Array_2D();
     s.display();
   }  
  }
-1
répondu peter 2017-04-20 13:00:46