2012-04-13 4 views
18

두 숫자 사이에 난수를 생성하는 난수 생성기를 만들려고합니다. 예를 들어, 나는 4의 임의의 수를 선택할 수 있도록하려는 것,의 내가 4와 10 사이의 임의의 숫자를 생성 할 가정 해 봅시다 - 여기에 10 것은 내가 뭘하려 :Javascript 무작위 정수 두 숫자 사이

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

나를 위해 잘 작동하는 것 같다위한 좋은 유틸리티를 가지고있다. – 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; 

추가 시도 번호로 문자열을 변환되지 않습니다. 무슨 뜻인지 알아 보려면 값 중 하나에 0을 사용해보십시오. 0 == ""//returns true 모두가 위선이므로 0 === ""//returns false입니다.

+0

고마워요. 그 코드 줄이 고쳤습니다. 감사합니다. –

+0

왜 "첫 번째 숫자가 두 번째 숫자보다 작은 지 확인하십시오"라는 질문을 할 수 있습니다. 첫 번째 숫자를 0 이외의 값으로 만들면 작동하지 않습니까? –

+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

맞아, 나는 다른 의견들로부터 그것을 배웠다. 그것은 정수로 변환되지 않습니다. –

관련 문제