verschachtelte Schleifen, oder wie geht das?
2BitMarv
- javascript
Hallo liebe Gemeinde,
Ich bin in der unglücklichen Situation etwas verwirrt zu sein bei dem Versuch folgende Logik zu verstehen:
Ich möchte gerne ein einfaches Array auf eine bestimmte Weise mit Werten befüllen. Dazu verwende ich ein Konstrukt aus zwei verschachtelten FOR Schleifen in einer FUNCTION, die wie folgt aussieht:
function makeCoordsY(h,v){
var res_1 = getCoordY('zero','IMG');//bekommt Werte aus einer anderen Funktion
var res_2 = getCoordY('distY','IMG');//hier ebenfalls
var diff = res_2 - res_1;//Differenz berechnen
var k = 0;//Eine Hilfsvaiable
var result = new Array();
for(i=0;i<v;i++){
for(j=0;j<h;j++){
result[i] = res_1+(diff*k);
}
k++;
}
return result;
}
So, prinzipiell funktioniert das auch. Die äußere FOR Schleife bestimmt wie viele Werte im Array stehen. Die innere Schleife ergibt den jeweiligen Wert. Nach meinem Verständnis sollte die innere Schleife doch eigentlich so oft durchlaufen bis die Bedingung j<h nicht mehr zutrifft um dann k++ zu erhöhen und die äußere Schleife den nächsten Durchlauf beginnt.
Also geben wir als h,v doch mal 7,14 an. res_1 ist jetzt mal = 27 und res_2 = 44. Dann sollte mein Array doch iegentlich so aussehen (wie ich es ja auch haben will):
[27,27,27,27,27,27,27,27,48,48,48,48,48,48,48,48,61,61,61,61,....]
Ausgegeben wird aber:
[27,48,61,78,95,112,129....]
Wo liegt mein Denkfehler? bzw. Wie arbeitet JS hier?
Grüße, 2BitMarv
Hallo,
function makeCoordsY(h,v){
var res_1 = getCoordY('zero','IMG');//bekommt Werte aus einer anderen Funktion
var res_2 = getCoordY('distY','IMG');//hier ebenfalls
var diff = res_2 - res_1;//Differenz berechnen
var k = 0;//Eine Hilfsvaiable
var result = new Array();
for(i=0;i<v;i++){
for(j=0;j<h;j++){
result[i] = res_1+(diff*k);
hier liegt dass Problem, da Du i einsetzt (result[i]) und dies im inneren Schleifendurchlauf gleichbleibend ist, überschreibst Du einfach die Werte wieder
}
k++;
wozu brauchst Du k, in diesem Falle könntest Du i anstatt dessen benutzen
}
return result;
}
naja, habe nur eine vielleicht nicht ganz ergonomische Lösung parat ;)
result[i+j], so vermeidest Du auf jeden Fall die Überschreibungen
ich denke es gibt noch bessere Lösungsansätze, aber die wollen mir gerade nicht einfallen
ciao
romy
Hallo nochmals,
naja, habe nur eine vielleicht nicht ganz ergonomische Lösung parat ;)
result[i+j], so vermeidest Du auf jeden Fall die Überschreibungen
das ist dann wohl doch eine falsche Aussage!
sorry
benutze, dann halt k als resultvariable und zähle es bei jedem Durchlauf hoch, also in der zweiten for-schleife, so müsste es gehen
ciao
romy
Ja Hallo,
AUBACKE! Das ich das nicht gesehen habe *Klatsch-an-die-Stirn*. Einleuchtend das i andauernd überschrieben wurde. Jetzt sieht das ganze so aus und tut auch was ich will :)
function makeCoordsY(h,v){
var res_1 = getCoordY('zero','IMG');//bekommt Werte aus einer anderen Funktion
var res_2 = getCoordY('distY','IMG');//hier ebenfalls
var diff = res_2 - res_1;//Differenz berechnen
var k = 0;//Eine Hilfsvaiable
var l = 0;//noch eine
var result = new Array();
for(i=0;i<v;i++){
for(j=0;j<h;j++){
result[l] = res_1+(diff*k);
l++;
}
k++;
}
return result;
}
Einen herzlichen Dank an die Romy :)