Summen-Matrix

tiyuti

Mitglied
Hallo,
ich habe folgende Aufgabe: Schreiben Sie eine Methode mult(), welche 2 Matrizen als Eingabefelder erhält und die Summen-Matrix als Rückgabeparameter liefert. Die Methode soll zunächst prüfen, ob beide Matrizen dieselbe Dimensionen haben, sonst liefert die Methode NULL zurück.

Java:
public class Matrix
{
    
    public static void main (String args[])
    {
        int [][] m1 = {{1,2,3}, {2,3,4},{3,4,5}};
        int [][] m2 = {{6,5,4},{5,4,3},{3,2,1}};
        
        int [][] summe = mult(m1,m2);
        
    }
    
    
    static int mult(int [][] m1, int [][] m2)
    {
        int summe[][];
        //Dimensionen Kontrolle
        if ( m1.length == m2.length && m1[0].length == m2[0].length)
        {
            for (int i = 0; i < m1.length; i++)
        {
            for ( int j = 0; j < m1[0].length; j++)
            {
                summe[i][j] = (m1[i][j] + m2[i][j]);
            }
        }
        return summe;
    }
        else
            return null;
                
        
    }
}
Ich verstehe nicht warum ist es falsch!:(
 

Marco13

Top Contributor
Die methode soll einen int[][] zurückliefern und keinen int. Der "summe"-Array muss erstellt werden, bevor er befüllt wird.

Code:
import java.util.*;

public class Matrix2
{

    public static void main (String args[])
    {
        int [][] m1 = {{1,1,3}, {2,3,4},{3,4,5}};
        int [][] m2 = {{6,5,4},{5,4,3},{3,2,1}};

        int [][] summe = mult(m1,m2);
        for (int i=0; i<3; i++)
        {
            System.out.println(Arrays.toString(summe[i]));
        }

    }


    static int[][] mult(int [][] m1, int [][] m2)
    {
        int summe[][] = null;
        //Dimensionen Kontrolle
        if ( m1.length == m2.length && m1[0].length == m2[0].length)
        {
            summe = new int[m1.length][m1[0].length];
            for (int i = 0; i < m1.length; i++)
        {
            for ( int j = 0; j < m1[0].length; j++)
            {
                summe[i][j] = (m1[i][j] + m2[i][j]);
            }
        }
        return summe;
    }
        else
            return null;


    }
}
 
G

Gonzo17

Gast
Erstmal ein Tipp: wenn du sagst, wo der Fehler auftritt, dann kann dir schneller geholfen werden. :)

Also zuerst einmal solltest du die Variable
Code:
int summe[][]
initialisieren. Und zwar mit einem zweidimensionalen Array, das genau die Größe hat, die auch die beiden Matrizen haben.

Es ist übrigens nicht damit getan, wenn du nur
Code:
m1[0].length == m2[0].length
prüfst - wer sagt denn, dass
Code:
m1[1].length == m2[1].length
dann auch gilt und insbesondere dann sowas wie
Code:
m1[0].length == m1[1].length
? Problematisch wirds eben dann, wenn ein Array auf einmal größer ist als alle anderen. Das gibt bei deinem Programm nur einen Fehler, wenns das erste Array war, ists eins zwischendrin passiert "nichts" und der Wert geht einfach verloren.
 

Final_Striker

Top Contributor
1. Deine Matrizenmultiplikation ist falsch.
Matrizenmultiplikation

2. Zwei Matrizen können multipliziert werden, wenn die Spaltenanzahl der linken mit der Zeilenanzahl der rechten Matrix übereinstimmt. Bei dir können nur 2 quadratische Matrizen multipliziert werden.
 
G

Gonzo17

Gast
1. Deine Matrizenmultiplikation ist falsch.
Matrizenmultiplikation

2. Zwei Matrizen können multipliziert werden, wenn die Spaltenanzahl der linken mit der Zeilenanzahl der rechten Matrix übereinstimmt. Bei dir können nur 2 quadratische Matrizen multipliziert werden.

Weiß nicht, ob hier wirklich multipliziert werden soll, auch wenn die Methode mult() heißt. Denn immerhin heißt das Ergebnis ja dann letztendlich "Summen-Matrix". :bahnhof:
 

Oben