2017-06-09 7 views
0

このループが期待どおりに機能しない理由がわかりません。以下の例も参照してください。予想Xでカウントされてループが完了しない

function countBy(x, n) { 
     var z = []; 
     for (let i = x; i + x < x * n; i = i + x) { 
     z.push(i); 
     } 
     return z; 
    } 

'[1、2、3、4、5]' 代わり得、: '[1、2、3]'(X:1、N:5)
期待: '[2、4、6、8、10]'、代わりに得た: '[2,4,6]'(x:2、N:10)

+0

@Teemu Woopsは、例の後ろに追加しました。 –

答えて

2

xが1であり、そしてnが5の場合、iは1から4になります。iが4の場合、1 + 4が1 * 5以上であるためループが停止します。

同様に、xを2とし、nを10とします。ループ条件は、要求が早すぎると終了するように記述されています。それがあります

for (let i = x; i <= x * n; i = i + x) 
0

期待していない結果が正しいです。 iは、3回のXになるまで

function countBy(x, n) { 
     var z = []; 
     for (let i = x; i <= x * (n-2); i = i + x) { 
     z.push(i); 
     } 
     return z; 
    } 

nが5であるとき、このことは、ループにのみ機能します:と同等です

function countBy(x, n) { 
     var z = []; 
     for (let i = x; i < x * (n-1); i = i + x) { 
     z.push(i); 
     } 
     return z; 
    } 

あなたのコードは同等です。

正しいコードは次のようになります。

function countBy(x, n) { 
     var z = []; 
     for (let i = x; i <= n; i = i + x) { 
     z.push(i); 
     } 
     return z; 
    } 

だけあなたが欲しいどのバージョンを知っている:

function countBy(x, n) { 
     var z = []; 
     for (let i = x; i <= x * n; i = i + x) { 
     z.push(i); 
     } 
     return z; 
    } 

しかし、あなたの第二の例に一致するようにコードがあることが必要です。

0

あなたはnにxで数えるので、これを試してみたい:

function countBy(x, n) { 
 
    var z = []; 
 
    for (let i = x; i <= n; i = i + x) { 
 
     z.push(i); 
 
    } 
 
    return z; 
 
} 
 
    
 
console.log(countBy(1,5)) 
 
console.log(countBy(2,10)) 
 
console.log(countBy(3,10))

関連する問題