Zählschleifen und mehrdimensionales Array
Elya
- javascript
Hallo Forum,
ich bin ein bißchen aus Javascript raus, möchte aber eine kleine Spielerei ausprobieren und habe dafür folgende Funktion geschrieben (und das ist erst der Anfang <seufz>):
function berechnePositionen() {
xpos = new Array(0,30,60);
ypos = new Array(0,50,100);
pos_alle = new Array();
for (i=0;i<3;i++){
for (j=0;j<3;j++){
pos_alle.push(new Array(2));
pos_alle[i][0] = xpos[i];
pos_alle[i][1] = ypos[j];
}
}
//diese Schleife nur zur Probeausgabe:
for (i=0;i<pos_alle.length;i++)
{
alert (pos_alle[i]);
}
}
Diese soll 9 Wertpaare ausspucken (bzw. in das Array pos_alle schreiben), die sich aus den Elementen aus xpos und xpos zusammensetzen. Die Schleifen zählen völlig korrekt durch, jeweils verschachtelt von 0-2. Einzeln angesprochen, geben die ypos[n] und xpos[n] exakt die richtigen Werte aus. Wenn ich aber zum Schluß pos_alle[i] probehalber ausgeben lasse, sieht das so aus:
0,100
30,100
60,100
,
,
,
,
,
,
Gewollt wäre:
0,0
0,50
0,100
30,0
30,50
30,100
60,0
60,50
60,100
Die gleiche Schleife in php umgesetzt, zählt "richtig". Ich tippe auf die push-Anweisung bzw. das mehrdimensionale Array, finde aber den Fehler nicht. Und der Knoten in meinem Hirn wird auch immer verknuselter... ;-)
Wer kann mir helfen?
Gruss aus Koeln-Ehrenfeld,
Elya
Hallo Elya,
for (i=0;i<3;i++){
for (j=0;j<3;j++){
pos_alle.push(new Array(2));
pos_alle[i][0] = xpos[i];
hier schreibst Du dreimal xpos[i] nach pos_alle[i][0]
pos_alle[i][1] = ypos[j];
und hier schreibst Du alle drei ypos nach pos_alle[i][1]
}
}
Gruß, Jürgen
Hallo Jürgen,
for (i=0;i<3;i++){
for (j=0;j<3;j++){
pos_alle.push(new Array(2));
aber hier hänge ich doch ein neues Element in pos_alle!
pos_alle[i][0] = xpos[i];
hier schreibst Du dreimal xpos[i] nach pos_alle[i][0]
pos_alle[i][1] = ypos[j];
und hier schreibst Du alle drei ypos nach pos_alle[i][1]
}
}
Schon klar, drei mal, aber jedes Mal in ein neues Element des Arrays, dachte ich zumindest?
Gruss aus Koeln-Ehrenfeld,
Elya
function berechnePositionen() {
xpos = new Array(0,30,60);
ypos = new Array(0,50,100);pos_alle = new Array();
for (i=0;i<3;i++){
Hier kannst du doch auch die Eigenschaft length verwenden und du solltest die Zählvariabeln mit var lokal deklarieren.
for (j=0;j<3;j++){
dito.
pos_alle.push(new Array(2));
Ich vermute mal das hier dein Fehler liegt, du willst:
pos_alle[i] = new Array();
Der Index ist optional und stellt eher eine Fehlerquelle da.
Struppi.
Hallo Struppi,
for (i=0;i<3;i++){
Hier kannst du doch auch die Eigenschaft length verwenden und du solltest die Zählvariabeln mit var lokal deklarieren.
Danke, das ist im Prinzip klar, ich hab das Script sowieso etwas vereinfacht mit fixen Werten, damit es übersichtlicher wird. Das var habe ich übernommen
pos_alle.push(new Array(2));
Ich vermute mal das hier dein Fehler liegt, du willst:
pos_alle[i] = new Array();
i zählt nur bis 3. eine dritte Zählvariable hat geholfen (s.o.)
Der Index ist optional und stellt eher eine Fehlerquelle da.
warum?
Nochmal danke an alle!
Gruss aus Koeln-Ehrenfeld,
Elya
Hoi Elya
Gewollt wäre:
0,0
0,50
0,100
30,0
30,50
30,100
60,0
60,50
60,100
Die gleiche Schleife in php umgesetzt, zählt "richtig". Ich tippe auf die push-Anweisung bzw. das mehrdimensionale Array, finde aber den Fehler nicht. Und der Knoten in meinem Hirn wird auch immer verknuselter... ;-)
Kann ich jetzt nich glauben, denn es ist ein "Logik-Fehler" der wohl auch in PHP nicht funtzt. How ever...
Folgende Zeile um eine zusätzliche Variable erweitert bringt bei mir gewünschtes Resultat:
// Neue Counter-Var
c = 0;
for (i=0;i<3;i++){
for (j=0;j<3;j++){
pos_alle.push(new Array(2));
pos_alle[c][0] = xpos[i];
pos_alle[c][1] = ypos[j];
c++;
}
}
Grüsse kaepten
Hallo kaepten,
// Neue Counter-Var
c = 0;for (i=0;i<3;i++){
for (j=0;j<3;j++){
pos_alle.push(new Array(2));
pos_alle[c][0] = xpos[i];
pos_alle[c][1] = ypos[j];
c++;
}
}
Du bist ein Schatz! Das funktioniert! Aber wirklich, in php hat's mit 2 Variablen geklappt... vodoo. Nochmal Danke!
Gruss aus Koeln-Ehrenfeld,
Elya