myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

Warum muss ein neues Feld im zweidimensionalen Array erzeugt werden

Antwort
Themen-Optionen Ansicht
Ungelesen 23.11.14, 14:59   #1
Fre4krider
Fragger
 
Benutzerbild von Fre4krider
 
Registriert seit: Nov 2010
Ort: BW
Beiträge: 48
Bedankt: 11
Fre4krider ist noch neu hier! | 0 Respekt Punkte
Standard 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 ist offline   Mit Zitat antworten
Ungelesen 25.11.14, 12:14   #2
Fre4krider
Fragger
 
Benutzerbild von Fre4krider
 
Registriert seit: Nov 2010
Ort: BW
Beiträge: 48
Bedankt: 11
Fre4krider ist noch neu hier! | 0 Respekt Punkte
Standard

Habe glaub eine Lösung gefunden.

b[++] zeigt nur auf a[i] deswegen muss keine genauere länge für das array angegeben werden.
Fre4krider ist offline   Mit Zitat antworten
Ungelesen 28.11.14, 16:44   #3
dustail
Newbie
 
Benutzerbild von dustail
 
Registriert seit: Mar 2009
Beiträge: 83
Bedankt: 45
dustail gewöhnt sich langsam dran | 35 Respekt Punkte
Standard

Zuerst einmal: Du hast eine sehr "interessante" Denkweise.....Sachen wie
Code:
a[i][a[i].length − 1]
sieht man nicht oft....
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...

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
dustail ist offline   Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:02 Uhr.


Sitemap

().