在Java中获取二维数组的数组长度

我需要获取行和列的二维数组的长度。 我已经成功地完成了这个,使用下面的代码:

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

如预期那样打印出5,10。

现在看看这一行:

  int col = test[0].length; 

请注意,我实际上必须引用特定的行,才能获得列的长度。 对我来说,这似乎难以置信的难看。 另外,如果数组被定义为:

 test = new int[0][10]; 

然后,代码将尝试获取长度时失败。 有没有一种不同的(更聪明的)方式来做到这一点?

考虑

 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 } 

列长度​​每行不同。 如果你用一个固定大小的2D数组来支持一些数据,那么把getter提供给包装类中的固定值。

二维数组不是一个矩形网格。 或者更好的是,在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)); } } 

输出

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

数组testtest2 (或多或less)是相同的。

Java允许你创build“不规则的数组”,每个“行”的长度不同。 如果你知道你有一个正方形的数组,你可以使用你修改的代码来防止像这样的空数组:

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

在语言层面上没有更清晰的方法,因为并不是所有的multidimensional array都是矩形的。 有时锯齿(不同的列长度)数组是必要的。

你可以很容易地创build自己的类来抽象你需要的function。

如果你不限于数组,那么也许一些不同的集合类也可以工作,比如Multimap 。

在java中尝试下面的2d数组程序:

 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; } } } 
 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(); } } 

如果你有这个数组:

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

你可以这样做:

 example.length; 

= 2

 example[0].length; 

= 2

 example[1].length; 

= 2

 example[0][1].length; 

= 3

 example[1][0].length; 

= 4