最近,我们学习了二维数组,并解决了计算其中所有元素的平均值的任务。我的代码就像:
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属性那样检索行数或某一行中的元素数。
问题:是否有[[任何方式在不使用循环的情况下从二维或二维矩阵中检索元素数量?
Object[][]
仅提供多维数组的类型安全。没有方法,您可以不进行循环计算,但是可以对任意维数的数组使用反射和递归来解决它。
java.lang.reflect.Array
看起来像这样: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在带有数组的情况下的方式。
循环确实是一个问题,还是您只是在寻找一个更“内置”的解决方案?
java.util.Arrays