我正在使用此函数来重排4元素数组。它可以很好地改变前3个元素,随机地随机播放它们,但最后一个元素有时只会随其他三个元素一起拖曳。
public function shuffleArray(objA:Object, objB:Object):int{
return Math.round(Math.random() * 2) - 1;
}
答案 0 :(得分:0)
它没有什么问题。这是随机的。如上所述,用于Math.random()
的算法有所不同,我不相信AS3算法特别好。
出于测试目的,我在JS中运行了几次并看到了非常类似的东西,其中特定索引连续几次相同。我的结果显示连续5-10次,其中一个索引将完全相同。在一些测试中,我看到完全相同的结果连续出现11次。使用更高maxValue
(我尝试过15)运行它会导致更随机的结果,尽管它仍然存在相同的问题。有趣的是,颠覆迭代似乎打破了这种模式。我注意到它随着尝试的增加而变得稍微随机(我尝试了10k)。
var maxValue = 4,
iterations = 100,
a = [];
for (var i = 1; i <= maxValue; i++) {
a.push(i);
}
function shuffle(a, b) {
return Math.round(Math.random() * 2) - 1;
}
for (var i = 0; i < iterations; i++) {
console.log(a.sort(shuffle));
}
我在Flash中测试了相同的代码(显然对AS3进行了一些小的改动)并且看到了大部分类似的结果(可以预料;我相信Flash和JS使用非常相似的算法,如果不是同一个算法)。只有24种不同的组合可以对4项阵列进行排序。你必然会重复。