Java 逐列打印二维数组

Java 逐列打印二维数组,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,这段非常基本的代码逐行打印我的2D数组 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; co

这段非常基本的代码逐行打印我的2D数组

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

因此,我尝试将列彼此间隔半秒打印。

您只需更改嵌套循环的顺序即可。如果要一次打印列,则列必须是最外层的循环变量。

只需考虑内环在每个外循环上执行多次。

< P>如果你想打印出一个定时器上的每个列,那么你需要使用三个循环。 您需要为每个迭代清除以前的控制台输出。如果通过命令行执行程序,则以下代码在Windows中工作。当然,这是特定于平台的,但这里有许多有用的答案,关于堆栈溢出和其他站点,可以帮助您清除控制台输出

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();
    }
}
import java.io.IOException;
公营卧铺{
公共静态最终整数超时=500;
公共静态final int ROWS=3,COLS=4;
静态int[][]测试=新int[行][COLS];
公共静态void main(字符串[]args){
//填充值。
对于(int i=0;i对于(int col=0;col翻转for循环!首先是列循环,然后是行循环作为inner.HW。在一张纸上写下数组。标记索引。写出一列一列迭代需要的索引。然后找出如何设置循环。你想做的是网格、矩阵等…我尝试翻转for循环,但是输出不是我所需要的。当我说逐列打印时,我的意思是打印相同的数组,但从左到右打印,这就是我有线程的原因。睡眠您期望哪种输出,您的输入是什么样子的?提供一些示例,以便我们可以看到您的要求。我们看到的是打印二维行的代码,所以答案是翻转它,但是,如果您正在寻找特定的输出,那么您需要向我们提供一些示例,以便我们了解您的问题所在。我认为我的解释不够具体,导致了一些误解。我的编辑显示了我最初的意思,如果您希望“…”介于1234之间,请将其置于最内层循环中。现在它位于最外层循环中,因此发生的次数较少ften.如果您希望它输出…每个计数,Thread.sleep(500);在System.out.print下面(test[row][col]=col);您还需要检查循环变量不是最后一个,否则您将得到0…1…2…3…而不是0…1…2…3