二维数组中元素的总数

问题描述 投票:2回答:3

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

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属性那样检索行数或某一行中的元素数。

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

java java-7
3个回答
2
投票
不,没有为此的本机Java功能,因为(数组(数组)的数组)本身不是语言构造。数组是,但是数组的数组只是对象的数组(可以也是,但不一定是数组)。符号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在带有数组的情况下的方式。

1
投票
不。 Java中实际上没有2D数组的概念(尽管C#拥有)-实际上,您拥有的是数组数组。而且,由于每个“内部”数组的长度都可以不同,因此没有循环就很难做到。

循环确实是一个问题,还是您只是在寻找一个更“内置”的解决方案?


0
投票
找出数组中有多少个元素。

java.util.Arrays

© www.soinside.com 2019 - 2024. All rights reserved.