Java中的手动列表改组每次都会产生相同的结果

Esb*_*n86 2 java list

我正在尝试创建一个手动洗牌的方法.该列表被洗牌,但每次都会产生相同的结果.代码示例如下:

package ch11;
import java.util.ArrayList;
import java.util.Arrays;
public class Chapter_11_E07_ShuffleArrayList {

    public static void main(String[] args) {

        Integer[] array = {1, 2, 3, 4, 5, 6, 7, 8};

        ArrayList<Integer> intList = new ArrayList<>(Arrays.asList(array));

        System.out.println("Before shuffle: ");
        for (Integer x: intList)
            System.out.print(x + " ");

        shuffle(intList);

        System.out.println("\nAfter shuffle: ");
        for (Integer x: intList)
            System.out.print(x + " ");

    }

    public static void shuffle(ArrayList<Integer> intList) {
        // Simple solution
        // java.util.Collections.shuffle(intList);

        // Manual shuffle
        for (Integer x: intList) {

            int newIndex = (int) Math.random() * intList.size();

            Integer temp = intList.get(x);
            intList.set(x, intList.get(newIndex));
            intList.set(newIndex, temp);    
        }   
    }

}
Run Code Online (Sandbox Code Playgroud)

它似乎在某种程度上起作用,但Math.random * intList.size()每次产生相同的随机索引?输入非常感谢!

das*_*ght 12

这是因为

int newIndex = (int) Math.random() * intList.size();
Run Code Online (Sandbox Code Playgroud)

没有正确括号.它应该是

int newIndex = (int)(Math.random() * intList.size());
Run Code Online (Sandbox Code Playgroud)

为了避免像这样的简单错误,请创建新Random对象并调用nextInt(intList.size()).