这段代码对于完美的洗牌算法是否正确?我总是尝试生成一个从 0 到 n 的数字,并将该数字与数组中的最后一个元素交换,从而减少 n 的范围。然而,当 n=0 时,我得到一个异常。我该如何处理这种情况?
int [] array ={1,2,3,4,5};
Random random = new Random();
int n=array.length;
while(n--!=0)
{
int number = random.nextInt(n);
int temp = array[n];
array[n] = array[number];
array[number] = temp;
}
编辑:如果我将其更改为 --n >0 那么它可以正常工作,但是在这种情况下我是否正确实现了洗牌算法,因为我从未对 n=0 执行任何操作?
最佳答案
在您的代码段中
while(n--!=0)
if n is 1, it will become 0 and `random.nextInt(0)` will return an error.
关于java - 完美shuffle算法实现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12791653/