【发布时间】:2015-08-31 10:03:23
【问题描述】:
我要做的是为希腊彩票游戏 (Tzoker) 生成 6 个随机数,其中 5 个在 1-45 范围内,1 个在 1-25 范围内。前 5 个数字应该是唯一的。通过按下一个按钮,我想使用 jQuery 将这些数字添加到一个 div 中(这部分我有一些工作代码)。
我认为使用循环会很容易,但我发现自己无法检查生成的数字是否已经存在。循环只会包含前 5 个数字,因为最后一个数字可以等于其他 5 个数字之一。
【问题讨论】:
我要做的是为希腊彩票游戏 (Tzoker) 生成 6 个随机数,其中 5 个在 1-45 范围内,1 个在 1-25 范围内。前 5 个数字应该是唯一的。通过按下一个按钮,我想使用 jQuery 将这些数字添加到一个 div 中(这部分我有一些工作代码)。
我认为使用循环会很容易,但我发现自己无法检查生成的数字是否已经存在。循环只会包含前 5 个数字,因为最后一个数字可以等于其他 5 个数字之一。
【问题讨论】:
让我建议你一些更简单的解决方案。
Math.random(加减一些,read the docs of Array.sort 找出)作为比较函数对列表进行排序。您将获得随机顺序的列表。这样您就不会将您的逻辑(获取数字)与您的演示文稿(将内容放入 DOM)混为一谈。
我将实现留给读者作为练习。 :)
【讨论】:
Math.ceil(Math.random()*25).
像这样?
$(function() {
$('button').on('click', function(e) {
e.preventDefault();
var numArray = [];
while( numArray.length < 5 ) {
var number = Math.floor((Math.random() * 45 ) + 1);
if( $.inArray( number, numArray ) == -1 ) {
numArray.push( number );
}
}
numArray.push( Math.floor((Math.random() * 25 ) + 1) );
$('div').html( numArray.join("<br />") );
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Generate</button>
<div></div>
【讨论】:
虽然这可能不是您所要求的,但如果您使用lodash,这将很简单:
_.sample(_.range(1, 46), 5) // the 5 numbers from 1..45
_.random(1, 26) // one more from 1..25
这就是functional programming 如此酷的原因。您可以阅读例如Javascript Allonge 以了解更多信息。
【讨论】:
var tzoker = $("#tzoker");
var results = $("#results");
tzoker.click(function() {
results.empty();
var properResults = [];
var rand = 0;
var contains = false;
for (i = 1; i < 7; i++) {
do
{
(rand = Math.floor((Math.random() * (i != 6 ? 45 : 25)) + 1));
contains = properResults.indexOf(rand) > -1;
} while(contains)
results.append("<br />", rand, "<br />");
properResults.push(rand);
}
});
这是解决方案的主要思想。您可以将最大值定义为随机数的参数。 然后,检查项目是否存在于一个仅包含您想要的数据的简单数组中。
【讨论】:
您可以使用通用函数生成从1 到maxValue 的随机数,并且仅当它们不存在时才将它们添加到数组中。然后,为了显示,循环遍历数组项并将它们附加到#randomNumbers。
HTML
<div id="randomNumbers"></div>
JS(使用 jQuery)
var randomNumbersArray = [];
$(function() {
generateRandomNumbers();
displayRandomNumbers();
});
function generateRandomNumbers() {
for (i = 0; i < 5; i++) {
generateRandomNumberFrom1To(45);
}
generateRandomNumberFrom1To(25);
}
function generateRandomNumberFrom1To(maxValue) {
var randomNumber;
do {
randomNumber = Math.ceil(Math.random() * maxValue);
} while ($.inArray(randomNumber, randomNumbersArray) > -1);
randomNumbersArray.push(randomNumber);
}
function displayRandomNumbers() {
for (i in randomNumbersArray) {
$("#randomNumbers").append(randomNumbersArray[i] + "<br>");
}
}
【讨论】: