Elya: Zählschleifen und mehrdimensionales Array

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

--
"Alle mal an die Nase fassen, und zwar an die eigene": http://forum.de.selfhtml.org/archiv/2003/9/57903/#m324482
_____________
Wikipedia: Die freie Enzyklopaedie http://de.wikipedia.org
  1. 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

    1. 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

      --
      "Alle mal an die Nase fassen, und zwar an die eigene": http://forum.de.selfhtml.org/archiv/2003/9/57903/#m324482
      _____________
      Wikipedia: Die freie Enzyklopaedie http://de.wikipedia.org
  2. 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.

    1. 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

      --
      "Alle mal an die Nase fassen, und zwar an die eigene": http://forum.de.selfhtml.org/archiv/2003/9/57903/#m324482
      _____________
      Wikipedia: Die freie Enzyklopaedie http://de.wikipedia.org
  3. 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

    1. 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

      --
      "Alle mal an die Nase fassen, und zwar an die eigene": http://forum.de.selfhtml.org/archiv/2003/9/57903/#m324482
      _____________
      Wikipedia: Die freie Enzyklopaedie http://de.wikipedia.org