kostenloser Webspace werbefrei: lima-city


Array[1] wird zu Array[0]

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    Hallo, ich bin gerade an einem Script und habe 3 Werte in einen Array gespeichert.
    (Ich entferne in den Folgenden Codes die Variabeln und arbeite nur mit Beispielen)

    var Zahlen = new Array();
    for(var i = 0; i < 3; i++){
    	Zahlen[i] = 1*i; // 1, 2 und 3 wird in einen Array gespeichert
    }


    Ich habe also 1 2 und 3.

    Jetzt habe ich eine Funktion, die 1 erniedrigen soll und die anderen 2 zu den letzteren machen:

    function minus(){
    	for(var i = 0; i < 3; i++) {
    		if(i == 0){
    			Zahlen[i]-- //Zahlen[1] um 1 erniedrigen //Bei ersten Array, also Zahlen[0] -1 rechnen
    		}
    		else{
    			Zahlen[i] = Zahlen[i - 1]; //Zahlen[1] nimmt den Wert von Zahlen[0] und Zahlen[2] von Zahlen[1]
    		}
    	}
    }


    Also
    Zahlen[0] wird um 1 erniedrigt = 0
    Zahlen[1] wurde zu Zahlen[0] gemacht, also 1
    Zahlen[2] wurde zu Zahlen[1] gemacht, also 2

    In der Theorie zumindest, in der Praxis gehts nicht, alle Werte werden zu -1:


    <script type="text/javascript">
    
    var Zahlen = new Array();
    for(var i = 0; i < 3; i++){
    	Zahlen[i] = 1*i;
    	Zahlen[i] = 1*i;
    }
    
    function minus(){
    	for(var i = 0; i < 3; i++) {
    		if(i == 0){
    			Zahlen[i]-- //Zahlen[1] um 1 erniedrigen
    		}
    		else{
    			Zahlen[i] = Zahlen[i - 1];
    		}
    	}
    	alert(JSON.stringify(Zahlen)); //Array ausgeben
    }
    
    
    </script>
    <body onload="minus();">
    
    
    </body>


    Die Ausgabe ist: [-1,-1,-1]
    Wobei sie eigentlich [-1,0,1] sein sollte.



    Aber ich hoffe ihr versteht was ich will. Und wenn sich jemand fragt, was das ganze soll, bei mir sinds nicht so einfache Werte, sondern wird nicht -1 gerechnet sondern -20, und es sind Kordinaten. Mit diesem Beispiel erscheint es vollkommen nutzlos, aber ich kann nicht genau erklären wieso.

    Schonmal danke für die Hilfe. :)

    Beitrag zuletzt geändert: 2.2.2013 17:41:56 von c143
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Du machst doch bei jedem Aufruf der for Schleife i=0 also muss doch -1 raus kommen.
  4. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    all-in1 schrieb:
    Du machst doch bei jedem Aufruf der for Schleife i=0 also muss doch -1 raus kommen.


    Nein, i wird ja immer erhöht
    i = 0 -> -1
    i = 1 -> 0
    i = 2 -> 1

    Beitrag zuletzt geändert: 2.2.2013 18:07:03 von c143
  5. muss das
    var i = 0


    nicht vor die for Schleife?

    Kenne mich mit javascript nicht so gut aus, aber in PHP kann bei dir nur -1 raus kommen.

    Aber fangen wir mal an.

    1. Aufruf i=0 wird i=-1
    2. Aufruf i=-1 dann mit ++ i=0 wird wieder i=-1

    Oder sehe ich da etwas falsch?
  6. Hi,

    du hast einfach einen Denkfehler drin, darum hier einmal die Ausgangsstellung:
    zahlen = [0,1,2]


    Und jetzt die Situation bei den verschiedenen Schleifendurchgängen:
    nach dem 1. Durchlauf:
        zahlen = [-1,1,2]
    nach dem 2. Durchlauf:
        zahlen = [-1,-1,2]
    nach dem 3. Durchlauf:
        zahlen = [-1,-1,-1]
    Wie du siehst wird immer eine Zelle mehr zur -1, damit du aber dein Ziel erreichst solltest du das Array von hinten nach vorne durchlaufen, dann wäre das Resultat so:
    nach dem 1. Durchlauf:
        zahlen = [0,1,1]
    nach dem 2. Durchlauf:
        zahlen = [0,0,1]
    nach dem 3. Durchlauf:
        zahlen = [-1,0,1]
    Der Code dazu sähe so aus:
    for(var i=zahlen.length;i--;)
        zahlen[i]=i==0?zahlen[i]-1:zahlen[i-1];


    Mit freundlichen Grüßen
  7. Autor dieses Themas

    c143

    c143 hat kostenlosen Webspace.

    all-in1 schrieb:
    Aufruf i=0 wird i=-1
    2. Aufruf i=-1 dann mit ++ i=0 wird wieder i=-1



    Wieso soll i -1 werden? O.o

    1. Aufruf -> i = 0 -> Zahlen[0]-- -> Zahlen[0] = -1 ABER i ist immernoch 0, nur Zahlen wurde abgeändert.
    2. Aufruf -> i = 1 -> Zahlen[1] = Zahlen[1 -1] -> Zahlen[1] = Zahlen[0] = 0
    3. Aufruf -> i = 2 -> Zahlen[2] = Zahlen[2 - 1] -> Zahlen [2] = Zahlen [1] = 1



    EDIT: @nemoinho, grad als ich deinen Beitrag gelesen habe, dachte ich mir, wie dumm ich doch bin. :D Vielen Dank!


    Beitrag zuletzt geändert: 2.2.2013 18:31:42 von c143
  8. Hallo c143,

    var Zahlen = new Array();
    for(var i = 0; i < 3; i++){
    Zahlen = 1*i; // 1, 2 und 3 wird in einen Array gespeichert
    }

    Ich habe also 1 2 und 3.

    Nein 0 1 2

    Ein paar Verbesserungen deines Codes:
    function minus(){
    var Zahlen = new Array();
    for(var i = 0; i < 3; i++){
    	Zahlen[i] = 1+i;
    	
    }
    	for(var i = 2; i >= 0; i--) {
    		if(i !== 0){Zahlen[i] = Zahlen[i - 1];//Zahlen[1] um 1 erniedrigen
    			
    		}
    		else{
    			Zahlen[i]=i; 
    		}
    	}
    	alert(JSON.stringify(Zahlen)); //Array ausgeben
    }


    mfg,
    timebandit

    Beitrag zuletzt geändert: 2.2.2013 18:46:35 von timebandit
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!