Macierze- wpisywanie z klawiatury, mnożenie, transponowanie.

0

Hej, za zadanie miałam:
Napisac program, ktory czyta z klawiatury wierszami 2-wym. tablice licz(macerzy). W pierwszym wierszu sa podane wymiary macierzy - liczba wierszy i kolumn. Program wyznacza macierz transponowana wczytanej macierzy oraz oblicza i wyswietla iloczyn tych macierzy

w bólu zrodziłam coś takiego, ale prowadzący powiedział, że mamy użyć(?) wywoływania wpisywania macierzy. Byłabym wdzięczna, gdyby ktoś pomógł "przerobić" mój kod tak, żeby był prawidłowy i wytłumaczyć o co konkretnie chodzi.

public class Macierz {
 
    private double[][] tablica;
       
    Macierz(double[][] m1) {
        this.tablica = m1;
    }
    public double[][] getTablice() {
        return tablica;
    }
    public void pomnoz(Macierz macierz) {
        double[][] macierzMnozona = macierz.getTablice();
        double[][] macierzPomnozona = new double[this.tablica.length][macierzMnozona[0].length];
        macierzPomnozona = this.wymnozTablice(this.tablica, macierzMnozona);
        this.tablica = macierzPomnozona;
    }
    public String toString() {
        String temp = "";
        for (int i = 0; i < this.tablica.length; i++) {
            temp += "|";
            for (int j = 0; j < this.tablica[0].length; j++) {
                temp += " " + this.tablica[i][j];
            }
            temp += " |\n";
 
        }
        return temp;
    }
    public void transponuj() {
        this.tablica = this.transponujTablice(this.tablica);
    }
    private double[][] transponujTablice(double[][] tablica) {
        double[][] macierzTransponowana = new double[tablica[0].length][tablica.length];
        for (int i = 0; i < tablica.length; i++) {
            for (int j = 0; j < tablica[0].length; j++) {
                macierzTransponowana[j][i] = tablica[i][j];
            }
        }
        return macierzTransponowana;
    }
    private double[][] wymnozTablice(double[][] tab1, double[][] tab2) {
        double[][] macierzPomnozona = new double[tab1.length][tab2[0].length];
        if (tab1[0].length == tab2.length) {
            for (int i = 0; i < tab1.length; i++) {//ilosc wierszy tab1
                for (int j = 0; j < tab2[0].length; j++) { //ilosc kolumn tab2
                    double temp = 0;
                    for (int w = 0; w < tab2.length; w++) { //ilosc wierszy tab2
                        temp += tab1[i][w] * tab2[w][j];
                    }
                  macierzPomnozona[i][j] = temp;
                }
            }
        } else {
            throw new RuntimeException("Podane tablice mają niewłasciwe wymiary");
        }
        return macierzPomnozona;
    }
   
    public void main()
    {
        Macierz macierz = new Macierz(tablica);
        System.out.println("macierz:\n" + macierz.toString());
        macierz.transponuj();
        System.out.println("macierz transponowana:\n" + macierz.toString());
        macierz.transponuj();
        Macierz macierzTransponowana = new Macierz(transponujTablice(tablica));
        macierz.pomnoz(macierzTransponowana);
        System.out.println("iloczyn macierzy:\n" + macierz.toString());
    }
} 
2
  1. Kodu nie uruchomisz - brakuje metody o sygnaturze
public static void main(String[] args)
  1. Nigdzie nie wczytujesz danych: rozmiarów i wyrazów macierzy.
    Można kod poprawić dopisując nową klasę TestMacierzy
 import java.util.*;
 public class TestMacierzy
 {
    private static int wiersze = 0;
    private static int kolumny = 0;
    private static double[][] tablica;
    public static void main(String[] args)
    {
        wczytajRozmiary();        
        tablica = new double[wiersze][kolumny];
        for(int w=0;w<wiersze;w++)
        {
            wczytajWiersz(w);
        }
        Macierz macierz = new Macierz(tablica);
        System.out.println("macierz:\n" + macierz.toString());
        macierz.transponuj();
        System.out.println("macierz transponowana:\n" + macierz.toString());
        Macierz macierzTransponowana = new Macierz(macierz.getTablica());
        macierz.transponuj();
        macierz.pomnoz(macierzTransponowana);
        System.out.println("iloczyn macierzy:\n" + macierz.toString());  
    }
    static void wczytajRozmiary()
    {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Ile wierszy i kolumn ");
        wiersze = scanner.nextInt();
        kolumny = scanner.nextInt();        
    }
    static void wczytajWiersz(int wiersz)
    {
        //...
    }    
}

W metodzie wczytajRozmiary należy dodać kontrolę czy użytkownik wpisuje liczby całkowite > 0, metodę wczytajWiersz napisz sama.
W klasie Macierz metoda main jest zbyteczna.

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