我需要为行和列获取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];
然后在尝试获取长度时代码将失败。是否有不同(更聪明)的方法来做到这一点?
答案 0 :(得分:137)
考虑
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提供固定值。
答案 1 :(得分:12)
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));
}
}
输出
[[], [0], [0, 0], [0, 0, 0], [0, 0, 0, 0]]
[[], [0], [0, 0], [0, 0, 0], [0, 0, 0, 0]]
数组test
和test2
(或多或少)相同。
答案 2 :(得分:5)
真的很难记住
int *result[3] = {0,0,0};
让我们理解为什么会这样,以及在遇到数组问题时如何解决。从下面的代码中,我们可以看到行= 4,列= 3:
int result[3] = {0,0,0};
int numberOfColumns = arr.length;
int numberOfRows = arr[0].length;
中有多个数组,可以垂直排列这些数组以获取列数。要获得行数,我们需要访问第一个数组并考虑其长度。在这种情况下,我们访问[1,1,1,1],因此行数=4。当遇到看不到数组的问题时,可以将数组可视化为矩形n X m维,并得出结论,我们可以通过访问第一个数组及其长度来获得行数。另一个( int[][] arr = { {1, 1, 1, 1},
{2, 2, 2, 2},
{3, 3, 3, 3} };
)用于列。
答案 3 :(得分:4)
Java允许您创建“不规则数组”,其中每个“行”具有不同的长度。如果你知道你有一个正方形数组,你可以使用你的代码修改来防止像这样的空数组:
if (row > 0) col = test[0].length;
答案 4 :(得分:3)
语言层面没有更简洁的方法,因为并非所有多维数组都是矩形的。有时需要锯齿状(不同的列长度)数组。
您可以轻松创建自己的类来抽象所需的功能。
如果您不仅限于数组,那么也许某些集合类也可以正常工作,例如Multimap。
答案 5 :(得分:3)
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
答案 6 :(得分:1)
在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;
}
}
}
答案 7 :(得分:0)
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));
}
}
答案 8 :(得分:0)
.length =行数/列长
[0] .length =列数/行长
答案 9 :(得分:0)
借助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
答案 10 :(得分:0)
也可以使用“ Arrays.toString(arr [x])” 来获得2d数组行的元素数量,或者2d / 3d元素的总数-array,使用“ Arrays.deepToString(arr)” 。它会给出一个字符串,该字符串包含数组中所有用逗号分隔的元素(行也用方括号限制)。 AND:主要思想是逗号总数比数组/数组行元素的总数少1!然后创建一个仅包含所有逗号的字符串(删除所有逗号)否则使用正则表达式),其长度+ 1将是我们需要的结果。 例子:
public static int getNumberOfElementsIn2DArray() {
int[][] arr = {
{1, 2, 3, 1, 452},
{2, 4, 5, 123, 1, 22},
{23, 45},
{1, 122, 33},
{99, 98, 97},
{6, 4, 1, 1, 2, 8, 9, 5}
};
String str0 = Arrays.deepToString(arr);
String str = str0.replaceAll("[^,]","");
return str.length() + 1;
}
它将返回“ 27”;
public static int getNumberOfElementsIn2DArrayRow() {
int[][] arr = {
{1, 2, 3, 1, 452},
{2, 4, 5, 123, 1, 22},
{23, 45},
{1, 122, 33},
{99, 98, 97},
{6, 4, 1, 1, 2, 8, 9, 5}
};
String str0 = Arrays.toString(arr[5]);
String str = str0.replaceAll("[^,]","");
return str.length() + 1;
}
它将返回“ 8”。
注意!如果多维数组是String或char数组,其中元素内容包含逗号:D
,则此方法将返回错误的结果答案 11 :(得分:0)
示例数组 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
olumn_Count = arr[0].length
答案 12 :(得分:-1)
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();
}
}