Martrizenmultiplikation

Linus_

Mitglied
Guten Tag allerseits,
mich beschäftigt seit Tagen eine Aufgabe, in der man eine eigentlich simple Matrizenmultiplikation implementieren soll. Gedanklich weiß ich, wie man es implementieren könnte, trotz dessen erhalte ich immer wieder einen „ Out of Bound “ Fehlercode, aber ich weiß nicht warum. Diesen Fehler habe ich schon bei mehreren Aufgaben dieser Art erhalten, weshalb ich mich über eure Hilfe wirklich freuen würde.
Vielen Dank im Voraus und liebe Grüße
2D24165F-4062-4858-804F-27923793EC3A.jpeg
Java:
public class Aufgabe1Matrizenmultiplikation {

    public static void main(String[] args) {
        
        double a[][] = {
                {2, 1, 7},
                {3, 0, 3},
        };
        double b[][] = {
                {4, 2},
                {7, 1},
                {5, 2}
        };
        double c[][] = new double[a[0].length][b.length];
        
        //Abbruchbedingung
        if(a.length != b[0].length) {
            System.out.println("Spaltenanzahl von a ungleich Zeilenanzahl von b, Multiplikation nicht möglich!");
        } else {
            //Multiplikation
            for(int SpalteB = 0; SpalteB < b.length; SpalteB++) {
                for(int ZeileA = 0; ZeileA < a[0].length; ZeileA++) {
                    for(int i = 0; i < a.length; i++) {
                        c[SpalteB][ZeileA] += a[ZeileA][i] * b[i][SpalteB];
                        
                    }
                }
            }
        }   
        System.out.println(c[1][1]);
        System.out.println(c[0][0]);
    }

}
 
Zuletzt bearbeitet:

temi

Top Contributor
Bitte Code nicht als Screenshot, sondern in Code-Tags einfügen: Das </> Symbol im Editor, ganz links.

Index out of bounds bedeutet, dass du irgendwo auf einen Arrayindex zugreifen möchtest, der nicht existiert. Bei Arrays beginnt der Index mit 0, der höchste Index eines Arrays der Länge 10 ist demnach 9. Du solltest bei der Fehlermeldung ja die Programmzeile angezeigt bekommen. Damit sollte man dem Problem schnell auf die Spur kommen können.
 

Linus_

Mitglied
Bitte Code nicht als Screenshot, sondern in Code-Tags einfügen: Das </> Symbol im Editor, ganz links.

Index out of bounds bedeutet, dass du irgendwo auf einen Arrayindex zugreifen möchtest, der nicht existiert. Bei Arrays beginnt der Index mit 0, der höchste Index eines Arrays der Länge 10 ist demnach 9. Du solltest bei der Fehlermeldung ja die Programmzeile angezeigt bekommen. Damit sollte man dem Problem schnell auf die Spur kommen können.
Danke erstmal für die schnelle Antwort. Ich habe trotzdem keinen blassen Schimmer wo dies passieren soll :(
 

temi

Top Contributor
Index 2 out of bounds for length 2 .. java:26
Der höchste Index für ein Array der Länge 2 wäre 1. Der Fehler ist in Zeile 26.

Ich tippe auf b[i][SpalteB] mit der Variablen SpalteB. Zur Not lass dir die Werte für die Indexvariablen auf der Konsole ausgeben.

Außerdem: In Java beginnen Variablennamen per Konvention mit einem Kleinbuchstaben: z. B. SpalteB => spalteB.
 

Linus_

Mitglied
Der höchste Index für ein Array der Länge 2 wäre 1. Der Fehler ist in Zeile 26.

Ich tippe auf b[i][SpalteB] mit der Variablen SpalteB. Zur Not lass dir die Werte für die Indexvariablen auf der Konsole ausgeben.

Außerdem: In Java beginnen Variablennamen per Konvention mit einem Kleinbuchstaben: z. B. SpalteB => spalteB.
Aber die Variable SpalteB kann doch durch die Form Schleife nur die Werte 0 und 1 annehmen oder sehe ich das falsch?
 

temi

Top Contributor
Aber die Variable SpalteB kann doch durch die Form Schleife nur die Werte 0 und 1 annehmen oder sehe ich das falsch?
b ist ja ein Array [3][2]. Damit ist b.length = 3 und deine Schleife läuft bis 2.

Aber, wie schon geschrieben, lass dir die Werte einfach per println() auf der Konsole ausgeben. Das ist gängige Praxis zum Debuggen.
 

temi

Top Contributor
Noch was. Ich weiß nicht, ob du davon ausgehen darfst, dass die Arrays (Matrizen) immer die gleiche Anzahl von Spalten enthalten. Denn bei Arrays ist dies durchaus auch möglich:
Java:
public class Main
{
    public static void main(String[] args) {
        double a[][] = {
                {2, 1, 7},
                {3, 0},
        };
    
        System.out.println(a.length);
        System.out.println(a[0].length);
        System.out.println(a[1].length);
    }
}

// Ausgabe:

2
3
2
 
Zuletzt bearbeitet:

Neue Themen


Oben