2017-10-31 8 views
3

私はクラスから要素の背景画像を設定するためにJavaScriptを使用しています。コードは大部分は機能しますが、コードを実行すると未定義の変数があります。私はMath.Random()を使用して変数の数値を取得しています。私のコードでの問題点(あるいは、少なくとも私はそれだと思う): JavaScript:配列から乱数を使用しているときに、定義されていない値が返されるのはなぜですか?

var RandomContentDiv = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 
var cd = RandomContentDiv[Math.round(Math.random()*RandomContentDiv.length-1)]; 
console.log(cd); 

私は数字が出力されているかを確認する console.log(cd);を置きます。結果は得られますが、結果は問題の解決には役立ちません。コードを2回実行してテストし、通常どんなものが得られるかを示します。

テスト1:

Number: 5 
Number: 13 
Number: 10 
Number: 1 
Number: 10 
Number: 6 
Number: 10 
Number: 3 
Number: 2 
Number: 15 
Number: 2 
Number: 3 
Number: 8 
Number: 15 
Number: 12 
Number: 7 
Number: 9 
Number: 2 
Number: 0 
Number: 8 
Number: 10 
Number: 3 
Number: 14 
Number: 13 
Number: 9 
Number: 1 
Number: 15 
Number: 13 
Number: 3 
Number: 2 
Number: 4 
Number: 14 
Number: 11 
Number: 0 
Number: 15 
Number: 7 
Number: 6 
Number: 1 
Number: 4 
Number: 7 
Number: 8 
Number: 6 
Number: 7 
Number: 4 
Number: 10 
Number: 0 
Number: 12 
Number: 11 
Number: 2 
Number: 7 
Number: 2 
Number: 11 
Number: 13 
Number: 6 
Number: 0 
Number: 5 
Number: 1 
Number: 2 
Number: 7 
Number: 8 
Number: 2 
Number: 13 
Number: 4 
Number: 3 
Number: 7 
Number: 15 
Number: 5 
Number: 1 
Number: 0 
Number: 2 
Number: 11 
Number: 8 
Number: 10 
Number: 12 
Number: 11 
Number: 1 
Number: 12 
Number: 11 
Number: 12 
Number: 0 
Number: 6 
Number: 8 
Number: 1 
Number: 11 
Number: 1 
Number: 12 
Number: undefined 

テスト2:

Number: 13 
Number: 2 
Number: 9 
Number: 0 
Number: 2 
Number: 0 
Number: 11 
Number: 3 
Number: 5 
Number: 3 
Number: 11 
Number: 3 
Number: 14 
Number: 15 
Number: 9 
Number: 8 
Number: 11 
Number: 12 
Number: 10 
Number: 3 
Number: 9 
Number: 0 
Number: undefined 

私はこの問題は、この文から来ていると思う:RandomContentDiv[Math.round(Math.random()*RandomContentDiv.length-1)];が、私はそれを修正する方法がわかりませんJavaScriptのためにMathで十分に深く掘り下げていないからです。私が知っていることは、誰かが丸めたときに不正確な数字を与えるMath.Roundについて何か言ったということです(つまり1.5は1に丸めることができます)。しかし、これはこれに当てはまるとは思いません。誰かがそれが何か問題を引き起こしているかどうかを教えてくれますか?

+0

質問には、あなたのコードが「すべて」含まれないようにしてください。コードを、問題を再現する最短の例に減らすべきです。つまり、 'Math.random()* length-1'は間違っています。 '*'は '-'より優先順位が高いため、操作の順序が間違っています。 ' - 'の前に ' - 'が来るように括弧を加えることで修正してください。 – meagar

+0

@meagarそれは "私のJavascriptコードはすべてここにあります"と私はあなたの解決策を試してみます –

+0

私は知っています。あなたの問題は、単一の3行のループで再現することができ、そのループを含める必要があります。これ以上何もない。 – meagar

答えて

1

これは、RandomContentDiv配列のインデックスを計算する方法です。

あなたのコードを使用すると、コンソールに未定義出て来ている番号を取得しているところ、この...

cd = RandomContentDiv[Math.round(Math.random()*RandomContentDiv.length-1)];

時々Math.random()はあなたにゼロに近い非常に小さな数を示していますこれは、あなたにはRandomContentDiv [-1]にアクセスしようとします。これは未定義です。

例getRandomInt関数をhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/randomにしてください。これは、0とRandomContentDiv.length-1の間の整数をランダムに選択する方法の例です。

+0

それは私が問題とするものです。しかし、私はネガを取り除こうとしましたが、それはまだ起こった。私のコードをより正確にするために、どうすればそれを変更できるのか知っていますか? –

+0

私が参照している例を参照してください。それはあなたが望むものである0からN-1までの数を生成する方法を示しています。 –

+0

問題は私のカッコであると提案したので、 'cd = RandomContentDiv [Math.round(Mandom)](RandomContentDiv.length-1))];'に変更しました。あなたの答えにそれを入れて、私はそれを受け入れます。 –

関連する問題