myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   Warum muss ein neues Feld im zweidimensionalen Array erzeugt werden (https://mygully.com/showthread.php?t=3516841)

Fre4krider 23.11.14 13:59

Warum muss ein neues Feld im zweidimensionalen Array erzeugt werden
 
Hi ich bin noch etwas grün hinter den Ohren was programmieren mit Java angeht und ich hab hier zwei Übungen und versteh nicht ganz warum man bei einer Methode immer erst ein neues Feld erzeugen muss um reinschreiben zu können und bei der anderen scheinbar nicht.

Code:

public static int [] [] pascal (int n) {
int [] [] p = new int [n] []; // Erste Zeile mit einer 1.
p[0] = new int [] { 1 }; // Weitere Zeilen.

for (int i = 1; i < n; i++) {  // Zeile mit i+1 Elementen erzeugen.
p[i] = new int [i+1];            // Randwerte mit 1 initialisieren.
p[i][0] = p[i][i] = 1;  // Übrige Werte aus darüberstehenden Werten berechnen.

for (int j = 1; j < i; j++) {
p[i][j] = p[i−1][j−1] + p[i−1][j];
}
}

return p;
}

p[i] = new int [i+1]; // Hier erzeuge ich ein neues Feld und schreibe gleich danach das Ergebnis aus der danach folgenden Rechnung rein. macht man das nicht bekommt man array out of bounds exception (was ja klar ist weil das feld in das man schreiben möchte nicht existiert)

Code:

String [] [] b = new String [n] [];
n=0;

for (int i = 0; i < a.length; i++) {
    if (isPartOf(s, a[i][a[i].length − 1])) {  //isPartOf vergleicht zwei Strings
    b[n++] = a[i];
}
}
return b;
}

b[n++] = a[i]; // Hier kann der Inhalt aus a an der Stelle i (zweidimensionales Feld) einfach in b geschrieben werden ohne b zu sagen wie viele Felder dafür benötigt werden.

Das verstehe ich nicht ganz warum man hier nicht auch erst neue Felder anlegen muss, vielleicht kann mir das jemand erklären danke =)

Fre4krider 25.11.14 11:14

Habe glaub eine Lösung gefunden.

b[++] zeigt nur auf a[i] deswegen muss keine genauere länge für das array angegeben werden.

dustail 28.11.14 15:44

Zuerst einmal: Du hast eine sehr "interessante" Denkweise.....Sachen wie
Code:

a[i][a[i].length − 1]
sieht man nicht oft...:confused:.
1. Dimension an der Stelle i.
2. Dimension an der Stelle "Länge der 2. Dimension an der Stelle i - 1".

Aber wenn es nicht anders geht...:rolleyes:

Und wie du gedacht hast, war schon richtig mit dem Zeiger (in Java besser: Referenzen), da b ein zweidimensionales Feld ist:
-> b ist eine Referenz auf ein Array aus Referenzen, welche auf ein Array aus Strings referenzieren.

Bei der "pascal"-Funktion arbeitest du bei
Code:

p[i][j] = p[i−1][j−1] + p[i−1][j];
immer in der 2. Dimension.
D.h. du hast die Jeweiligen Werte (in diesem Fall Integer..)

Bei deinem 2. Beispiel arbeitest du bei
Code:

b[n++] = a[i];
in der 1. Dimension.
-> Du arbeitest mit Referenzen.

Mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.