如何通过一个循环运行二维数组?

use*_*096 1 java loops for-loop 2d matrix

我想知道是否可以只用一个循环而不是两个循环来编写这个东西?

for (int row = 0; row < matrix.length; row++) {
        for (int col = 0; col < matrix[0].length; col++) {
            if ((row + col) % 2 == 0) {
                System.out.print(matrix[row][col] + ", ");

                sum += matrix[row][col];
            }
        }

        System.out.println("with a sum of " + sum);
    }
Run Code Online (Sandbox Code Playgroud)

实际上,只是忽略了循环的主体。这是完全不相关的,无论如何我都不知道为什么要包含它。for我的问题是如何以某种方式组合两个循环。

如果可能,请保持简单。谢谢!

Pau*_*aul 5

您可以,尽管效率不高:

for(int i = 0 ; i < matrix.length * matrix[0].length ; i++)
     sum += matrix[i % matrix.length][i / matrix.length];
Run Code Online (Sandbox Code Playgroud)

基本思想是利用我们知道数组(matrix.length)每个“行”的长度的事实,将每个索引映射到2d数字空间中的值。我们可以组成一个单一的指标,用来唯一标识两个指标matrix[x][y],通过z = x + y * matrix.length。相反的是:

x = z % matrix.length
y = z / matrix.length
Run Code Online (Sandbox Code Playgroud)

这种描述将是完整的,例如,每个z[0 , matrix.length * matrix[0].length)会准确识别一对指数的,因此,我们可以在这里使用它。