1

我正在尝试一次生成三个随机不同的数字。但它没有正确生成它们。请帮我解决这个问题。

以下是我的代码

function makeRand(){
        var numLow = 1,
        numHigh = 7,        
        adjustedHigh = (parseFloat(7) - parseFloat(1)) + 1,        
        numRand = Math.floor(Math.random()*adjustedHigh) + parseFloat(numLow);
        console.log("In makeRand "+numRand);
        chkGen(numRand);
    }
    function chkGen(prev){
        console.log("In chkGen "+prev);
        if(latest===prev){makeRand();}
        old=prev;
        latest=prev;
        console.log("Old is Now "+old);
        return prev;
    }

$(document).ready(function(){
   window.old=0;
   window.latest=0; 
   for(i=0;i<3;i++){
    console.log("Started Here "+old);
    var rnd=chkGen(old);
    imgNo[i] = rnd;
    }
   alert(imgNo);
});
4

4 回答 4

1

此函数将根据您想要的数量(数量)、您想要的最高(最大)和您想要的最低(最小)返回一个唯一数字的数组。

function randomNumbers(amount,max,min){
    var x = 1;
    var numbers = new Array();
    while (x <= amount) {
       a = Math.floor(Math.random() * (max - min + 1)) + min;
       var count=numbers.length;
       var unique = true;
       for(var i=0;i<count;i++)
       {
           if(numbers[i]===a){unique = false;}
       }
       if (unique){
          numbers.push(a);
          x = x+1;
       }
    }
    return numbers;
}
于 2013-05-08T06:54:57.690 回答
0

你看起来像这样吗 http://jsfiddle.net/YuyNL/69/

var chars = "0123456789";
var string_length = 3;
var num_chars = chars.length;
var result1 = '';
var result2 = '';
var result3 = '';

while(string_length--) {
    result1 += chars[Math.floor(Math.random() * num_chars)];
    result2 += chars[Math.floor(Math.random() * num_chars)];
    result3 += chars[Math.floor(Math.random() * num_chars)];

}
$('body').prepend(result1 + '<br>'+result2 + '<br>'+result3 + '<br>');

如果你愿意,你也可以添加字符,你也可以增加数字的长度。

于 2013-05-08T06:54:30.130 回答
0

如果要检查重复项,jQuery 有一个有用的方法:jQuery.inArray()

function makeRand() {
    var numLow = 1,
        numHigh = 7,
        adjustedHigh = (parseFloat(7) - parseFloat(1)) + 1,
        numRand = Math.floor(Math.random() * adjustedHigh) + parseFloat(numLow);

    return numRand;
}

$(document).ready(function () {
    imgNo = new Array();
    while(imgNo.length < 3) {
        var rnd = makeRand();
        if($.inArray(rnd, imgNo) >= 0) continue;
        imgNo.push(rnd);
    }
    alert(imgNo);
});

http://jsfiddle.net/samliew/E4QkQ/

于 2013-05-08T06:56:41.350 回答
0

试试这个:

function generate_three_random_numbers()
{
    var random_numbers = [];

    while(true) {
        // generate random number
        var num = Math.floor(Math.random()*((parseFloat(7) - parseFloat(1)) + 1)) + parseFloat(1);
        if ($.inArray(num, random_numbers) === -1) {
            random_numbers.push(num);
        }

        if (random_numbers.length === 3) {
            break;
        }
    }

    return random_numbers;
}
于 2013-05-08T07:03:26.723 回答