gpt4 book ai didi

java - 二维数组中的元素总数

转载 作者:行者123 更新时间:2023-11-30 08:26:16 26 4
gpt4 key购买 nike

最近我们学习了二维数组并解决了计算其中所有元素的平均值的任务。我的代码是这样的:

int a[][] = {
{1, 2, 3, 4, 5},
{6, 4, 2, 7},
{3, 6},
{2, 6, 8},
};

int sum=0, amount=0;
for (int[] row : a)
for (int val : row) {
sum += val; amount += 1;
}

return sum / (double) amount;

问题是我不喜欢我计算数组中元素数量的方式。我尝试使用 size(),它没有用,尝试使用 Array 和 Arrays 类,但两者都不能检索行数或某行中的元素数量,就像 .length 属性(property)。

问题:是否有任何方法在不使用循环的情况下从二维或多维矩阵中检索元素的数量?

最佳答案

不,Java 没有为此提供原生功能,因为数组的数组(数组的数组(数组的...))本身并不是一种语言构造。数组是,但数组数组只是对象数组(同样可以,但不一定是数组)。符号 Object[][] 只是为多维数组提供类型安全。

如果不循环就无法计算这个问题,但是您可以使用反射和递归来解决任意维度数组的问题。


一个通用的解决方案,性能不是问题,它使用递归和 java.lang.reflect.Array 计算任意维数组的所有非数组元素。可能看起来像这样:

public static int size(Object object) {
if (!object.getClass().isArray()) {
return 1;
}

int size = 0;
for (int i = 0; i < Array.getLength(object); i++) {
size += size(Array.get(object, i));
}
return size;
}

你可以用任何对象调用这个函数:

int[][] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};


Object[] array = {
"1",
new String[]{
"2", "3", "4"
},
new int[][] {
{ 5 },
{ 6, 7 },
{ 8, 9, 10 }
}
};


String literal = "literal";

System.out.println(size(matrix));
System.out.println(size(array));
System.out.println(size(literal));

然后会输出

9
10
1

这不是一个非常优雅的解决方案,但作为polygenelubricants说:

It's going to be very repetitive (but even java.util.Arrays is very repetitive), but that's the way it is in Java with arrays.

关于java - 二维数组中的元素总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21653883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com