#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]