Array[1] wird zu Array[0]
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
all
array
aufruf
ausgabe
ausgangsstellung
ausgeben
beispiel
code
denkfehler
durchlauf
fangen
hilfe
jemand
resultat
schleife
situation
url
zahl
zelle
ziel
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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?
-
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:
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 = [-1,1,2] nach dem 2. Durchlauf: zahlen = [-1,-1,2] nach dem 3. Durchlauf: zahlen = [-1,-1,-1]
Der Code dazu sähe so aus:nach dem 1. Durchlauf: zahlen = [0,1,1] nach dem 2. Durchlauf: zahlen = [0,0,1] nach dem 3. Durchlauf: zahlen = [-1,0,1]
for(var i=zahlen.length;i--;) zahlen[i]=i==0?zahlen[i]-1:zahlen[i-1];
Mit freundlichen Grüßen
-
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 -
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage