Quadratische Matrix inkl Summe

Noob26

Mitglied
Hallo ihr Lieben,

habe wieder eine Aufgabe wo ich hänge:

Belegen Sie eine quadratische Matrix solange mit Zufallszahlen von 1 bis 9 (jeweils inklusive), bis die
Summe der Diagonale von links oben nach rechts unten ein ganzzahliges Vielfaches der Summe der
Diagonale von rechts oben nach links unten ausmacht.
Lassen Sie die Größe der Matrix vom User bestimmen, stellen Sie jedoch sicher, dass die Anzahl der
Zeilen/Spalten mindestens 2 und eine gerade Zahl ist.
Erstellen Sie folgende Ausgabe (hier als Beispiel mit Matrixgröße 4):

11952

kann mir jemand weiterhelfen?

dies habe ich :
Code:
public class Matrix {

    Scanner eingabe = new Scanner(System.in);
   
    System.out.println("Geben Sie die Größe der Matrix an");
   
    int gr = eingabe.nextInt();
    int matrix[][] = new int[gr][gr];
    int sum = 0;
    boolean check = true;
    while (check) {
        for (int zeile = 0; zeile < matrix.length; zeile++) {
            for (int spalte = 0; spalte < matrix[zeile].length; spalte++) {
                matrix[zeile][spalte]=(int)( Math.random() * (9 - 1 + 1) + 1);
                if (zeile == spalte) {
                    sum+=matrix[zeile][spalte];
                }
            }
        }

wie funktioniert das jetzt mit der diagonalen Summe von 20 ?

DAnke euch.
LG Noob
 
wie funktioniert das jetzt mit der diagonalen Summe von 20 ?
Wieso 20? Du sollst die Summe der Diagonalen von links oben nach rechts unten (1. Summe) und die Summe der Diagonalen von rechts oben nach links unten (2. Summe) berechnen. Anschließend sollst Du prüfen, ob die 1. Summe durch die 2. Summe teilbar ist.

WTF?!?

Abgesehen davon sollte Dein Code vielleicht auch in irgendeiner Methode stehen.
 
Danke mihe7 für deine Antwort - jetzt hab ich erst verstanden was gefragt ist mir war das nicht ganz klar.

Ich habe dies versucht:


Code:
    public static void main(String[] args) {

    Scanner eingabe = new Scanner(System.in);
    
    System.out.println("Geben Sie die Größe der Matrix an");
    
    int gr = eingabe.nextInt();
    int matrix[][] = new int[gr][gr];
    int sum = 0;
    int versuche = 0;
    boolean check = true;
    while (check) {
        for (int zeile = 0; zeile < matrix.length; zeile++) {
            for (int spalte = 0; spalte < matrix[zeile].length; spalte++) {
                matrix[zeile][spalte]=(int)( Math.random() * (9 - 1 + 1) + 1);
                if (zeile == spalte) {
                    sum+=matrix[zeile][spalte];
                }
            }
        }
        if (sum % 2 == 0) {
            check = false;
        }
        versuche++;
        sum=0;
    }
    //Ausgabe
    for (int zeile = 0; zeile < matrix.length; zeile++) {
        for (int spalte = 0; spalte < matrix[zeile].length; spalte++) {
            System.out.printf("(%d,%d)=%d ",zeile,spalte,matrix[zeile][spalte]);
            if (zeile == spalte) {
                sum+=matrix[zeile][spalte];
            }
        }
        System.out.println();
    }
    System.out.println();
    System.out.printf("Summe:" + sum);
}

}

Kannst du einen kurzen Blick drauf werfen und mir sagen ob das so stimmt?

Danke LG
 
Hallo,
ich würde mir hier zwei Summen bilden.
Du läufst durch dein zuvor per Zufall gefühltes Array und musst nun überlegen wie du beide Summen füllst.
i = zeile, j = spalte und dein Tupel ist (i,j) dann wird
Die erste Summe mit (0,0), (1,1), ... etc gefüllt werden.
Die zweite Summe (0,4),(1,3),... etc gefüllt werden.
Danach fragst du ab ob beide Summen gleich sind wenn Sie gleich sind gibst du True zurück 🙂
Denke so sollte es gehen 🙂

LG
 
Danach fragst du ab ob beide Summen gleich sind wenn Sie gleich sind gibst du True zurück
Tatsächlich müssen die Summen nicht gleich sein. Es muss nur die Summe der Elemente auf der Hauptdiagonalen durch die Summe der Elemente auf der Gegendiagonalen teilbar sein.

Ansonsten stimmt der Ansatz von Dir, @ocsme, aber.

@Noob26 Du bildest nur die Summe der Hauptdiagonalen (0,0), (1,1), (2,2) usw. Dieses "- 1 + 1" kannst Du auch entfernen, das verwirrt nur.
 

Zurück
Oben