java - 完美shuffle算法实现错误

标签 java

这段代码对于完美的洗牌算法是否正确?我总是尝试生成一个从 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.

Refer this link

关于java - 完美shuffle算法实现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12791653/

相关文章:

java - 使用反射设置非静态字段

java - 了解 Android 应用程序中的内存泄漏

java - 如果缺少 hibernate 依赖项,方法 org.postgresql.jdbc.PgConnection.createClob() 尚未实现

java - 如何在java中制作分层Json

java - 在 VS Code 中执行 Java 时 Unresolved 编译问题

java - 我应该如何使用 EGit 处理多模块 Maven 项目?

java - 使用 Castor 解码时出现 NoClassDefFoundError

JavaFX - 从另一个线程更新 TextArea 并缺少迭代

Java:选择串口读取Arduino Uno

java - count()/sum() 的 ResultSetMetadata 列类型