在Java中获取2D数组的数组长度

use*_*209 109 java arrays multidimensional-array

我需要获得行和列的2D数组的长度.我已成功完成此操作,使用以下代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

按预期打印5,10.

现在来看看这一行:

  int col = test[0].length;
Run Code Online (Sandbox Code Playgroud)

请注意,我实际上必须引用一个特定的行,以获得列长度.对我来说,这看起来非常难看.另外,如果数组定义为:

test = new int[0][10];
Run Code Online (Sandbox Code Playgroud)

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

NG.*_*NG. 156

考虑

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
}
Run Code Online (Sandbox Code Playgroud)

列长度​​每行不同.如果您使用固定大小的2D数组支持某些数据,则在包装类中为getter提供固定值.

  • 根据JLS 10.6和15.10,花括号部分只是一个数组初始化器,而以new开头的整个部分是一个数组创建表达式. (8认同)

Ish*_*tar 13

2D阵列不是矩形网格.或者更好的是,Java中没有2D数组这样的东西.

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));
  }
}
Run Code Online (Sandbox Code Playgroud)

输出

[[], [0], [0, 0], [0, 0, 0], [0, 0, 0, 0]]
[[], [0], [0, 0], [0, 0, 0], [0, 0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)

数组testtest2(或多或少)相同.


小智 7

真的很难记住

    int numberOfColumns = arr.length;
    int numberOfRows = arr[0].length;
Run Code Online (Sandbox Code Playgroud)

让我们了解为什么会这样,以及在遇到数组问题时如何解决。从下面的代码中,我们可以看到行= 4,列= 3:

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

                    {2, 2, 2, 2}, 

                    {3, 3, 3, 3} };
Run Code Online (Sandbox Code Playgroud)

arr有多个数组,这些数组可以垂直排列以获取列数。要获得行数,我们需要访问第一个数组并考虑其长度。在这种情况下,我们访问[1,1,1,1],因此,行数=4。当遇到看不到数组的问题时,可以将数组可视化为矩形n X m维,并得出结论,我们可以通过访问第一个数组及其长度来获得行数。另一个(arr.length)用于列。

  • 你有这个倒退。“在这种情况下,我们访问[1,1,1,1],因此行数=4。” 实际上,这意味着有4列。 (3认同)

rob*_*x44 5

Java 允许您创建“参差不齐的数组”,其中每个“行”具有不同的长度。如果你知道你有一个方形数组,你可以使用修改过的代码来防止像这样的空数组:

if (row > 0) col = test[0].length;
Run Code Online (Sandbox Code Playgroud)


小智 5

如果你有这个数组:

String [][] example = {{{"Please!", "Thanks"}, {"Hello!", "Hey", "Hi!"}},
                       {{"Why?", "Where?", "When?", "Who?"}, {"Yes!"}}};
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

example.length;
Run Code Online (Sandbox Code Playgroud)

= 2

example[0].length;
Run Code Online (Sandbox Code Playgroud)

= 2

example[1].length;
Run Code Online (Sandbox Code Playgroud)

= 2

example[0][1].length;
Run Code Online (Sandbox Code Playgroud)

= 3

example[1][0].length;
Run Code Online (Sandbox Code Playgroud)

= 4