数组shuffle函数不接触最后一个元素

时间:2014-06-20 19:02:27

标签: actionscript-3 flash air

我正在使用此函数来重排4元素数组。它可以很好地改变前3个元素,随机地随机播放它们,但最后一个元素有时只会随其他三个元素一起拖曳。

public function shuffleArray(objA:Object, objB:Object):int{
    return Math.round(Math.random() * 2) - 1;
}

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));
}

http://jsfiddle.net/KA2tf/1/

我在Flash中测试了相同的代码(显然对AS3进行了一些小的改动)并且看到了大部分类似的结果(可以预料;我相信Flash和JS使用非常相似的算法,如果不是同一个算法)。只有24种不同的组合可以对4项阵列进行排序。你必然会重复。