Program mnożenie macierzy- wynikowa macierz ma złe wymiary

0

Cześć. Mam do napisania program na zaliczenie i wymyśliłam wyrównywanie kątów w trójkącie metodą parametryczną. Klasę wprowadzającą dowolne kąty mam i jest ok. Problem pojawia się przy mnożeniu macierzy AtPA, a właściwie AtA. Macierz A zawsze wygląda tak samo więc pozwoliłam sobie od razu uzupełnić macierz danymi. Ale przy pomnożeniu wychodzi mi macierz nie 2x2 tylko 3x2. Nie wiem, czy nie lepszym rozwiązaniem byłoby używanie tablic i uzupełnianie danymi przez odnoszenie się do konkretnego miejsca w tablicy. Działam w eclipse.
Proszę o wyrozumiałość to moje początki w Javie, a programista ze mnie żaden nie jest i nie będzie :)

Oto moje klasy Macierze - wywołująca i macierz- 'schowek' :

public class Macierze {
    public Macierze() {
    } 
    public static void main(String[] args){
 
    	macierz At = new macierz( new int[][] { {1,0,-1}, {0,1,-1} } );
        macierz A = new macierz( new int[][] { {1,0}, {0,1}, {-1,-1} } );
        macierz AtA = new macierz( new int[][] { {0,0}, {0,0} } );
        AtA=A.mnoz(At);
        System.out.println("Macierz At " +At.toString());
        System.out.println("Macierz A " +A.toString());
        System.out.println("Macierz AtPA " +AtA.toString());
 
 
}
}
 
public class macierz {
int tab[][];
int n;
int m;
int k;
 
public macierz mnoz(macierz AtA){
 
    macierz ata= new macierz(m,n);
 
    if(m==n){
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
                for(int h=0;h<k;h++)
                    ata.tab[i][j]+=tab[i][h]*tab[h][j];
    }
    return (ata);
 
}
 
public  macierz (int lw,int lk){ // konstruktor macierzy ata
    m=lw;
    n=lk;
    tab= new int [m][n];
               for(int i=0;i<m;i++)
                   for(int j=0;j<n;j++)
                        tab[i][j]=0;
}

public macierz (int a[][]){
    m=a.length;
    n=a[0].length;
    tab= new int[m][n];
    for(int i=0;i<m;i++)
        for(int j=0;j<n;j++)
            tab[i][j]=a[i][j];
    }
 
public String toString(){
    String a="";
    for(int i=0;i<m;i++){
        a+="\n";
        for(int j=0;j<n;j++)
            a+=tab[i][j]+"\t";}
    return(a);
}

}


0
public macierz mnoz(macierz AtA){
    macierz ata= new macierz(m,n);
...
}

czyli nowa macierz ma wymiary this.m na this.n, teraz co jest obiektem this? A.mnoz(At); czyli this = macierz A.
Macierz A ma wymiary 3x2, wiec macierz wynikowa ma taki własnie wymiar

btw.
ta linijka
macierz AtA = new macierz( new int[][] { {0,0}, {0,0} } );
jest bez sensu

Mnożenie też jest wykonane nieprawidłowo, nie używasz parametru wejściowego AtA, używasz tylko macierzy A.

public macierz mnoz(macierz AtA){
 
    macierz ata= new macierz(m,n);
 
    if(m==n){
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
                for(int h=0;h<k;h++)
                    ata.tab[i][j]+=tab[i][h]*tab[h][j];
    }
    return (ata);
 
}

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