Пытаюсь найти разницу между двумя матрицами 2 * 2. У меня есть этот код, но он выдает недопустимые значения

#java

#java

Вопрос:

 {
    Scanner keyboard = new Scanner(System.in);
    
    System.out.println("Welcome to matrix subtracting!");
    
    System.out.println("Enter the number of rows in matrix 1:");
    
    int mat1_rows = keyboard.nextInt();
    
    System.out.println("Enter the number of columns in matrix 1:");
    
    int mat1_cols = keyboard.nextInt();
    
    System.out.println("Enter the number of rows of matrix 2:");
    
    int mat2_rows = keyboard.nextInt();
    
    if(mat1_cols != mat2_rows) 
    {
        System.out.println("Dimension mismatch! Cannot subtract these matrices!");
        
        System.exit(0);
    }
    
    System.out.println("Enter the number of columns of matrix 2:");
    
    int mat2_cols = keyboard.nextInt();
    
    int[][] matrix1 = new int[mat1_rows][mat1_cols];
    int[][] matrix2 = new int[mat2_rows][mat2_cols];

    
    for(int i = 0; i < mat1_rows; i  )
    {
        for(int j = 0; j < mat1_cols; j  )
        {
            System.out.println("Enter the matrix1 value at (" i ", " j "):");
            
            matrix1[i][j] = keyboard.nextInt();
            
        }
    }
    
    //populate matrix2 with values
    
    for(int i = 0; i < mat2_rows; i  )
    {
        for(int j = 0; j < mat2_cols; j  )
        {
            System.out.println("Enter the matrix2 value at (" i ", " j "):");
            
            matrix2[i][j] = keyboard.nextInt();
        }
    }
    
    int sum = 0;
    
    int[][] differenceMatrix = new int[mat1_rows][mat2_cols];
    
    for(int i = 0; i < mat1_rows; i  )
    {
        for(int j = 0; j < mat2_cols; j  )
        {
            for(int k = 0; k < mat1_cols; k  )
            {
                sum = matrix1[i][k] - matrix2[k][j];
            }
            
            differenceMatrix[i][j]= sum;
            sum = 0;
        }
    }
    
    //print the difference matrix
    
    for(int i = 0; i < mat1_rows; i  )
    {
        for(int j = 0; j < mat2_cols; j  )
        {
            System.out.print(differenceMatrix[i][j] "t");
        }
        
        System.out.println();
    }
}
  

}

Когда я применяю этот код, я могу сохранить все мои значения матрицы в нужное мне количество столбцов и строк. Но когда я запускаю код, вычитание выполняется неправильно и не соответствует истинной разнице. Есть предложения? Например, если бы я ввел 15 как (0,0), 25 как (0,1), 2 как (1,0) и 16 как (1,1) для моей первой матрицы и вычел ее с другой матрицей, содержащей 2 как (0,0), 5 как (0,1), 15 как (1,0) и2 как (1,1) вывод программы будет = [13, 20, -13, 14] ( в порядке чтения слева направо).

Комментарии:

1. я пробовал это, но он также выдавал случайные значения и отдалял меня от истинной разницы, поэтому я удалил его

Ответ №1:

Кажется, что вычитание двух матриц вычисляется как:

Diffi,j = M1i,j — M2i,j

то есть цикл третьего уровня не требуется, и метод может быть реализован так же просто, как:

 public static int[][] diffMatrix(int[][] m1, int[][] m2) {
    // m1.cols == m2.rows
    int[][] res = new int[m1.length][m2.length];
    
    for(int i = 0; i < m1.length; i  ) {
        for(int j = 0; j < m2.length; j  ) {
            res[i][j]= m1[i][j] - m2[i][j];
        }
    }
    return res;
}
  

Тестирование этого метода:

 int[][] m1  = {
    {15, 25},
    {2, 16}
};

int[][] m2 = {
    {2, 5},
    {15, 2}
};

int[][] diff = diffMatrix(m1, m2);

for(int[] row : diff) {
    System.out.println(Arrays.toString(row));
}
  

выводит:

 [13, 20]
[-13, 14]