2016-10-30 7 views
0

私は0-5 + 1(Dice。)の間の乱数を生成するJavascriptを使って簡単なスクリプトを作った。私の問題は、私がボタンを押したときに半分の時間、ダイスロールが現れる前に。私のボタンがスクリプトで動作しないのはなぜですか?

私はどこからでも見ましたが、問題の原因については何も見つかりませんでした。 Math.floor(Math.random() * 6) + 1;7を返す可能性があるため

<html> 
<head> 
</head> 
<body> 
<button type="button" onclick="spin()">Click here to roll the Dice!</button> 
<img src="" id="demo"> 
<script> 
function spin() { 
     if (Dice() == 1) { 
      document.getElementById("demo").src="http://i.imgur.com/QRTs9Ax.png"; 
     } 
     else if (Dice() == 2) { 
      document.getElementById("demo").src="http://i.imgur.com/OMz1o8U.png"; 
     } 
     else if (Dice() == 3) { 
      document.getElementById("demo").src="http://i.imgur.com/J4Xx2yO.png"; 
     } 
     else if (Dice() == 4) { 
      document.getElementById("demo").src="http://i.imgur.com/CJb2ojk.png"; 
     } 
     else if (Dice() == 5) { 
      document.getElementById("demo").src="http://i.imgur.com/8W6UL5O.png"; 
     } 
     else if (Dice() == 6) { 
      document.getElementById("demo").src="http://i.imgur.com/NGxBete.png"; 
     } 
} 

</script> 
<script> 
function Dice() { 
    return Math.floor(Math.random() * 6) + 1; 
} 
</script> 
</body> 
</html> 

答えて

1

ストアを変数にいったんdice()の値とif文でそれを確認してください:あなたはこのようswitchを構築する必要があります。毎回値を再生成していますので、チェックする際に現在の値が得られるという保証はありません。

また、paoloに記載されているように、Math.floor(Math.random() * 6) + 1;7を返すことができます。

<html> 
<head> 
</head> 
<body> 
<button type="button" onclick="spin()">Click here to roll the Dice!</button> 
<img src="" id="demo"> 
<script> 
function spin() { 
    var dice = Dice(); 
     if (dice == 1) { 
      document.getElementById("demo").src="http://i.imgur.com/QRTs9Ax.png"; 
     } 
     else if (dice == 2) { 
      document.getElementById("demo").src="http://i.imgur.com/OMz1o8U.png"; 
     } 
     else if (dice == 3) { 
      document.getElementById("demo").src="http://i.imgur.com/J4Xx2yO.png"; 
     } 
     else if (dice == 4) { 
      document.getElementById("demo").src="http://i.imgur.com/CJb2ojk.png"; 
     } 
     else if (dice == 5) { 
      document.getElementById("demo").src="http://i.imgur.com/8W6UL5O.png"; 
     } 
     else if (dice == 6) { 
      document.getElementById("demo").src="http://i.imgur.com/NGxBete.png"; 
     } 
} 

</script> 
<script> 
function Dice() { 
    return Math.floor(Math.random() * 6) + 1; 
} 
</script> 
</body> 
</html> 
2

:ここに は私のコードです。 Math.random()は、あなたが常に16の間の値をreciveますので、単に値をカット1Math.floorが含まれていないので、

EDIT

Math.floor(Math.random() * 6) + 1;Mozilla Developersに応じ7返すことはできません。

if (Dice() == x)で関数を起動すると、すべてのis文に対して別の戻り値が返されます。

function spin() { 
    switch (Dice()) { 
    case 1: 
     document.getElementById("demo").src = "http://i.imgur.com/QRTs9Ax.png"; 
     break; 
    case 2: 
     document.getElementById("demo").src = "http://i.imgur.com/OMz1o8U.png"; 
     break; 
    case 3: 
     document.getElementById("demo").src = "http://i.imgur.com/J4Xx2yO.png"; 
     break; 
    case 4: 
     document.getElementById("demo").src = "http://i.imgur.com/CJb2ojk.png"; 
     break; 
    case 5: 
     document.getElementById("demo").src = "http://i.imgur.com/8W6UL5O.png"; 
     break; 
    case 6: 
     document.getElementById("demo").src = "http://i.imgur.com/NGxBete.png"; 
     break; 
    } 
+0

私はそれが見、1〜6の間の値を返すことができポジティブだ、これは7を返すことができるとは思わない:http://stackoverflow.com/a/4960020/1333836 –

1

あなたはフローリング後+ 1ことによってそれを増加させることによって0を返すからあなたの乱数を維持しようとしています。ただし、Math.random()が正確に1.0を返した場合、乗算は正確に6になり、6にフロイドしてから+ 1が追加され、7になります。

代わりに、5で乱数の倍数のみを入力してください。

return Math.floor(Math.random() * 5) + 1; 

Math.ceil()を使用してください。常に最も近い整数に丸めます。

return Math.ceil(Math.random() * 6); 
+0

は、私はこれを考えていません7を返すことができます。私は1から6の間の値を返すことができますが、肯定的です。http://stackoverflow.com/a/4960020/1333836 'Math.random()'には、1. –

+0

が含まれていません@KaloyanKosev場合、関数は常に動作していないのですか?明らかに、上限値または下限値のいずれかが生成されています。 – Soviut

+0

私の推測では、関数はすべてのif文で呼び出されます。だから合計6回。この呼び出しのたびに、別の値を返します。どの段階でも条件を満たしていない可能性があります。 –

0

これ以外のすべてのif文にはDice()関数が呼び出されています。

あなたは数が生成されているコンソール上で見ることができ、私はa fiddleを作成しましたが、あなたのスピン関数は次のように行くだろう:以来、

function spin() { 
    var number = Dice(); 
    console.log(number); 
    switch (number) { 
    case 1: 
     document.getElementById("demo").src="http://i.imgur.com/QRTs9Ax.png"; 
     break; 
    case 2: 
     document.getElementById("demo").src="http://i.imgur.com/OMz1o8U.png"; 
     break; 
    case 3: 
     document.getElementById("demo").src="http://i.imgur.com/J4Xx2yO.png"; 
     break; 
    case 4: 
     document.getElementById("demo").src="http://i.imgur.com/CJb2ojk.png"; 
     break; 
    case 5: 
     document.getElementById("demo").src="http://i.imgur.com/8W6UL5O.png"; 
     break; 
    case 6: 
     document.getElementById("demo").src="http://i.imgur.com/NGxBete.png"; 
     break; 
    } 
} 

また、あなたは同じ番号を取得することが複数回ランダムです。

0

ちょうどDice()が静的​​な値を持たず、各if文で異なる値を返すかもしれないので、複数のifで同じ乱数も返すことがあります。

したがって、生成された数値を変数に格納し、if文を好きなように実行します。

この例は、imgsアレイからのランダムイメージを選択したもので、コードとして実行する必要があります。

//add images what ever. 
var imgs = [ 
      "http://i.imgur.com/QRTs9Ax.png", 
      "http://i.imgur.com/OMz1o8U.png", 
      "http://i.imgur.com/J4Xx2yO.png", 
      "http://i.imgur.com/CJb2ojk.png", 
      "http://i.imgur.com/8W6UL5O.png", 
      "http://i.imgur.com/NGxBete.png" 
      ]; 
    function spin() { 
     var d = Dice(); //store the number in a variable 
     //Dice(5); ===> if you want the max random number will be 5 
     var i = d-1; //to get the right position in array 
     if(imgs[i])document.getElementById("demo").src = imgs[i]; 
     //Also if you want additional statements use if(d == 1){}else if(d == 2){} 
    } 

    function Dice(max){ 
    max = max || imgs.length; 
    return Math.floor(Math.random() * max) + 1; 
    } 
関連する問題