Распечатать таблицу в cmd в java - PullRequest
1 голос
/ 21 октября 2010

У меня есть следующая матрица

 1 2 3 4 5 6
 2 3 4 5 6 1
 3 4 5 6 1 2
 4 5 6 1 2 3
 5 6 1 2 3 4
 6 1 2 3 4 5

... и я хочу, чтобы она была в таблице

 | 1 2 3 4 5 6
---------------
1| 1 2 3 4 5 6
2| 2 3 4 5 6 1
3| 3 4 5 6 1 2
4| 4 5 6 1 2 3
5| 5 6 1 2 3 4
6| 6 1 2 3 4 5

Имея n элементов, можно динамически печатать такую ​​таблицу?

    public static void main ( String [ ] args ) {
        int n = Integer.parseInt(args[0]);
        for(int w = 1; w <= n; w++){
            System.out.println("");
            for(int p = w; p <= n + w - 1; p++){
                System.out.print((p-1)%n+1 + " ");
            }           
        }
    }

Ответы [ 4 ]

1 голос
/ 21 октября 2010

Зависит от массива, при условии, что вы заранее знаете размер массива. В Java массивы могут быть перенастроены, иначе подмассивы не обязательно должны быть того же размера, что и в виду:

Для теста:

public static void main(String[] args) {
    System.out.println(toTableString(new int[][] { { 1, 2, 3, 4, 5, 6 },
            { 2, 3, 4, 5, 6, 1 }, { 3, 4, 5, 6, 1, 2 },
            { 4, 5, 6, 1, 2, 3 }, { 5, 6, 1, 2, 3, 4 },
            { 6, 1, 2, 3, 4, 5 } }));
    System.out.println();
    System.out.println(toTableString(new int[][] { { 1 }, { 2, 3 },
            { 3, 4, 5 }, { 4, 5, 6, 1 }, { 5, 6, 1, 2, 3 },
            { 6, 1, 2, 3, 4, 5 } }));
    System.out.println();
    System.out.println(toTableString(new int[][] { { 1 }, { 20, 300 },
            { 3000, 40000, 50000 }}));
}

Выход:

 | 0 1 2 3 4 5 
——————————————
0| 1 2 3 4 5 6 
1| 2 3 4 5 6 1 
2| 3 4 5 6 1 2 
3| 4 5 6 1 2 3 
4| 5 6 1 2 3 4 
5| 6 1 2 3 4 5 

 | 0 1 2 3 4 5 
——————————————
0| 1 
1| 2 3 
2| 3 4 5 
3| 4 5 6 1 
4| 5 6 1 2 3 
5| 6 1 2 3 4 5 

     | 00000 00001 00002 
————————————————————————
00000| 00001 
00001| 00020 00300 
00002| 03000 40000 50000 

Запустить онлайн: ссылка

1 голос
/ 21 октября 2010

Crude, но должно работать.

 //This method adds required number spaces for alignment.
 private static String formatString(String s, int in) {
        return String.format("%1$-" + (in + 1) + "s", s);
    }

    public static void main(String[] args) {    

        int n = Integer.parseInt(args[0]);          
        int in = args[0].length();
        System.out.print(formatString(" ", in));
        System.out.print("| ");

        for (int w = 1; w <= n; w++) {              
            System.out.print(formatString(w + "", in));
        }
        System.out.println("");
        for (int w = 1; w <= n + 2; w++) {
            System.out.print(formatString("-", in));
        }

        for (int w = 1; w <= n; w++) {
            System.out.println("");
            System.out.print(formatString((w + ""), in));
            System.out.print("| ");
            for (int p = w; p <= n + w - 1; p++) {

                System.out.print(formatString(((p - 1) % n + 1) + "", in));
            }
        }

    }

EDIT: отредактировал код, чтобы учесть проблемы выравнивания.

1 голос
/ 21 октября 2010

Это может занять сколько угодно:

public static void main(String[] args) {
    int[][] matrix = {
        { 1, 2, 3, 4, 5, 6 },
        { 2, 3, 4, 5, 6, 1 },
        { 3, 4, 5, 6, 1, 2 },
        { 4, 5, 6, 11, 2, 3 },
        { 5, 116, 1, 2, 3, 4 },
        { 5, 116, 1, 2, 3, 4 },
        { 5, 116, 1, 2, 3, 4 },
        { 5, 116, 1, 2, 3, 4 },
        { 5, 223523526, 1, 2, 3, 4 },
        { 5, 116, 1, 2, 3, 4 },
        { 5, 116, 1, 2, 3, 4 },
        { 5, 116, 1, 2, 3, 4 },
        { 5, 116, 1, 2, 3, 4 },
        { 6, 1, 2, 3, 4, 5 }
    };

    //compute the maximum header width (the number of columns)
    int rows = matrix.length;
    int cols = rows > 0 ? matrix[0].length : 0;
    int maxRowHeaderWidth = Integer.toString(rows).length();

    int maxCellWidth = 1;
    //compute the maximum cell width
    for ( int[] row : matrix ) {
        for ( int cell : row ) {
            maxCellWidth = Math.max(Integer.toString(cell).length(), maxCellWidth);
        }
    }
    maxCellWidth = Math.max(maxCellWidth, Integer.toString(cols).length());

    StringBuilder patternBuilder = new StringBuilder();

    //the header
    for ( int i = 0; i < maxRowHeaderWidth; i++ ) {
        patternBuilder.append(' ');
    }
    patternBuilder.append('|');
    for ( int i = 0; i < cols; i++ ) {
        patternBuilder.append(String.format("%" + (maxCellWidth+1) + "d", i+1));
    }
    patternBuilder.append('\n');


    //the line of dashes
    int rowWidth = patternBuilder.length();
    for ( int i = 0; i < rowWidth; i++ ) {
        patternBuilder.append('-');
    }
    patternBuilder.append('\n');

    //each row
    for ( int i = 0; i < matrix.length; i++ ) {
        patternBuilder.append(String.format("%" + (maxRowHeaderWidth) + "d|", i+1));
        for ( Integer cell : matrix[i] ) {
            patternBuilder.append(String.format("%" + (maxCellWidth+1) + "d", cell));
        }
        patternBuilder.append('\n');
    }

    System.out.println(patternBuilder);
}

Размер каждой ячейки одинаков, независимо от длины числа в ячейке. Это может занять произвольное количество строк или столбцов.

0 голосов
/ 21 октября 2010

На вашем месте я бы посмотрел библиотеки типа OpenCSV . Хотя они не соответствуют вашим потребностям, они будут очень полезны.

Действительно, отображение вашей таблицы можно рассматривать как способ печати файла CSV. Как следствие, построение структуры, приспособленной к этому CSV-файлу, и печать ее в System.out может сделать работу с чистым макетом (хотя и абсолютно не оптимальным с точки зрения зависимостей).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...