用 Java 获取2D 数组的数组长度

我需要得到行和列的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);
}
}

正如预期的那样,打印出了5到10张。

现在看看这条线:

  int col = test[0].length;

注意,我实际上必须引用一个特定的行,才能得到列的长度。对我来说,这看起来难以置信的丑陋。此外,如果数组定义为:

test = new int[0][10];

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

712592 次浏览

考虑一下

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 允许您创建“不规则数组”,其中每个“行”有不同的长度。如果你知道你有一个正方形数组,你可以使用你修改过的代码来保护一个空数组,如下所示:

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

在语言级别没有更清晰的方法,因为并非所有的多维数组都是矩形的。有时,有必要使用参差不齐(不同列长度)的数组。

您可以轻松地创建自己的类来抽象所需的功能。

如果不局限于数组,那么也许某些不同的集合类也可以工作,比如 多重地图

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

输出

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

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

在 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

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

真的很难记起来

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

让我们来理解一下为什么会这样,以及当我们遇到数组问题时如何解决这个问题。从下面的代码中,我们可以看到 rows = 4和 column = 3:

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


{2, 2, 2, 2},


{3, 3, 3, 3} };

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

. length = 行数/列长度

[0] . length = 列数/行长

使用 Java 8,允许你做一些像下面这样更优雅的事情:

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


int length = Arrays.stream(array).max(Comparator.comparingInt(ArrayUtils::getLength)).get().length

示例数组1:

int arr[][] = { { 1, 3, 1, 5 },
{ 2, 2, 4, 1 },
{ 5, 0, 2, 3 },
{ 0, 6, 1, 2 } };

示例数组2:

int arr[][] = { { 1, 3, 1 },
{ 2, 2, 4 },
{ 5, 0, 2 },
{ 0, 6, 1 } };

下面的函数适用于任何对称和非对称阵列矩阵


row_Count = arr.length
column_Count = arr[0].length


int rows=arr.length; //For knowing No of rows


int cols=arr[0].length; //For Knowing No of columns

运行此代码... 并理解..。

public class Store2darrays {


public static void main(String args[]) {
int[]arr={1,2,3,4};
System.out.println(arr.length);
int[][] arr2d=\{\{1,2,3,4},{5,6,7,8},{9,10,11,12}};
System.out.println(arr2d.length);
System.out.println(arr2d);
System.out.println(arr2d[0]);
System.out.println(arr2d[1]);
System.out.println(arr2d.length);
System.out.println(arr2d[0].length); }
}