用单个for循环打印二维数组

4

如何使用单个for循环在Java中打印2d数组?

我尝试搜索答案,但只找到了使用多个循环的解决方案。

示例数组:

[
    [1, 2, 3],
    [4, 5],
    [6, 7, 8],
    [9]
]

例子输出结果(精确的格式不重要):
1, 2, 3, 4, 5, 6, 7, 8, 9

使用单个for循环,而不是嵌套循环。


所以不要像这样写:

for (int i = 0; i < array.length; i++) {
    for (int j = 0; j < array[i].length; j++) {
        System.out.print(array[i][j] + " ");
    }
}
4个回答

10

用单个循环读取2D数组的原则:一个[H,W] 2D矩阵可以被计算为长度为HxW的1D矩阵。

在此基础上,解决方案可以是:

int[][] arr = {{1, 2, 3}, {4, 5, 8}, {5, 6, 7}};
int hight = arr.length;
int width = arr[0].length;
for (int i = 0; i < width * hight; i++) {
    int li = i / hight;
    int col = i % hight;
    System.out.print(arr[li][col]);
    if (col == width - 1) System.out.println();
}

输出:

123
458
567

2
如果您需要了解只使用一个循环的算法,可以尝试使用以下类似的算法:
public static void main(String[] args) {
    int[][] arr = {{1, 2}, {3, 4}};
    int currSubArrayNum = 0;
    for (int i = 0; currSubArrayNum < arr.length; i++) {
        System.out.println(arr[currSubArrayNum][i]);
        if (i == arr[currSubArrayNum].length - 1) {
            currSubArrayNum++;
            i = -1;
        }
    }
}

输出结果如下:

1
2
3
4

但如果你需要一个简单的解决方案来在你的程序中使用,只需使用Arrays.toString:

public static void main(String[] args) {
    int[][] arr = {{1, 2}, {3, 4}};
    for (int[] anArr : arr) {
        System.out.println(Arrays.toString(anArr));
    }
}

通过输出:

[1, 2]
[3, 4]

2
不确定 OP 是否需要,Arrays.toString 在底层循环。请注意,还有 Arrays.deepToString() 可以使用一行代码实现。 - Zabuzard

0

您可以定义 for语句 而不需要 增量 表达式,并将其控制转移到内部的 if语句,如下所示:

int[][] arr = {{1, 2, 3}, {4, 5}, {6, 7, 8}, {9}};

for (int i = 0, j = 0; i < arr.length; ) {
    if (arr[i] != null && j < arr[i].length) {
        System.out.print(arr[i][j] + ", ");
        j++;
    } else {
        j = 0;
        i++;
    }
}

输出:

1, 2, 3, 4, 5, 6, 7, 8, 9, 

0
创建行和列指针,并在它们到达边缘时更新。
Swift代码:
func singleLoopArrayTraversal(_ data: [[Int]]) {
    //Time complexity: O(n)

    if data.count == 0 {
        return
    }
    var row = 0
    var col = 0
    while row < data.count {
        print("data[\(row)][\(col)] : \(data[row][col])")
        if col == data[row].count - 1 {
            row += 1
            col = -1
        }
        col += 1
    }
}

singleLoopArrayTraversal([[1, 2], [3, 4], [5, 6]])

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