2014-03-27 9 views
0

試圖讓我的彩票機到而不是隨機化我的「彩票券」中的相同數字,但我跑到了死衚衕。這裏最好的課程是什麼?要使用if-else語句,或者其他的東西?JavaScript - 如何讓math.random不隨機化相同的數字,而使用數組和手動索引字段?

var ask = prompt("How many lines you want?"); 

function numbers() { 

    var field = []; 
    field[0] = Math.floor(Math.random()*39)+1 + ' '; 
    field[1] = Math.floor(Math.random()*39)+1 + ' '; 
    field[2] = Math.floor(Math.random()*39)+1 + ' '; 
    field[3] = Math.floor(Math.random()*39)+1 + ' '; 
    field[4] = Math.floor(Math.random()*39)+1 + ' '; 
    field[5] = Math.floor(Math.random()*39)+1 + ' '; 
    field[6] = Math.floor(Math.random()*39)+1 + ' '; 

    field.sort(function(a,b){return a-b}); 
    var fieldlength = field.length; 
    for (var i = 0; i < fieldlength; i++) { 
     document.write(field[i]); 
    } 
}; 

for(var x=0; x<ask; x++) { 
numbers(); 
document.write('<br>'); 
} 

我已經包含的代碼確實在看什麼圖片,我只想澄清:https://www.dropbox.com/s/wqgvzt8n8bjqcsy/example.png

回答

0

http://bost.ocks.org/mike/shuffle/

使用費雪耶茨洗牌洗牌一組數字。

function shuffle(array) { 
    var m = array.length, t, i; 

    // While there remain elements to shuffle… 
    while (m) { 

    // Pick a remaining element… 
    i = Math.floor(Math.random() * m--); 

    // And swap it with the current element. 
    t = array[m]; 
    array[m] = array[i]; 
    array[i] = t; 
    } 

    return array; 
} 

var ask = prompt("How many lines you want?"); 

function numbers() { 
    var numbers = []; 
    for (var i=1; i<40; i++) { 
     numbers.push(i); 
    } 
    numbers = shuffle(numbers); 
    var field = []; 
    field[0] = numbers.pop() + ' '; 
    field[1] = numbers.pop() + ' '; 
    field[2] = numbers.pop() + ' '; 
    field[3] = numbers.pop() + ' '; 
    field[4] = numbers.pop() + ' '; 
    field[5] = numbers.pop() + ' '; 
    field[6] = numbers.pop() + ' '; 

    field.sort(function(a,b){return a-b}); 
    var fieldlength = field.length; 
    for (var i = 0; i < fieldlength; i++) { 
     document.write(field[i]); 
    } 
}; 

for(var x=0; x<ask; x++) { 
numbers(); 
document.write('<br>'); 
} 
+0

感謝您提供清晰易懂的解決方案,但是您能否解釋「.pop()」的作用? – user3465990

+0

它抓取數組中的最後一個元素。只需選擇最上面的數字並將其刪除即可。 –

0

我會做的是生成隨機數時,最好在蜱的系統時間加上種子,然後模下來到你要求的範圍內。如果一個數字已經連續存在,你仍然需要重新生成,但是你的隨機性會更好。

0

這裏是一個蠻力方法。 while循環沒有主體,但它不會繼續,直到它找到一個不在數組中的數字。請注意,如果生成的數字超過範圍(也就是說,您需要在0-20範圍內生成40個唯一數字),則此代碼將導致無限循環。但是,大多數方法仍然更有效。

var ask = prompt("How many lines you want?"); 

function numbers() { 
    var numbers = 4; 
    var nums = [], current; 

    for (var i = 0; i < numbers; i++) { 
     while (nums.indexOf(current = Math.floor(Math.random() * 39)) != -1); 
     nums.push(current); 
    } 

    for (var i = 0; i < numbers; i++) { 
     document.write(nums[i] + ','); 
    } 
}; 

for(var x=0; x<ask; x++) { 
    numbers(); 
    document.write('<br>'); 
} 
+0

嗯,有蠻力的方法。 –

+0

謝謝,我會牢記這一點。 – user3465990

相關問題