# zweidimensionale arrays



## thomaspaulitsch (29. Jun 2009)

Guten Abend Community

Da ich am Donnerstag ein Projekt abgeben muss, will ich euch nun um Rat fragen!
Dieses Projekt ist für die Note sehr ausschlaggebend.

Nun zum Projekt:

Ich habe ein zweidimensionales Array mit 16 Speicherplätzen angelegt.
Diesen 16 Plätzen darf ich beliebige Werte vergeben.
Theoretisch gesehen ist dieses Array ja wie eine Art Quadrat. Ich muss nun die Diagonale von rechts oben nach links unten addieren. Und das mit einer for-schleife. 
Ich weiss allerdings nicht, wie ich das anstellen soll!


```
private void jButtonAddierenActionPerformed(java.awt.event.ActionEvent evt) {
       
         int[][] array1 = new int[4][4];
         
         array1[0][0] = 4;
         array1[0][1] = 5;
         array1[0][2] = 3;
         array1[0][3] = 1;
         array1[1][0] = 5;
         array1[1][1] = 2;
         array1[1][2] = 4;
         array1[1][3] = 3;
         array1[2][0] = 4;
         array1[2][1] = 2;
         array1[2][2] = 1;
         array1[2][3] = 5;
         array1[3][0] = 4;
         array1[3][1] = 3;
         array1[3][2] = 4;
         array1[3][3] = 5;
         
                         
        
    }
```

Ich bitte um Rat.

mfg Thomas


----------



## SlaterB (29. Jun 2009)

fange mit einem eindimensionalen Array der Länge 4 an, und addiere alle 4 Werte in einer Schleife, klappt das?

wenn du array[0] + array[1] + array[2] +array[3] per for-i hinbekommst,
dann sollte eine der Diagonalen, nämlich array[0][0] + array[1][1] + array[2][2] +array[3][3] nicht viel schwerer sein,

die andere Diagonale ist schon bisschen hapiger, [0][3], [1][2], [2][1], [3][0],
wieder mit einer for-i Schleife von 0 bis 3,
noch keine Idee?


----------



## thomaspaulitsch (29. Jun 2009)

danke für den tipp!

aber ich kenne mich mit for-schleifen nicht sehr gut aus!

for (int i=0; i <=...; i++)

ich weiss nicht, was in die for-schleife kommt...


----------



## SlaterB (29. Jun 2009)

for (int i=0; i <=3; i++)

Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 3.10 Arrays

dann auf ArrayElement arr_ zugreifen oder auch mal varieren: arr[i*2], arr[i-1], alles möglich_


----------



## thomaspaulitsch (29. Jun 2009)

würd es dir was ausmachen wenn du den code hinschreibn würdest?

ich weiss, ihr macht keine hausaufgaben =)
aber hier ist es ziemlich ernst...

und wenn ich den code mal sehe, ist es für mich auch logisch!

mfg


----------



## Final_Striker (30. Jun 2009)

also ehrlich,

slaterB hat dir schon gesagt 

was für arrayelemete du auslesen musst,
wie du auf die einzelnen felder zugreifst
wie die dafür benötigte for-schleife aussieht

ein wenig selbstinitiative sollte man doch erwarten können, vor allem wenn das projekt so wichtig sein soll.


----------



## thomaspaulitsch (30. Jun 2009)

ich weiss leider nicht weiter...

es wäre nett wenn jemand den code richtig setzen würde, dann würd ichs auch verstehen!

Übrigens: Ich meinte die Diagonale von links oben nach rechts unten...


```
private void jButtonAddierenActionPerformed(java.awt.event.ActionEvent evt) {                                                

        int[][] array1 = new int[4][4];
        int summe = 0;

        array1[0][0] = 4;
        array1[0][1] = 5;
        array1[0][2] = 3;
        array1[0][3] = 1;
        array1[1][0] = 5;
        array1[1][1] = 2;
        array1[1][2] = 4;
        array1[1][3] = 3;
        array1[2][0] = 4;
        array1[2][1] = 2;
        array1[2][2] = 1;
        array1[2][3] = 5;
        array1[3][0] = 4;
        array1[3][1] = 3;
        array1[3][2] = 4;
        array1[3][3] = 5;



        for (int i = 0; i <= 3; i++) {

            summe = summe + i;

        }

        jTextArea1.append("Addition der Digonale:  " + summe + "\n");

    }
```


----------



## SlaterB (30. Jun 2009)

summe = summe + array_;_


----------



## thomaspaulitsch (30. Jun 2009)

ich danke dir! funktioniert!

nur wieso verwende ich in der for-schleife "i<=3"? 
das leuchtet mir nicht so ein, ich versteh die logik nicht...


lg


----------



## SlaterB (30. Jun 2009)

was wäre denn deiner Meinung nach eine Alternative?
irgendwie muss man sagen von 0 bis 3, irgendeine Syntax muss dafür festgelegt sein, das ist sie..


----------



## thomaspaulitsch (30. Jun 2009)

ja stimmt, ich versteh es schon.

slaterB, wie du bestimmt bemerkt hast, bin ich nicht so das informatik-genie...
deshalb hätt ich noch eine frage:

und zwar muss ich alle werte beider diagonalen miteinander multiplizieren.
hättest du da vlt auch den ein oder andren tipp für mich?

mfg


----------



## SlaterB (30. Jun 2009)

Tipps gabs genug, du fragst nur nach weiteren Lösungen, so gehts nicht weiter


----------



## thomaspaulitsch (30. Jun 2009)

ja seh ich ein...
aber wie gesagt, dieses programm ist sehr wichtig, und ich will kein Nicht-Genügend im zeugnis haben!

eine diagonale zu multiplizieren ist ja kein problem, aber die 2te dazu schon...
wäre echt nett wenn mir da noch helfen könntest.


----------



## Schandro (30. Jun 2009)

> eine diagonale zu multiplizieren ist ja kein problem


Das sagst du, nachdem dir fast die komplette Lösung gepostet wurde^^



> die andere Diagonale ist schon bisschen hapiger, [0][3], [1][2], [2][1], [3][0],
> wieder mit einer for-i Schleife von 0 bis 3,
> noch keine Idee?


Wurde weiter oben bereits gepostet. Das einzige was du dich fragen musst, ist:
Wie komme ich von 0 auf 3
von 1 auf 2
von 2 auf 1
und von 3 auf 0

Ist einfache Mathematik.

€dit:


> aber wie gesagt, dieses programm ist sehr wichtig, und ich will kein Nicht-Genügend im zeugnis haben!


deine Noten stehen immer im Verhältnis zu den Noten der anderen. Wenn du jetzt also die Komplettlösung bekommst, ohne selber was geleistet zu haben, wertest du damit die Leistungen alle anderen runter. Und das wollen wir nicht.


----------



## thomaspaulitsch (30. Jun 2009)

```
private void jButtonDiagonalenMultiplizierenActionPerformed(java.awt.event.ActionEvent evt) {                                                                


        int[][] array1 = new int[4][4];
        int summe = 1;
        int summe1 = 1;
        int summe2 = 1;



        array1[0][0] = 4;
        array1[0][1] = 5;
        array1[0][2] = 3;
        array1[0][3] = 1;
        array1[1][0] = 5;
        array1[1][1] = 2;
        array1[1][2] = 4;
        array1[1][3] = 3;
        array1[2][0] = 4;
        array1[2][1] = 2;
        array1[2][2] = 1;
        array1[2][3] = 5;
        array1[3][0] = 4;
        array1[3][1] = 3;
        array1[3][2] = 4;
        array1[3][3] = 5;

        for (int i = 0; i <= 3; i++) {

            summe = summe * array1[i][i];

        }

        for (int i = 0; i <= 3; i++) {

            summe1 = summe1 * array1[i][i];

        }

        summe2 = summe1 * summe;

        jTextArea1.append("Multiplikation der Digonalen:  " + summe2 + "\n");

}
```


problem ist die 2te for-schleife...
ich versteh das system der for-schleifen nicht so wirklich...


----------



## thomaspaulitsch (1. Jul 2009)

Gut, die Multiplikation ist geschafft! Ich danke euch für die Tipps!

Hätt nur noch ein Anliegen:

Und zwar muss ich die Hälften spiegeln. Also die Werte der einen Hälfte müssen sich in der andren Hälfte befinden und umgekehrt...
Es sind die Hälften neben der Diagonale.

mfg


----------



## SlaterB (1. Jul 2009)

nur noch ein Anliegen, das erinnert an gestern abend

> deshalb hätt ich noch eine frage:

gut, damals ohne das Wort 'nur' 

-------

meinst du 'an der Diagonalen spiegeln?', also z.B. 0,0 bleibt wie es ist, 0,1 geht nach 1,0 usw?

dann empfehle ich eine doppelte for-Schleife, 
für jedes Element i,j musst du prüfen, ob es oberhalb der Diagonale liegt und dann das Gegenüber bestimmen und tauschen,

Tauschen geht, in dem du den Wert zunächst in einer dritten Variable ablegst


----------



## thomaspaulitsch (1. Jul 2009)

ja, du hast es richtig erkannt...

gut, ich lasse mir deinen tipp mal durch den kopf gehen.

aber mit meinen kentnissen dürfte das ziemlich schwierig werden...


----------

