Erstes Programm: Matrizen Multiplikation

O

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

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.
 
O

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

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++) {
   ...
}
 
O

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

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.
 
O

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

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.
 
O

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
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
G Weiß jemand wie man dieses Programm schreibt? Java Basics - Anfänger-Themen 84
C Programm ausführen ohne JRE? Java Basics - Anfänger-Themen 3
justemii Gehalt berechnen - Aufgabe Java-Programm Java Basics - Anfänger-Themen 9
N Best Practice How can I creat a programm with java under windows 10 in order to open an spreadsheet in libreoffice calc format Java Basics - Anfänger-Themen 11
W Programm dass Palindrome erkennt Java Basics - Anfänger-Themen 6
K Erste Schritte Programm geht aus Schleife, warum? Java Basics - Anfänger-Themen 2
P Wie für EIN Java Programm von 64bit Java (=Standard) auf 32bit Java Installation (Windows) umschalten? Java Basics - Anfänger-Themen 6
K Programm stoppt einfach ohne Grund Java Basics - Anfänger-Themen 4
M Rekursives Programm zum Anzeigen von Primzahlen Java Basics - Anfänger-Themen 3
X Kurzes Java-Programm, das sich komisch verhält Java Basics - Anfänger-Themen 6
Zrebna Programm kann aus der Konsole nicht gestartet werden (in der IDE läuft es) Java Basics - Anfänger-Themen 2
K Error bei meinem Programm - Hilfe Java Basics - Anfänger-Themen 8
J Programm schreiben Java Basics - Anfänger-Themen 5
T Kann jemand kurz das Programm testen? Java Basics - Anfänger-Themen 13
T Programm Schleife/if Java Basics - Anfänger-Themen 2
T Mein Programm hat Fehler Java Basics - Anfänger-Themen 4
G While/If Programm Java Basics - Anfänger-Themen 2
G Java-Programm Terminal Java Basics - Anfänger-Themen 2
Dimax Java Programm mit exec starten Java Basics - Anfänger-Themen 5
I Java Programm sieht wie exe aus. Java Basics - Anfänger-Themen 3
J Programm vereinfachen Java Basics - Anfänger-Themen 5
G Java-Programm weitergeben Java Basics - Anfänger-Themen 14
Kirby_Sike Programm startet nachdem es compiled wurde nicht Java Basics - Anfänger-Themen 17
T Programm effizienter gestalten Java Basics - Anfänger-Themen 17
M Ein Programm erweitern, wie? Java Basics - Anfänger-Themen 3
J Fehler in Programm: Index -1 out of bounds for length 0 Java Basics - Anfänger-Themen 5
M Programm per Nutzereingabe ändern Java Basics - Anfänger-Themen 3
G Programm mit Schleife funktioniert nicht Java Basics - Anfänger-Themen 5
G If / While Programm (Datei auslesen) Java Basics - Anfänger-Themen 6
G Dezimal zu Binärcode Programm Java Basics - Anfänger-Themen 9
G Programm schreiben: Zahl (n) eingeben, 1+1/n+2/n+3/n+....+n/n Java Basics - Anfänger-Themen 8
M Problem mit meinem Programm Java Basics - Anfänger-Themen 6
L Wie teilt man ein Programm in vernünftige Klassen ein? Java Basics - Anfänger-Themen 10
R Compiler-Fehler HalloWelt-Programm korrekt abgeschrieben, trotzdem Fehlermeldungen Java Basics - Anfänger-Themen 2
W Hilfe beim Chat Programm Java Basics - Anfänger-Themen 14
A Java-Programm läuft bei installierter JDK aber nicht mit JRE? Java Basics - Anfänger-Themen 5
J Mein Programm beendet sich ohne mein Zutun Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Anzeige


Oben