如何使函数返回与上一次返回不同的数字,直到它返回所有提供的数字为止。
我有这个功能(在最大和最小之间返回一个随机数),我每秒都调用它:
private function randomNumber(maxNumber:int, minNumber:int = 0):int
{
return Math.floor(Math.random() * (1 + maxNumber - minNumber) + minNumber);
}
假设第一次返回数字 2 。第二次必须返回 1 , 3 或 4 ,并说它返回 4 。第三次必须返回 1 或 3 ,并说它返回 1 。最后,除了1之外没有任何东西可以返回,它会返回它。
我怎么做到这样我只得到一次,直到我得到所有这些。 当发生这种情况时,我可以重置该功能,这样我就可以再次获得从 1 到 4 的随机数。并无限期地重复这一点。
答案 0 :(得分:1)
因为它需要记住已经选择了哪些项目,所以您需要存储所选的数字以检查它们。所以,我认为这不会生活在一个独立的功能中。
一种解决方案是创建一个包含您要选择的值的数组,以及一个已选择的值的数组:
var nums:Array = [ 1, 2, 3, 4 ];
var selected:Array = [];
然后,在新功能中,您将所选数字添加到选定的数组中,同时返回它们:
function getNextRandomNum() {
do {
// select a random item from the *nums* array
var index = randomNumber(nums.length - 1);
var num = nums[index];
// loop until the number does not appear in the *selected* array
} while (selected.indexOf(num) != -1)
// add number to *selected* array
selected.push(num);
// reset *selected* array if it's the same length as the *nums* array
if (selected.length == nums.length) {
selected = [];
}
return num;
}