我需要在Lua代码中寻求一点帮助。想法是获取一个0
-18
之间的随机数,但不能是数字8
或16
。怎样实现呢?
self.currentSkyTexture = math.random(0,18)
-- 不是
8
或者 16
,那么怎么办?local rans = {0,1,2,3,4,5,6,7,9,10,11,12,13,14,15,17,18}
从表格中选择
function myRandom() return rans[math.random(#rans)] end
这会以均匀的概率从表格中选择一个条目,并为每个条目调用一次 math.random
。
由于在19个可能的随机数中只有2个例外,因此暴力方法不会导致性能问题。
function myRandom()
local ret
repeat
ret = math.random(0,18)
until ret ~= 8 and ret ~= 16
return ret
end
self.currentSkyTexture = myRandom()
function skipRandom()
local ret = math.random(0,16)
if ret == 8 then
ret = 17
elseif ret == 16 then
ret = 18
end
return ret
end
self.currentSkyTexture = skipRandom()
只需检查它是否为8或16,并重新运行随机操作,直到其为其中之一。
只是为了好玩,这将生成特定参数的排除数组和函数:
function makeExcludedRandom(min,max,exclude)
local values = {}
local i = 0
local j = 0
table.sort(exclude)
while i < max-min-1 do
while exclude[j+1] == min+i+j do
j = j + 1
end
values[i+1]=min+i+j
i=i+1
end
return function()
return values[math.random(min,max)]
end
end
local skipRandom = makeExcludedRandom(0,18,{8,16})
self.currentSkyTexture = skipRandom()
简单的解决方案(如果使用少量数字,请使用第一个答案)。
function randomize()
local r = math.random(0,18);
if (r == 8 or r == 16) then
return randomize();
end
return r;
end
15
是故意的还是打错了? - greatwolf