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

时间:2019-03-27 23:08:00

标签: java arrays for-loop poker

我目前正在开发一个程序,该程序将掷出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个随机整数]

4 个答案:

答案 0 :(得分:2)

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

使用传统的for循环。

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

    dice[index] = roll;
}

答案 1 :(得分:1)

这里

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

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

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

答案 2 :(得分:0)

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的值作为要更改的索引

答案 3 :(得分:0)

325.0中:

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

在您的情况下,元素始终为dice[element],因为Java将element放入新创建的数组中。

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

0