0

このループが理解できないようです。

for (i = 1; i < 50; i++) {
    rand = Math.ceil(Math.random() * 49);
    temp = nums[i];
    nums[i] = nums[rand];
    nums[rand] = temp;
}

これは、より大きなコードの一部です。nums[i]は、それぞれのインデックス番号で満たされた1-49の配列であり、このforループを実行され、乱数で満たされます。

一時変数が作成される理由、nums[rand]=temp;コード行がどのように機能するのか、そしてそれが何をするのか、そしてなぜvarキーワードなしで初期化されないのか理解できません。

誰かがこのループがどのように機能するかを説明できますか?

4

2 に答える 2

1

nums配列の2つの値をランダムに交換しているだけです。最初のものを無視しますが、javascript配列は0から始まりますが、ループは1から始まるだけなので、2番目の配列要素からのみ始まります。

したがって、コードをステップスルーすると、ループを一周するたびに次のようになります。

nums = [a, b, c];  // just mocking some data

rand = 0..2;  // lets say it = 2
temp = nums[1]; // = 'b', the 2nd array element
nums[1] = temp;  // so nums[1] goes from 'b' to 'c'
nums[temp] = temp; // and nums[2] goes from 'c' to 'b'

全体的に、それはかなり悪いコードです。配列を使用している場合は、ループの上限に50をハードコーディングする代わりにarray.lengthを使用する必要があります。

于 2012-07-09T09:31:05.290 に答える
1

コードが行おうとしているのは、配列をシャッフルすることです。配列を調べて、位置ごとに一時変数に値を格納し、配列内の別の位置を選択して、値を他の位置と交換します。
これは、変数の値を交換する最も簡単な方法であるため、temp 変数が必要です。

于 2012-07-09T09:29:35.973 に答える