增强的 For 循环不会更改数组的所有元素

Enhanced For Loop not changing all elements of my array

我目前正在开发一个程序,该程序将掷 5 个骰子并将每个骰子的随机数存储在一个数组中。 我的问题是我的方法只更改第一个元素,而将其余元素保留为 0。 (可以说只掷第一个骰子)

我用 5 个值初始化了一个数组,然后 运行 这个方法将一个数组作为参数,检查元素是否为 0,如果是,它会分配一个 1 到 6 之间的随机值。

我试过做一个增强的 for 循环来查看数组中的每个元素,理论上如果它为零,它会为其分配一个 1 到 6 之间的随机整数。

public static void rollDice(int[] dice) {

for (int element: dice) {
    int roll = (int)(Math.random()*6) + 1;

    if (element == 0) {
        dice[element] = roll;
    }
}

我目前的结果是:[随机数, 0, 0, 0, 0] 我的预期结果是:[5 个随机整数]

public static void rollDice(int[] dice) {

for (int i=0;i<dice.length;i++) {
    int roll = (int)(Math.random()*6) + 1;

    if (dice[i]== 0) {
        dice[i] = roll;
    }
}

您将索引 0 更改了 5 次,因为您将数组位置 0 的值作为要更改的索引

这种形式的 Java for 循环遍历 values,而不是 indexes,阵列。所有值都是 0 并且您将它们用作索引。因此,您将第一个元素设置了 5 次。

使用传统的 for 循环。

for (int index = 0; index < dice.length; index++) {
    // Your roll here

    dice[index] = roll;
}

这里

if (element == 0) {
    dice[element] = roll;
}

你的代码说如果它是第一个元素,那么存储随机化的结果。由于其他元素不是第一个元素,在其他元素的情况下,条件将为假,因此不会存储卷。如果出现以下情况,请删除此内容:

//if (element == 0) {
    dice[element] = roll;
//}

dice[element]中:

element 不是循环的索引,它是数组中元素的值。

在您的情况下,元素始终是 0,因为 java 将 0 放入新创建的数组中。

在这种情况下,您应该使用普通的 for 循环:

for (int i = 0; i < dice.length; i++) {
        int roll = (int) (Math.random() * 6) + 1;

        if (dice[i] == 0) {
            dice[i] = roll;
        }
}