2016-12-23 4 views
1

Ich versuche, ein einfaches Programm zu entwickeln, das alle Zahlen in druckt zwischen 1 und 100, die ohne Rest durch 3 teilen und berechnen Sie die GesamtsummeArray-Schleife in Javascript

Ich habe es mit for-Schleife:

var sum = 0; 
for (var i = 3; i <= 100; i = i + 3) { 
    document.write("<br/>" + i); 
    sum = sum + i; 
} 
document.write("<br/>sum = " + sum); //1683 

Aber ich nicht, wenn ich es mit Array machen wollte:

var numbers = []; 
var sum = 0; 
for (var i = 0; i <= 100; i = i + 3) { 
    numbers[i - 1] = i; 
} 

for (var index = 0; index < 100; index++) { 
    document.write("<br/>" + numbers[index]); 
    sum = sum + i; 
} 

document.write("<br/>sum = " + sum); 
+4

Drei Probleme, die ich sofort sehe: 'i - 1' wird' '- 1 'in der ersten Iteration. Wenn "i" durch "3" inkrementiert wird und als Array-Index verwendet wird, entstehen * Löcher * im Array. 'Zahlen' haben keine' 100' Elemente, also sollten Sie nicht von '0' auf '100' über iterieren. Was denkst du ist "i" in "sum = sum + i;"? –

+0

Warum verwenden Sie zwei Schleifen? http://stackoverflow.com/questions/41296674/array-loop-in-javascript/#41300246 versuchen Sie dies –

Antwort

1

Zugabe Nummer Array

var numbers = []; 
for(var i = 3; i <= 100; i = i +3){ 
    numbers.push(i); 
} 

Summierung und Druckwerte

var sum = 0; 
for (var i = 0; i < numbers.length; i++) { 
    document.write("<br/>" + numbers[i]); 
    sum = sum + numbers[i]; 
} 
document.write("<br/>sum = " + sum); //1683 
0

Indizes in einem Array mit Null beginnen.

for (var i = 0; i <= 100; i = i + 3) { 
    numbers[i - 1] = i; // In the first iteration, there will be numbers[-1] = i; 
} 
2

es so verwenden,

Array-Indizes von 0 beginnen sollte, deshalb habe ich eine andere Variable j = 0

var numbers = []; 
var sum = 0; 
for (var i = 0, j = 0; i <= 100; i = i + 3, ++j) { 
    numbers[j] = i; 
} 

eingeführt haben aktualisieren

Erste Problem: In Ihrem Code, dh. Code unten von Ihnen,

for (var i = 0; i <= 100; i = i + 3) { 
    numbers[i - 1] = i; 
} 

In der ersten Iteration

i = 0; 
numbers[0-1] = i // i.e numbers[-1] = 0; 

und in der zweiten Schleife, beginnen Sie den Index von 0

for (var index = 0; index < 100; index++) { 

Zweite Ausgabe:

Auch wenn Sie keinen sequentiellen Zähler zum Ausfüllen verwenden Das Array endet mit undefined Werten für diejenigen, die Sie nicht gefüllt haben.

enter image description here

Wenn Sie bemerken, wird der Ausgang nach der Schleife, sagt es numbers.length = 99 was falsch ist es nicht, dass viele Elemente darin haben wird.

Dritte Ausgabe:

Im folgenden Code, auch wenn Sie einen sequentiellen Zähler einzuführen, ist dies immer noch falsch

for (var i = 0; i <= 100; i = i + 3) { 
    numbers[i - 1] = i; 
} 

weil i mit 3 statt 0 beginnen sollte, sonst werden Sie am Ende up mit 34 Elementen im Array, weil numbers[0] 0 wird;

Vierte Ausgabe:

In diesem Code

for (var index = 0; index < 100; index++) { 
    document.write("<br/>" + numbers[index]); 
    sum = sum + i; 
} 

Sie tatsächlich haben es bis 100, haben Sie bereits eine Schleife haben nicht die Zahlen Array gefüllt, so dass Sie nur verwenden müssen numbers.length, wie diese

var len = numbers.length; 
for (var index = 0; index < len; index++) { 
    document.write("<br/>" + numbers[index]); 
    sum = sum + i; 
} 

Eine bessere Art zu schreiben Diese

var numbers = []; 
 
for (var i = 3, j=0; i <= 100; i = i + 3, j++) { 
 
    numbers[j] = i; 
 
} 
 

 
var sum = numbers.reduce((a, b) => a+b); 
 
console.log(sum);

Die Linie var sum = numbers.reduce((a, b) => a+b); verwendet Array.reduce() Methode.

+0

Das ist nur eines der Probleme. –

+0

In der zweiten Schleife kann Zahlen-Array 33 Werte haben. Warum schleift du bis 100 Iterationen? –

+1

@NagaveerGowda adressiert das in der Antwort, danke –

0

Sie haben mehrere Probleme, die ich vermute.

var numbers = []; 
var sum = 0; 
for (var i = 0; i <= 100; i = i + 3) { 
    numbers.push(i); 
} 

for (var index = 0; index < numbers.length; index++) { 
    document.write("<br/>" + numbers[index]); 
    sum = sum + i; 
} 

document.write("<br/>sum = " + sum); 

Auch für das Array können Sie:

for (var i in array) { 
console.log(array[i]); 
} 

Und ich bin mir ziemlich sicher, dass Array von Zahlenfolge absolut nutzlos, wenn es keine anderen Informationen in ihm.

+0

* "Sie haben mehrere Probleme, die ich vermute." * Vielleicht können Sie erklären, was sie sind? –

+0

Siehe meine Codeänderungen. Zahlen [i-1] -> Zahlen [-1] in der ersten Iteration, die nicht existiert. Und erste For-Schleife hat 0-100 Iterationen und zweite hat nur 0-99. – MadDocNC

0

Versuchen Sie, diese

var numbers = []; 
var sum = 0; 
for (var i = 0; i <= 100; i = i + 3) { 
    numbers[(i-3)/3] = i; 
} 

for (var index = 0; index < numbers.length; index++) { 
    document.write("<br/>" + numbers[index]); 
    sum = sum + numbers[index]; 
} 

document.write("<br/>sum = " + sum); 

hier die Geige i versucht wird https://jsfiddle.net/4ncgnd7c/

1

Es gibt einige Probleme in Ihrem Code.

for (var i = 0; i <= 100; i = i + 3) { 
    numbers[i - 1] = i; 
} 

1: Array ist 0 basiert. Das erste Einfügen in das Array bedeutet also einen Toss.

2: die Anzahl Array-Skipping-Index wie 3 wird erstellt, 6, 9

for (var index = 0; index < 100; index++) { 
    document.write("<br/>" + numbers[index]); 
    sum = sum + i; 
} 

3: nur hier Sie iterieren Index bis 100, sollten Sie wiederholen es, bis die Länge der Zahlen-Array.

Wenn der Index 1,2 ist Nummer [Index] wird undefiniert.

4: sum = sum + i (i ??????)

Sie mögen diese versuchen sollten, oder Sie auch Push()

var numbers = []; 
 
var sum = 0; 
 
for (var i = 0,j=0; i <= 100; i = i + 3, j= j+1) { 
 
    numbers[j] = i; // array is 0 based. 
 
    
 
} 
 

 

 

 
for (var index = 0; index < numbers.length; index++) { 
 
    document.write("<br/>" + numbers[index]); 
 
    sum = sum + numbers[index]; 
 
} 
 

 
document.write("<br/>sum = " + sum);

0

verwenden können Dies sollte mit einer einzigen Schleife funktionieren

var numbers = []; 
var sum = 0; 
for (var i = 3; i <= 100; i = i + 3) { 
    numbers[i] = i; 
    document.write("<br/>" + i); 
    sum = sum + i; 
} 

document.write("<br/>sum = " + sum);