为什么有一个元素没有显示?

时间:2016-12-09 00:55:15

标签: java arrays random

我正在练习在数组中创建随机生成的整数,然后随机化数组中的元素。当我打印数字时,一切都很好,但是当我显示随机元素时,似乎有一个元素无法打印。我有遗漏的一步吗?

public class shufflingArrays {
public static void main(String[] args) {


    int[] myList = new int[10];
    System.out.println("Numbers:");
    for(int i = 0; i < myList.length; i++) {
        myList[i] = (int)(Math.random() * 100);
        System.out.print(myList[i] + " ");
    }
    System.out.println("\nRandomized:");

    for (int i = myList.length - 1; i > 0; i--){
        //Generate index j randomly with 0 <= j <= i
        int j = (int)(Math.random() * (i + 1));

        //Swap myList[i]; with myList[j]
        int temp = myList[i];
        myList[i] = myList[j];
        myList[j] = temp;
        System.out.print(myList[i] + " ");
    }   
}

2 个答案:

答案 0 :(得分:5)

您的for循环具有条件i > 0,这意味着i == 0它将终止并且不会打印出第一个数组元素。

但是,如果您正在进行Fisher-Yates随机播放,则确实需要从myList.length-1转到1,因此您的初始代码是正确的。然后,您无法从同一个循环中打印出数组中的所有元素,因此要么在打印出元素后使用另一个循环,要么在之后添加System.out.print(myList[0]);

答案 1 :(得分:2)

例如:for (int i = 4; i > 0; i--)

仅在for时运行i = 4, 3, 2, 1循环而不在i = 0时运行,因为条件为i > 0。将i > 0中的for (int i = myList.length - 1; i > 0; i--)条件更改为i >= 0即可获得所需内容。