2012-04-13 16 views
18

के बीच मैं एक यादृच्छिक संख्या जनरेटर बनाने की कोशिश कर रहा हूं जो दो संख्याओं के बीच यादृच्छिक संख्या उत्पन्न करता है। उदाहरण के लिए, मान लीजिए कि मैं 4 और 10 के बीच एक यादृच्छिक संख्या उत्पन्न करने के लिए चाहते हैं, मैं इसे से 4 किसी भी संख्या से चुनने के लिए सक्षम होने के लिए चाहते हो जाएगा - 10 यहाँ मैं क्या करने की कोशिश की है:जावास्क्रिप्ट रैंडम इंटीजर दो नंबर

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 == ""//returns true क्योंकि दोनों falsy 0 === ""//returns false हैं।

+0

धन्यवाद, कोड की उस पंक्ति ने इसे ठीक किया है। की सराहना की। –

+0

क्या आप जानते हैं कि मेरा "कृपया सुनिश्चित करें कि पहला नंबर दूसरे नंबर से छोटा है" काम नहीं कर रहा है जब मैं पहली संख्या को शून्य करता हूं लेकिन शून्य? –

+0

@ जैक डेविस मुझे यकीन नहीं है कि क्या गलत है क्योंकि ऐसा लगता है कि यह मेरे लिए ठीक काम कर रहा है। मेरे पास 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

सुनिश्चित नहीं है कि आपने मेरा अद्यतन उत्तर देखा है या नहीं, लेकिन अब कई स्रोत हैं। माना जाता है कि पहला लिंक/कोड मोज़िला डेवलपर सेंटर से है। – Ian

+0

मुझे एहसास है कि समस्या भी इसलिए है क्योंकि आप तारों को तारों में परिवर्तित नहीं कर रहे हैं। लेकिन संचालन के क्रम के कारण ऊपर दिए गए getRandomInt() फ़ंक्शन का उपयोग करके इसे टाला जा सकता है। चूंकि यह "1" जोड़ने से पहले "अधिकतम - मिनट" पूरा करता है, परिणाम एक int है (जब तक अधिकतम और न्यूनतम मान्य संख्याएं हों) ... तो शेष गणना पूर्णांक के रूप में की जाती है और सटीक होना चाहिए। – Ian

1

कैसे इस बारे में?

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

का उपयोग करते हैं तो सबकुछ से बचा जा सकता है, मैंने कार्यान्वित किया कि मैंने प्रश्न में पोस्ट किए गए फ़ंक्शन में, और यह अभी भी प्रतीत नहीं हुआ काम करो और मुझे संख्याएं दें जो बड़े होने के रास्ते थे। –

+0

मैं आपकी समस्या को दोबारा पढ़ता हूं, और यह कोड मूल रूप से वही है जो आपको मिला है - बस पठनीयता के लिए कुछ अतिरिक्त कोष्ठक के साथ। ऐसा नहीं लगता कि समस्या यादृच्छिक जनरेटर में निहित है। – mccambridge

+0

ठीक है, मैंने सीखा है कि अन्य टिप्पणियों से। यह है कि मैं एक पूर्णांक में परिवर्तित नहीं कर रहा हूँ। –

संबंधित मुद्दे