2017-02-17 4 views
0

私は1から80までの8つの乱数を取得し、指定されたdivに入れようとしています。Javascript乱数生成器

var numbers = [] 
 
var luckyNumber; 
 
var x = 1; 
 

 
while (x < 8) { 
 
    luckyNumber = Math.floor(Math.random() * 80 + 1); 
 
    if (numbers.indexOf(luckyNumber) == -1) { 
 
    for (var i = 1; i < 9; i++) { 
 
     document.getElementById('k' + i).innerHTML = numbers[i] 
 
    } 
 
    numbers.push(luckyNumber); 
 
    x++; 
 
    } 
 
} 
 

 
document.write(numbers);
<div id="k1">K1</div> 
 
<div id="k2">K2</div> 
 
<div id="k3">K3</div> 
 
<div id="k4">K4</div> 
 
<div id="k5">K5</div> 
 
<div id="k6">K6</div> 
 
<div id="k7">K7</div> 
 
<div id="k8">K8</div>

最後の2つの数値は、HTML結果に未定義示されています。しかし、document.writeで数字を確認すると、最後の2つの数字が表示されます。 この問題を解決するにはどうすればよいですか?

+0

すでにフィドルで働いて与えられたコード。私は編集が起こったと信じています。 –

答えて

0
  • whileループは、JavaScriptではなく、8
  • 配列は0インデックスされている7つの数字を生成する、1から7まで行くので、あなたは内の配列を通過するとき、 1から始まるforループは、最初の番号をスキップしています。
  • 新しい番号を除いて、古い番号で新しい番号を生成するたびにdivを埋めています。最後に生成された番号は、このプロセスに決して含まれません。

最も単純な修正は、whileループを修正し、forループを削除し、xを使用して、最新の数字を表示する場所を見つけます。

var numbers = [] 
 
var luckyNumber; 
 
var x = 1; 
 

 
while (x <= 8) { 
 
    luckyNumber = Math.floor(Math.random() * 80 + 1); 
 
    if (numbers.indexOf(luckyNumber) == -1) { 
 
    document.getElementById('k' + x).innerHTML = luckyNumber; 
 
    numbers.push(luckyNumber); 
 
    x++; 
 
    } 
 
} 
 

 
document.write(numbers);
<div id="k1">K1</div> 
 
<div id="k2">K2</div> 
 
<div id="k3">K3</div> 
 
<div id="k4">K4</div> 
 
<div id="k5">K5</div> 
 
<div id="k6">K6</div> 
 
<div id="k7">K7</div> 
 
<div id="k8">K8</div>

+0

最後の部分が私にとってはっきりしません。もう一度説明していただけますか?なぜ私のループは最初と最後のものの代わりに最後の2つのdivに書き込むことができないのですか?最初と最後の乱数がありませんが、最後の2つのdivは未定義です。 –

+0

forループが最後に実行されるので、 'numbers'配列はインデックス0-5に6つの要素しか含みません。したがって、divには配列に何もないので、 "undefined"でいっぱいになります。 – JJJ

+0

私は理解しました。私は "numbers.push(luckyNumber);を入れました。 beforeループの前に "numbers [i]"を数字[i-1]に変更しました。しかし、私はforループを8回実行することは効率的な方法ではないと思います。だから、あなたやキッターの最速の方法はどれですか? –

1

ループロジックが間違っているようです。数字の配列を最初に入力し、htmlを更新する必要があります。

var numbers = [] 
 
var luckyNumber; 
 
var x = 1; 
 

 
while (x < 9) { 
 
    luckyNumber = Math.floor(Math.random() * 80 + 1); 
 
    if (numbers.indexOf(luckyNumber) == -1) { 
 
    numbers.push(luckyNumber); 
 
    x++; 
 
    } 
 
} 
 
for (var i = 1; i < 9; i++) { 
 
     document.getElementById('k' + i).innerHTML = numbers[i-1] 
 
    } 
 

 
document.write(numbers);
<div id="k1">K1</div> 
 
<div id="k2">K2</div> 
 
<div id="k3">K3</div> 
 
<div id="k4">K4</div> 
 
<div id="k5">K5</div> 
 
<div id="k6">K6</div> 
 
<div id="k7">K7</div> 
 
<div id="k8">K8</div>

+1

コードには、問題の内容を説明する添付のテキストが含まれている必要があります。 –

+0

はい、もちろん、xの増分を見逃しました。ありがとう@JJJ。 – Abhitalks

+0

私は2つのパスの方法を好む。しかし、私は 'forEach'を使うか、2回目のループで' numbers.length'を2回使用するだけです。 –