最近我们学习了二维数组并解决了计算其中所有元素平均值的任务。我的代码就像:
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一样属性。
问题 有什么方法在不使用循环的情况下从两个或更多维矩阵中检索元素数量?
答案 0 :(得分:2)
没有本机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所说:
这将是非常重复的(但即使
java.util.Arrays
也是非常重复的),但这就是Java中使用数组的方式。
答案 1 :(得分:1)
不。 Java中没有二维数组的概念(C#有它) - 你所拥有的实际上是一个数组数组。而且由于每个“内部”数组可以有不同的长度,因此很难没有循环。
循环真的是一个问题,还是只是在寻找更“内置”的解决方案?
答案 2 :(得分:0)
找出数组中有多少个元素。
public class MultiArrayEx3 {
public static void main(String[]args) {
int[][] myNumbers = { {1,2,3,4,5}, {6,7,8,9} };
int x = myNumbers[0].length;
int y = myNumbers[1].length;
int z = x + y;
System.out.println(z);
}
}