Форматирование матриц для чтения слева направо

1

Мне нужно, чтобы мои матрицы выглядели точно так.

 Here are the two matrices, and the result when added: 
    2   2   7   4        3   4   3   3        5   6  10   7
    4   4   8   8        6   8   5   5       10  12  13  13
    1   9   3   7        6   8   6   9        7  17   9  16
    2   3   2   9   +    4   4   7   1   =    6   7   9  10
    2   9   1   1        9   8   2   5       11  17   3   6
    6   1   8   4        4   8   2   2       10   9  10   6

Каждый номер должен использовать 4 позиции на выходе, а + и = должен находиться в средней строке, но я не могу получить знаки + и = для меньших массивов. Моя проблема может быть с моими операциями if (i == 3 && j == 3). Мой код для этой части выглядит следующим образом.

   public static void printResult(int [][]array1, int [][]array2, int[][]sum, char arithmetic)
{
    // Declares 2-dimensional array the same size as one in parameters
    int [][]arraySum = new int [array1.length][array1[0].length];

    // Arithmetic characters to be printed when asked for
    String add = "+";
    String subtract = "-";
    String multiply = "*";
    String divide = "/";
    String remainder = "%";
    String equals = "=";

    // If arithmetic is addition to print matrices and add them to show result
    if (arithmetic == '+') {
        // Text for two matrices when added
        System.out.print("Here are the two matrices, and the result when added:\n");

        // For loop to print array1 + array2 = sum with format
        for (int i = 0; i < arraySum.length; i++) {
            // For loop to print out array 1 and add string
            for (int j = 0; j < arraySum[i].length; j++) {
                System.out.printf("%3s", array1[i][j] + " ");     
                if (i == 3 && j == 3) {
                    System.out.printf("%2s", add);
                }
            }
            System.out.print("\t");

            // For loop to print out array2 and equals string
            for (int k = 0; k < arraySum[i].length; k++) {
                System.out.printf("%3s", array2[i][k] + " ");
                if (i == 3 && k == 3) {
                    System.out.printf("%2s", equals);
                }
            }
            System.out.print("\t");

            // For loop to print out sum of array1 + array2
            for (int l = 0; l < arraySum[i].length; l++) {
                System.out.printf("%3s", sum[i][l] + " ");
            }
            System.out.print("\n");
        }
    }
    else if (arithmetic == '-') {
    }
    else if (arithmetic == '*') {
    }
    else if (arithmetic == '/') {
    }
    else if (arithmetic == '%') {
    }
}

Пример того, что я получаю для массивов 3x3. (должен печатать + или =).

5  3  5      6  7  4    11 10  9
8  2  9      1  5  5     9  7 14
9  7  3      2  5  1    11 12  4
  • 0
    Подсказка: в матрице 3x3 i и j будут работать между 0 и 2 . Ни один никогда не будет 3 . Кроме того, 3 не половина 3 . Вы должны рассчитать положение операторов на основе размеров матрицы, а не константы.
  • 0
    Я не совсем понимаю, что вы имеете в виду. Ваша текущая проблема заключается в том, что символы + и = не печатаются в нужном месте? Или они вообще не печатаются? Кроме того, почему вы сравниваете, если переменные (i, j, k) для печати равны 3, а не половина высоты матрицы?
Показать ещё 1 комментарий
Теги:
matrix
bluej

4 ответа

1
Лучший ответ

Попробуйте, if (i == arraySum.length/2 && j == arraySum[i].length-1).

  • 0
    Я получил + и = в нужных местах сейчас, но если бы вы узнали, почему мое форматирование все еще выключено, я пытаюсь привести числа в соответствие с формулировкой.
  • 1
    Да, возможно, это потому, что вам нужно поместить пробелы в другие строки, соответствующие месту, где будет оператор. Самый простой способ исправить это, if (i == arraySum.length/2 && j == arraySum[i].length-1) print operator; if (i == arraySum.length/2 && j!=arraySum[i].length-1) print corresponding number of spaces; , Вы можете сделать это более элегантно, используя соответствующие вложенные операторы if / if / else.
1

i и j никогда не 3, если ваша матрица 3x3. Если вы хотите + и = посередине, напишите что-нибудь вроде этого:

if (i == arraySum.length/2 && j == arraySum[i].length - 1)

0

Замените if (i == 3 && j == 3) { с if (i == (array1/2) && j == (array1/2)) {

0

Ваша проблема в том, что в цикле for вы добавляете знак добавления и знак равенства в 4-й строке (0,1,2,3). Когда у вас всего три строки, они не будут печататься. Что вы можете сделать, чтобы сделать это посередине, это примерно так:

for (int i = 0; i < arraySum.length; i++) {
    // For loop to print out array 1 and add string
    for (int j = 0; j < arraySum[i].length + 1; j++) {
        System.out.printf("%3s", array1[i][j] + " ");     
        if (i == Math.ceil(arraySum.length/2) && j == arraySum.length) {
            System.out.printf("%2s", add);
        }
    }

Он будет печатать знак в середине (высоте) и в конце (по длине) массива. Чтобы быть осторожным, он также использует функцию потолка для округления до следующего целого.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню