mnożenie macierz razy macierz. PROBLEM

0

witam mam taki problem z mnożeniem macierzy przez macierz, czy ktoś mógłby mi powiedzieć co jest źle tym kodzie? ja siedzie już 4 godziny nad tym i nie wiem, wydaje m się że dobrze, a jednak nie. jestem początkujący w javie, więc pomoc jest mile widziana. cały program wygląda tak jak poniżej, a mój problem dotyczy void multiply(matrix a).
za każdą rade dziękuję

public class DwaDeTest1{
public static void main(String[] args){
int[][] arr = {{4,5,1},{1,7,6},{1,1,3}};
int[][] arr1 = {{1,1,4},{4,2,0},{2,2,7}};
int[][] arr2 = new int[3][3];
Matrix s = new Matrix(arr);
Matrix b = new Matrix(arr1);
Matrix w = new Matrix(arr);
System.out.println(s);
System.out.println(b);
//s.add(b);
//System.out.println(s);
w.multiply(b);
System.out.println(w);
//w.multiply(4);
//System.out.println(w);

}

}

class Matrix{
private int[][] matrix;
private int nrows;
private int ncolumns;
int i;
int j;

Matrix(int[][] a){
nrows = a.length;
ncolumns = a[0].length;
matrix = new int[nrows][ncolumns];
for(i = 0; i < nrows; i++){
for(j = 0; j < ncolumns; j++ ){
matrix[i][j] = a[i][j];
}
}
}

public String toString(){
String a = "";
for(i = 0; i < nrows; i++){
a = a + "\n";
for(j = 0; j < ncolumns; j++){
a = a + matrix[i][j] + "\t";
}
}
return a;
}

void add(Matrix a){
if (nrows == a.nrows && ncolumns == a.ncolumns){
System.out.println("\nadding two matrices:");
for(i = 0 ; i < nrows ; i++){
for(j = 0 ; j < ncolumns ; j++){
matrix[i][j] = matrix[i][j] + a.matrix[i][j];
}
}
}
else System.out.println("\nAdding impossible");
}

  void multiply(Matrix a){
  if (ncolumns == a.nrows){
     for(i = 0 ; i < nrows; i++){
        for(j = 0 ; j < a.ncolumns; j++){
           for(int k=0; k < ncolumns ; k++){
                   matrix[i][j] += matrix[i][k] * a.matrix[k][j];
               }
        }
     }
  }

}

void multiply (int d){
System.out.println("\nmultiplying by number:");
for(int i = 0 ; i < nrows; i++){
for(int j = 0 ; j < ncolumns; j++){
for(int k=0; k < 1 ; k++){
matrix[i][j] = d*matrix[i][j];
k++;
}
}
}
}
}

0

Spodziewasz się, że po wywołaniu w.multiply(b) w jest iloczynem dawnego w oraz b ? Twój kod tego nie daje. Powinieneś wpierw utworzyć macierz A odpowiedniego wymiaru zawierającą same zera, potem zrobić swoją pętlę

  A[i][j] += matrix[i][k] * a.matrix[k][j];

a na końcu przypisać matrix=A

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0