【问题标题】:Print a 2D array column by column逐列打印二维数组
【发布时间】:2016-07-26 01:56:48
【问题描述】:

这个非常基本的代码逐行打印我的二维数组。

public class scratchwork {
    public static void main(String[] args) throws InterruptedException {
        int[][] test = new int[3][4];

        for (int row = 0; row < 3; row++) {
            for (int col = 0; col < 4; col++) {
                System.out.print(test[row][col] = col);
            }

            Thread.sleep(500);
            System.out.println();
        }
    }
}

如何编辑循环以逐列打印数组?

编辑:只是想澄清输出是

0123

....

0123

....

0123

用点表示的不是实际的空白区域,而是半秒的睡眠时间。我要输出的是

0...1...2...3
0...1...2...3
0...1...2...3

所以我试图将这些列彼此分开半秒打印。

【问题讨论】:

  • 翻转 for 循环!列先循环,然后行循环作为内部。
  • 硬件。在一张纸上写下数组。标记索引。写出逐列迭代所需的索引。然后弄清楚如何设置循环。
  • 你要做的就是transpose网格、矩阵等......
  • 我尝试翻转 for 循环,但输出不是我需要的。当我说逐列时,我的意思是打印相同的数组,但从左到右打印,这就是为什么我有 Thread.sleep
  • 您期望什么样的输出,您的输入是什么样的?提供一些示例,以便我们了解您的要求。我们所看到的只是打印 2D 行的代码,所以答案是翻转它,但是如果您寻求特定的输出,那么您需要向我们提供一些示例,以便我们了解您的问题。

标签: java arrays multidimensional-array


【解决方案1】:

如果要在计时器上打印出每一列,则需要使用三个循环。

您需要清除每次迭代之前的控制台输出。如果您通过命令行执行程序,则以下代码在 Windows 中有效。当然,这是特定于平台的,但有很多有用的答案,在 Stack Overflow 和其他网站上可以帮助您清除控制台输出。

import java.io.IOException;

public class ThreadSleeper {
    public static final int TIMEOUT = 500;
    public static final int ROWS = 3, COLS = 4;
    static int[][] test = new int[ROWS][COLS];

    public static void main(String[] args) {
        // Populate values.
        for (int i = 0; i < ROWS * COLS; i++) {
            test[i / COLS][i % COLS] = i % COLS;
        }
        try {
            printColumns();
        } catch (InterruptedException | IOException e) {
            e.printStackTrace();
        }
    }

    public static void printColumns() throws InterruptedException, IOException {
        for (int counter = 0; counter < COLS; counter++) {
            clearConsole(); // Clearing previous text.
            System.out.printf("Iteration #%d%n", counter + 1);
            for (int row = 0; row < ROWS; row++) {
                for (int col = 0; col <= counter; col++) {
                    System.out.print(test[row][col] + "...");
                }
                System.out.println();
            }
            Thread.sleep(TIMEOUT);
        }
    }

    // http://stackoverflow.com/a/33379766/1762224
    protected static void clearConsole() throws IOException, InterruptedException {
        new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
    }
}

【讨论】:

    【解决方案2】:

    您只需要更改嵌套循环的顺序。如果您想一次打印它们的列,则列需要是最外层的循环变量。
    只需考虑每个外循环将执行多次内循环。

    【讨论】:

    • 我认为我不够具体而引起了一些误解。我的编辑说明了我最初的意思
    • 如果你想让 '...' 在 1234 之间移动,把它放在最里面的循环。现在它位于最外层循环中,因此它发生的频率较低。如果你想让它输出......每个计数,Thread.sleep(500);在 System.out.print(test[row][col] = col);您还需要检查循环变量是否不是最后一个,否则您将得到 0....1....2....3.... 而不是 0...1... 2...3
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 2015-02-05
    • 2015-02-03
    • 2018-12-02
    • 1970-01-01
    相关资源
    最近更新 更多