2012-04-13 12 views
18

2つの数字の間に乱数を生成する乱数ジェネレータを作成しようとしています。例えば、私は4と10の間の乱数を生成したいのは、言わせて、私は4から任意の数の中から選択できるようにしたい - ここに10.私が試したものです:Javascriptランダムな整数2つの数値の間

var randNumMin = 4; 
var randNumMax = 10; 
var randInt = (Math.floor(Math.random() * (randNumMax - randNumMin + 1)) + randNumMin); 

しかし、その動作していないようで、4と10の間にない奇妙な乱数を生成しました。いくつかは0で始まりました。これを行う正しいアルゴリズムは何でしょうか?

$(function() { 
    $('#generateRandNums').click(function() { 

     var numCount = document.getElementById("randNumCount").value; 
     var randNumMin = document.getElementById("randNumMin").value; 
     var randNumMax = document.getElementById("randNumMax").value; 

     if (numCount.match(/^[\d]*$/) && randNumMin.match(/^[\d]*$/) && randNumMax.match(/^[\d]*$/)) {  
      if (numCount == "" || randNumMin == "" || randNumMax == "") { 
       alert ("Please fill out all forms then try again."); 

      } else { 
       if (randNumMin>randNumMax) { 
        alert ("Please make sure your first number is smaller than the second, then try again."); 
       } else { 
        if (randNumMin<0) { 
         alert ("Please make sure that you generate a positive number of random numbers, then try again."); 
        } else { 

         if (numCount>1) { 
          var randResult = ("You generated " + numCount + " random numbers between " + randNumMin + " and " + randNumMax + " and got the numbers ") 
          oneNumber = 0; 
         } else { 
          var randResult = ("You generated a random number between " + randNumMin + " and " + randNumMax + " and got the number "); 
          oneNumber = 1; 
         } 
         for (i=0;i<numCount;i++) { 
         //Get a random number between randNumMin and randNumMax 
         var randInt = (Math.floor(Math.random() * (randNumMax - randNumMin + 1)) + randNumMin); 
          if (i == numCount-1) { 
           if (oneNumber == 0) { 
            randResult = (randResult + "and " + randInt + "."); 
           } else { 
            randResult = (randResult + randInt + "."); 
           } 
          } else { 
           randResult = (randResult + randInt + ", "); 
          } 
         } 
         $("#randNumResults").val(randResult); 
        } 
       } 
      } 
     } else { 
      alert ("Make sure you only enter numbers and no spaces, then try again."); 
     } 

    }); 
}); 

私もこれでrandIntラインを交換してみました:それはまだ動作しませんでした

var randInt = Math.floor((Math.random() * ((randNumMax + 1) - randNumMin)) + randNumMin); 

ここ

は私はアルゴリズムを実装していたコードです。 アルゴリズムが間違っているか、関数に間違っているかどうかはわかりません。答えはありがとう、ありがとう。これについて

+1

が私のために正常に動作するようです。この_.randomのための素晴らしい有用性を有します。 – qw3n

+1

よく見えます:http://jsfiddle.net/j08691/LYQKV/ – j08691

+0

私はそれを実装している関数を追加します。 –

答えて

2

あなたの問題は、あなたが番号にあなたの文字列に変換されることはありませんが、この

if ( numCount.match(/^[\d]*$/) && 
    randNumMin.match(/^[\d]*$/) && 
    randNumMax.match(/^[\d]*$/)){ 
    if (numCount === "" || randNumMin === "" || randNumMax === "") { 
    alert ("Please fill out all forms then try again."); 
    } else { 
    numCount=numCount-0;randNumMin=randNumMin-0;randNumMax=randNumMax-0; 

にあなたが値が厳密な等価に空の文字列であれば、あなたのチェックを変更する必要が別のノートを追加してみてください。私が何を意味するか見るには、値の1つにゼロを使用してみてください。 0 == ""//returns trueは両方とも虚偽であるため0 === ""//returns falseです。

+0

ありがとう、そのコード行はそれを修正しました。感謝。 –

+0

なぜ私は「最初の数字が2番目の数字よりも小さいことを確認してください」ということを知っていますか? –

+0

@JackDavisそれは私のためにうまくいっているように見えるので、何が間違っているのか分かりません。ここでは、私はhttp://jsfiddle.net/YLxPr/を持っているもののバイブルです。 – qw3n

49

Generating random whole numbers in JavaScript in a specific range?

/** 
* Returns a random number between min and max 
*/ 
function getRandomArbitary (min, max) { 
    return Math.random() * (max - min) + min; 
} 

/** 
* Returns a random integer between min and max 
* Using Math.round() will give you a non-uniform distribution! 
*/ 
function getRandomInt (min, max) { 
    return Math.floor(Math.random() * (max - min + 1)) + min; 
} 

http://roshanbh.com.np/2008/09/get-random-number-range-two-numbers-javascript.html

//function to get random number upto m 
function randomXToY(minVal,maxVal,floatVal) 
{ 
    var randVal = minVal+(Math.random()*(maxVal-minVal)); 
    return typeof floatVal=='undefined'?Math.round(randVal):randVal.toFixed(floatVal); 
} 

または

Generate random number between two numbers in JavaScript

+0

質問の関数のリンクで方程式を試してみましたが、機能しませんでした。 –

+0

更新された回答が表示されているかどうかわかりませんが、現在は複数のソースがあります。最初のリンク/コードは、おそらくMozillaデベロッパーセンターからのものです。 – Ian

+0

文字列をintに変換していないために問題があると感じています。しかしこれは、操作の順序のために上記で提供したgetRandomInt()関数を使用することで回避できます。 "1"を追加する前に "max - min"を完了するので、結果はint(最大値と最小値が有効な数値である限り)です...残りの計算は整数として行われ、正確でなければなりません。 – Ian

1

どのように?

var max = 10; 
var min = 4; 
var random = Math.floor((Math.random() * ((max + 1) - min)) + min); 
+0

私はその質問に投稿した関数で実装しました。仕事をして大きな数字になる数字を教えてください。 –

+0

私はあなたの問題を再読しました。このコードは基本的にあなたが持っているものと同じです。問題がランダムジェネレータにあるとは思わないでください。 – mccambridge

+0

そうです、私は他のコメントからそれを学びました。それは私が整数に変換していないことです。 –

関連する問題