二维数组中元素的总数

4

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

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属性。
问题:有没有任何方法可以在不使用循环的情况下检索二维或多维矩阵中的元素数量?

由于在第一个数组中每个数组的大小可能不同,我认为你需要在这里使用循环。 - ThePerson
我认为Coda非常简洁。 - Ashot Karakhanyan
也许我在学习时漏掉了什么。 - aka
3个回答

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中使用数组就是这样。”

是的,这是一个好方法,可以递归地查看维度,我会记住的,谢谢。此外,我搜索了其他方法两天,但没有找到任何方法,但我明白为什么在Java的情况下实现这样的方法是不值得的。 - aka

1
没有。在Java中没有真正的二维数组概念(C#有),你所拥有的实际上是一个数组的数组。由于每个“内部”数组的长度可能不同,因此很难在没有循环的情况下完成。
循环真的是问题吗,还是你只是在寻找更多“内置”的解决方案?

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);

    }
}

如果输入数组只有1个数组呢?或者20个呢? - Robert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接