Erstes Programm: Matrizen Multiplikation

Orion789

Mitglied
Hallo, bin letzten Uni-bedingt von C auf Java umgesprungen und muss ein Programm schreiben in dem ich zwei Matrizen multipliziere und dann formatiert ausgeben muss. Vor allem habe ich Probleme mit den Klassen und dem definieren der Matrix. Hier ist das was ich bis jetzt habe:

Java:
//definiere Matrix A
double A[3][3] = null ;
int A[1][1] = 1 ;
int A[1][2] = 2 ;
int A[1][3] = 3 ;
int A[2][1] = 4 ;
int A[2][2] = 5 ;
int A[2][3] = 6 ;
int A[3][1] = 7 ;
int A[3][2] = 8 ;
int A[3][3] = 9 ;

//definiere Matrix B
double[2][3] B = null ;
int B[1][1] = 1 ;
int B[1][2] = 2 ;
int B[2][1] = 3 ;
int B[2][2] = 4 ;
int B[3][1] = 5 ;
int B[3][2] = 6 ;


public class Matrix {
    public static double[][] matMult(double[][] A, double[][] B) {
        double[][] result = null ; //Ergebnis Matrix wird definiert
        
        if( A[0].length != B.length) {
            return null ;
        } //Es wird geprüft ob Matrixmultiplikation möglich ist
        
        int linesA = A.length ;
        int columnsA = A[0].length ;
        int columnsB = B[0].length ;
        
        result = new double[linesA][columnsB] ; //Größe des Ergebnis wird definiert anhand Zeilenlänge A * Spaltenlänge B
        
        for( int i = 0 , i < linesA , i++) {
            for( int j = 0 , j < columnsB , j++ ) { //Wir laufen der Zeile i der Erebnismatrix entlang
                result[i][j] = 0 ;
                for( int k = 0 , k < columnsB , k++ ) { //Wir berechnen für jedes Feld[i][j] der Ergebnismatrix den Wert aus A und B
                    result[i][j] += A[i][k] * B[k][j] ;
                }
            }
        }
        
        return result ;
    }
    public static void main() {
        result = matMult( A , B ) ;
        for( int j = 0 , j < result[0].length , j++ ) {
            for( int i = 0 , i < result.length , i++ ) {
                System.out.printf("\n %t \t") ;
            }
        }
    }
}

Am Anfang erhalte ich bei jeder Zeile für das zuschreiben der Werte von A und B den error: class, interface, or enum expected. Es werden auch für meine for-Schleifen jede Menge errors angezeigt (z.B. expected ";" zwischen "k" und "< columnsB"). Mit dem Aufrufen der Matrizenwerte über
Java:
"result[i][j]"
zeigt es auch sehr viele Errors an. Ich weiß dass der Code sehr anfängerlich ist, aber das bin ich nunmal auch, ich habe echt Probleme die errors der Konsole zu interpretieren.
 

MoxxiManagarm

Top Contributor
Java:
//definiere Matrix A
double A[3][3] = null ;
int A[1][1] = 1 ;
int A[1][2] = 2 ;
int A[1][3] = 3 ;
int A[2][1] = 4 ;
int A[2][2] = 5 ;
int A[2][3] = 6 ;
int A[3][1] = 7 ;
int A[3][2] = 8 ;
int A[3][3] = 9 ;

//definiere Matrix B
double[2][3] B = null ;
int B[1][1] = 1 ;
int B[1][2] = 2 ;
int B[2][1] = 3 ;
int B[2][2] = 4 ;
int B[3][1] = 5 ;
int B[3][2] = 6 ;

Oh je ;-) ein primitiver Datentyp (int, double...) kann nicht null sein. Zudem Ist ein Array immer 0-basiert, ich sehe hier aber keine einzige 0 als Index.

Du willst eher sowas...

Java:
// eine Möglichkeit
double[][] A = new double[3][3] {
  {1, 2, 3},
  {4, 5, 6},
  {7, 8, 9}
};

// eine andere Möglichkeit
double[][] B = new double[3][3];
B[0][0] = 1;
// ...
B[2][2] = 9;

Kleiner Tipp, Stell dir ein Array wie ein Regal vor. Mit new double[3][3] baust du zuerst das Regal auf, in diesem Fall hast es 3x3 Fächer. Vorher kannst du nichts reinstellen.
 

Orion789

Mitglied
Danke, habe das schon mal geändert und auch die Matrix "result" richtig definiert, bei Matrix A und B zeigt es aber immer noch den "error: class, interface, or enum expected" an, ich habe auch schon überprüft ob ich zu viele geschweifte Klammern habe, aber es passt alles. Bei den For-Schleifen zeigt es immer noch mehrere Errors an. Eventuell habe ich da auch was falsch gemacht weil ich noch zu sehr an den Syntax von C gewöhnt bin.
 

Robat

Top Contributor
Du deklarierst sowohl A als auch B außerhalb einer Klasse. Schieb die Deklaration unter die Zeile public class Matrix {
Eventuell habe ich da auch was falsch gemacht weil ich noch zu sehr an den Syntax von C gewöhnt bin.
In c sieht eine for - Schleife doch aus wie in Java?
Java:
for(int i = 0; i < linesA; i++) {
   ...
}
 

Orion789

Mitglied
Ok ich habe nochmal etwas rumversucht, jetzt kriege ich nur noch Errors bei der Definition der Matrizen.

Java:
    //steht alles innerhalb einer Klasse
    //definiere Matrix A
    double[][] A = new double[3][3] ;
    A[0][0] = 1;
    A[0][1] = 2;
    A[0][2] = 3;
    A[1][0] = 4;
    A[1][1] = 5;
    A[1][2] = 6;
    A[2][0] = 7;
    A[2][1] = 8;
    A[2][2] = 9;


    //definiere Matrix B
    double[][] B = new double[2][3] ;
    B[1][1] = 1;
    B[1][2] = 2;
    B[2][1] = 3;
    B[2][2] = 4;
    B[3][1] = 5;
    B[3][2] = 6;

Jetzt kriege ich aber den error

Code:
Matrix.java:5: error: ']' expected
        A[0][0] = 1;
          ^
Matrix.java:5: error: ';' expected
        A[0][0] = 1;
           ^
Matrix.java:5: error: illegal start of type
        A[0][0] = 1;
            ^
Matrix.java:5: error: <identifier> expected
        A[0][0] = 1;
             ^
Matrix.java:5: error: ';' expected
        A[0][0] = 1;
              ^
Matrix.java:5: error: illegal start of type
        A[0][0] = 1;
                ^
Matrix.java:5: error: <identifier> expected
        A[0][0] = 1;
und das für jede Zeile in welcher ich versuche den Feldern der Matrizen einen Wert zuzuschreiben.
In c sieht eine for - Schleife doch aus wie in Java?
Java:
for(int i = 0; i < linesA; i++) {
   ...
}
Ja, das war ein dummer Fehler meinerseits, habe anstatt vom Semikolon Kommata benutzt.
 

JCODA

Top Contributor
Die Deklaration und Initialisierung kannst Du innerhalb der Klasse machen.
Die Zuweisung einzelner Elemente muss aber in einer Methode stehen.
Ich empfehle die Matrizen in der main-methode zu definieren. Hierbei würde ich die erste Variante von #2 benutzen.
 

Orion789

Mitglied
Ok, ich bin jetzt sehr nahe dran es funktioniert:
Java:
public class Matrix {
    public static double[][] matMult(double[][] A, double[][] B) {
        
        int linesA = A.length ;
        int columnsA = A[0].length ;
        int columnsB = B[0].length ;
        
        double[][] result = new double[linesA][columnsB] ; //Größe des Ergebnis wird definiert anhand Zeilenlänge A * Spaltenlänge B
        
        if( A[0].length != B.length) {
            return null ;
        } //Es wird geprüft ob Matrixmultiplikation möglich ist
        
        for( int i = 0 ; i < linesA ; i++ ) {
            for( int j = 0 ; j < columnsB ; j++ ) { //Wir laufen der Zeile i der Erebnismatrix entlang
                result[i][j] = 0 ;
                for( int k = 0 ; k < columnsB ; k++ ) { //Wir berechnen für jedes Feld[i][j] der Ergebnismatrix den Wert aus A und B
                    result[i][j] += A[i][k] * B[k][j] ;
                }
            }
        }
        
        return result ;
    }
    public static void main(String[] args) {
        
        //Matrix A wird definiert
        double[][] A = new double[3][3] ; 
        A[0][0] = 1;
        A[0][1] = 2;
        A[0][2] = 3;
        A[1][0] = 4;
        A[1][1] = 5;
        A[1][2] = 6;
        A[2][0] = 7;
        A[2][1] = 8;
        A[2][2] = 9;
    
        //Matrix B wird definiert
        double[][] B = new double[3][2] ;
        /*B[0][0] = 1;
        B[0][1] = 2;
        B[0][2] = 3;
        B[1][0] = 4;
        B[1][1] = 5;
        B[1][2] = 6;
        B[2][0] = 7;
        B[2][1] = 8;
        B[2][2] = 9; */
        
        B[0][0] = 1;
        B[0][1] = 2;
        B[1][0] = 3;
        B[1][1] = 4;
        B[2][0] = 5;
        B[2][1] = 6; 
        
        double[][] result = matMult( A , B ) ;
        for( int j = 0 ; j < result.length ; j++ ) {
            for( int i = 0 ; i < result[0].length ; i++ ) {
                System.out.printf("%f \t", result[i][j] ) ;
            }
            System.out.printf("\n") ;
        }
    }
}

Bei dem Beispiel müsste ich die Matrix
22 28
49 64
76 100
herausbekommen, aber ich bekomme nur
7 19
10 28
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at Matrix.main(Matrix.java:62)

Naja, es hängt also schon beim Rechnen und beim abbilden in der Konsole. Ich habe auch schon versucht einfach eine Matrix zu potenzieren, das hat perfekt funktioniert.
 

temi

Top Contributor
Eine kleine Anmerkung am Rande. In Java ist es generelle Praxis, dass Klassennamen in UpperCamelCase und Variablen-, Parameter- und Methodennamen in lowerCamelCase geschrieben werden. Das macht es für andere leichter zu lesen.
 

Orion789

Mitglied
Hätte auch linesA nehmen können, mir gehts darum in A der Zeile und in B der Spalte entlang zu laufen.

Eine kleine Anmerkung am Rande. In Java ist es generelle Praxis, dass Klassennamen in UpperCamelCase und Variablen-, Parameter- und Methodennamen in lowerCamelCase geschrieben werden. Das macht es für andere leichter zu lesen.
Ok, werde nächstesmal drauf achten, danke!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Auswahl und Ausgabe erstes Programm Java Basics - Anfänger-Themen 8
M Mein erstes Programm Java Basics - Anfänger-Themen 3
T erstes kleines Programm Java Basics - Anfänger-Themen 17
M Erste Schritte Erstes Programm mit Compiler öffnen Java Basics - Anfänger-Themen 4
M Mein erstes Java Programm Java Basics - Anfänger-Themen 5
E Erstes "kleines" Programm Java Basics - Anfänger-Themen 5
1 Mein erstes Programm, HELP!! Java Basics - Anfänger-Themen 2
A Erstes Programm: Polynom-Klasse Java Basics - Anfänger-Themen 15
D Mein erstes Programm flackert Java Basics - Anfänger-Themen 5
W Erste Schritte erstes Programm Java Basics - Anfänger-Themen 40
W Erstes eigens Programm - Klassen- und Schüler Verwaltungsprogramm Java Basics - Anfänger-Themen 5
M Erstes "sinnvolles" Programm Java Basics - Anfänger-Themen 11
A Erstes Programm - Problem beim Ausführen als jar Java Basics - Anfänger-Themen 3
B Methoden Mein erstes Programm - und gleich Probleme Java Basics - Anfänger-Themen 6
R [CODECHECK] Erstes Programm Java Basics - Anfänger-Themen 6
M Erstes Programm und Fehlermeldung Java Basics - Anfänger-Themen 5
M Sammlung von Anfängerfragen für mein erstes Programm Java Basics - Anfänger-Themen 15
G Erstes Java-Programm Java Basics - Anfänger-Themen 10
E Erstes Programm - Problem mit Exception Java Basics - Anfänger-Themen 3
L Suche Verbesserungsvorschläge für mein erstes Programm Java Basics - Anfänger-Themen 34
Bierhumpen mein erstes großes Programm. Was ändern? verbessern? Java Basics - Anfänger-Themen 12
A Mein erstes Programm Java Basics - Anfänger-Themen 6
T Erstes Programm Java Basics - Anfänger-Themen 7
B Erstes Programm :-/ Java Basics - Anfänger-Themen 3
Alen123 Erstes Arbeiten mit Methoden. Java Basics - Anfänger-Themen 5
Igig1 Autoparkplatz verkettete Liste erstes und letztes Auto Java Basics - Anfänger-Themen 13
S Mein erstes eigenes Projekt - Aufbau und Strukturierung Java Basics - Anfänger-Themen 6
I Letztes, erstes Element vom Array Java Basics - Anfänger-Themen 9
X Array erstes und letztes Element tauschen Java Basics - Anfänger-Themen 2
J erstes Vorkommen eines Chars aus einem String entfernen Java Basics - Anfänger-Themen 3
J erstes Vorkommen eines chars entfernen Java Basics - Anfänger-Themen 1
H java erstes projekt Java Basics - Anfänger-Themen 502
M OOP Mein erstes Textadventure... Java Basics - Anfänger-Themen 3
K Erstes kleines Spieleprojekt - Java GUI in HTML einbinden Java Basics - Anfänger-Themen 3
V Erste Schritte Erstes Project - Hilfe Java Basics - Anfänger-Themen 9
J Erstes Applet läßt sich nicht anzeigen Java Basics - Anfänger-Themen 2
M Erstes Textrollenspiel funktioniert...nicht. Java Basics - Anfänger-Themen 2
L Erstes Projekt aus zwei Projekten Java Basics - Anfänger-Themen 1
T mein erstes Java projekt Java Basics - Anfänger-Themen 8
T OOP Mein erstes Java-Spiel - Schiffe versenken! Java Basics - Anfänger-Themen 2
M Erstes Prog. OS Abfrage Java Basics - Anfänger-Themen 9
E Mein erstes Java Projekt - Sauberer code? Java Basics - Anfänger-Themen 28
B Erstes Element eines Vectors erhalten Java Basics - Anfänger-Themen 5
A Textdatei einlesen - erstes Zeichen falsch Java Basics - Anfänger-Themen 20
I Liste Remove erstes Element Java Basics - Anfänger-Themen 5
J Bald erstes Java Buch durchgearbeitet - Wie gehts nun weiter? Java Basics - Anfänger-Themen 6
T Erstes Zeichen aus String löschen Java Basics - Anfänger-Themen 8
J erstes Prog./Klasse - Konstruktur/Objekterstellung funktioniert nicht Java Basics - Anfänger-Themen 25
B erstes Java-Applet Java Basics - Anfänger-Themen 7
M Erstes Zeichen in einem String in Großbuchstaben wandeln Java Basics - Anfänger-Themen 3
C Erstes Arraylist Element in for Schleife überspringen Java Basics - Anfänger-Themen 6
G Feststellen, ob erstes Zeichen eines Strings eine Ziffer ist Java Basics - Anfänger-Themen 11
M Serialisierung erstes Beispiel Java Basics - Anfänger-Themen 4
A erstes größeres Projekt Java Basics - Anfänger-Themen 14
P Mein erstes JAR-File Java Basics - Anfänger-Themen 8
G erstes Zeichen eines Strings herausfinden Java Basics - Anfänger-Themen 3
G erstes element einer haspmap Java Basics - Anfänger-Themen 5
G erstes Arbeiten mit Collections Java Basics - Anfänger-Themen 17
G erstes Arbeiten mit Packages Java Basics - Anfänger-Themen 2
T Erstes RPG: KeyAdapter Problem Java Basics - Anfänger-Themen 3
M erstes Zeichen ersetzen Java Basics - Anfänger-Themen 2
C Konstruktor wird nicht als erstes aufgerufen! Java Basics - Anfänger-Themen 11
O mit Regex erstes Zeichen überprüfen Java Basics - Anfänger-Themen 3
D JNDI-DataSource erstes mal benutzen Java Basics - Anfänger-Themen 4
C Erstes kleines Problem - string in chat ? Java Basics - Anfänger-Themen 9
M Erstes Element einer Enumeration? Java Basics - Anfänger-Themen 6
A Erstes Buch durchgelesen, wie weiter vorgehen? Java Basics - Anfänger-Themen 8
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 13
J Delay erzeugen, ohne Programm zu blockieren Java Basics - Anfänger-Themen 7
Ü Dead Code im Programm? Java Basics - Anfänger-Themen 13
M Java Mail Programm Java Basics - Anfänger-Themen 4
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
M Mini Jar-Programm Java Basics - Anfänger-Themen 51
G JTable Listselectionlistener friert das Programm ein Java Basics - Anfänger-Themen 8
M Das Programm stellt nichts dar Java Basics - Anfänger-Themen 2
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
Z Programm Ideen Java Basics - Anfänger-Themen 8
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
T Programm stürzt ab Java Basics - Anfänger-Themen 40
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
G Programm läuft durch, ohne Eingabe aus dem Chat abzuwarten Java Basics - Anfänger-Themen 4
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
Jul1n4tor Programm mit Scanner und If-Statements Java Basics - Anfänger-Themen 2
D Wie sehe ich ein Java-Programm? Java Basics - Anfänger-Themen 27
K Ist das Programm schlecht bzw. schlampig programmiert ? Java Basics - Anfänger-Themen 9
Zrebna Kann Java Programm nicht in Konsole ausführen Java Basics - Anfänger-Themen 1
K Warum läuft das Programm nicht(bzw. nicht richtig) Java Basics - Anfänger-Themen 4
M Von Eclipse zum richtigen Programm Java Basics - Anfänger-Themen 1
nbergmann IntelliJ: Wie lade ich ein fertiges Programm aus dem Lehrbuch? Java Basics - Anfänger-Themen 26
D Anfängerfrage zu meinem Programm. Java Basics - Anfänger-Themen 15
nbergmann Eclipse: Lehrbuch-Programm startet nicht Java Basics - Anfänger-Themen 22
I Jetty starten von Programm (Main) Java Basics - Anfänger-Themen 27
Kydo Programm Beschreibung Java Basics - Anfänger-Themen 3
nbergmann Eclipse: Lehrbuch-Programm startet nicht Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben