繁体   English   中英

二维数组中的元素总数

[英]Total amount of elements in two dimensional array

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

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 功能,因为数组数组(数组(数组......))本身不是语言构造。 数组是,但数组的数组只是对象的数组(也可以是数组,但不一定是数组)。 符号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 中并没有真正的二维数组的概念(尽管 C# 有)——你所拥有的实际上是一个数组数组。 而且由于每个“内部”数组可以有不同的长度,没有循环就很难做到。

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

找出多少elemnts都在阵。

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

    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM