Java: формат печати с двумя массивами в одну строку и разной длины - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу напечатать красивую таблицу на мою консоль с содержимым двух массивов, которые я дал.Оба массива являются списками массивов и могут иметь разную длину.Кроме того, внутри обоих ArrayLists есть массивы, имеющие длину 3.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я хочу, чтобы оба значения каждого ArrayLists были в одной строке.Например:

EAN   STOCK   CAPACITY  |  EAN   STOCK   CAPACITY
 10       3          3  |   10       2         4
 11       1          6  |   11       4         5
 12       5          7  |   12       6         9
 13       7          9  |   13       3         5
 14       4          7  |   14       0         4
 15       0          7  |   
 16       0          2  |   

С левой стороны вы можете увидеть один ArrayList с содержащимися массивами, а с правой стороны другой ArrayList с содержащимися массивами.

Однако я не знаю, как перебирать оба массива при выводе значений обоих в одну строку.Особенно, когда размер обоих списков ArrayList не совпадает ..

Пока это мой код ... Я не знаю, как это реализовать

private void printDrinks(ArrayList<int[]> storageRoom, ArrayList<int[]> saleRoom){
        System.out.format("%10s %10s %10s %40s %10s %10s %10s", "EAN", "STOCK", "CAPACITY", "|", "EAN", "STOCK", "CAPACITY"); System.out.println();
        String row = "";

        for (int i = 0; i < storageRoom.size(); i++){
            row += String.format("%10s %10s %10s %10s", storageRoom.get(i)[0], storageRoom.get(i)[1], storageRoom.get(i)[2]);
        }

        for (int i = 0; i < saleRoom.size(); i++){
            row += String.format("%10s %10s %10s %10s", saleRoom.get(i)[0], saleRoom.get(i)[1], saleRoom.get(i)[2]);
        }

        System.out.println(row);
    }

Можете ли вы, ребята, датьмне подсказка или помочь мне?С уважением и спасибо!

1 Ответ

0 голосов
/ 03 декабря 2018

Сначала найдите общее количество строк для печати, затем зациклите это много раз.Печатать пробелы (слева) или ничего (справа), если текущая строка превышает размер списка.

private static void printDrinks(List<int[]> storageRoom, List<int[]> saleRoom){
    int rows = Math.max(storageRoom.size(), saleRoom.size());
    System.out.println("EAN   STOCK   CAPACITY  |  EAN   STOCK   CAPACITY");
    for (int i = 0; i < rows; i++) {
        if (i < storageRoom.size())
            System.out.printf("%3d %7d %10d  |", storageRoom.get(i)[0], storageRoom.get(i)[1], storageRoom.get(i)[2]);
        else
            System.out.printf("%25s", "|");
        if (i < saleRoom.size())
            System.out.printf("  %3d %7d %10d", saleRoom.get(i)[0], saleRoom.get(i)[1], saleRoom.get(i)[2]);
        System.out.println();
    }
}

Тесты

printDrinks(Arrays.asList(new int[][] {{10,3,3},{11,1,6},{12,5,7},{13,7,9},{14,4,7},{15,0,7},{16,0,2}}),
            Arrays.asList(new int[][] {{10,2,4},{11,4,5},{12,6,9},{13,3,5},{14,0,4}}));
printDrinks(Arrays.asList(new int[][] {{10,2,4},{11,4,5},{12,6,9},{13,3,5},{14,0,4}}),
            Arrays.asList(new int[][] {{10,3,3},{11,1,6},{12,5,7},{13,7,9},{14,4,7},{15,0,7},{16,0,2}}));

Выходы

EAN   STOCK   CAPACITY  |  EAN   STOCK   CAPACITY
 10       3          3  |   10       2          4
 11       1          6  |   11       4          5
 12       5          7  |   12       6          9
 13       7          9  |   13       3          5
 14       4          7  |   14       0          4
 15       0          7  |
 16       0          2  |
EAN   STOCK   CAPACITY  |  EAN   STOCK   CAPACITY
 10       2          4  |   10       3          3
 11       4          5  |   11       1          6
 12       6          9  |   12       5          7
 13       3          5  |   13       7          9
 14       0          4  |   14       4          7
                        |   15       0          7
                        |   16       0          2
...