2011-03-28 115 views
1

我正在做一个android的骰子游戏,我有这个循环,用滚动“j”的数字滚动来填充数组。它是这样进行的这个for循环有什么问题?

int[] rolls = new int[6]; 
    for (int j : rolls) { 
     rolls[j] = (int) (Math.random() * 5); 
     rolls[j]++; 
     Log.i(getClass().getName(), "Rolls[" + j + "] = " + rolls[j]); 
    } 

除输出(在日志文件中是这样)

Rolls[0] = 4 
Rolls[0] = 2 
Rolls[0] = 3 
Rolls[0] = 6 
Rolls[0] = 3 
Rolls[0] = 4 

当我更改代码以这种

int[] rolls = new int[6]; 
    for (int j = 0; j < rolls.length ; j++) { 
     rolls[j] = (int) (Math.random() * 5); 

     rolls[j]++; 
     Log.i(getClass().getName(), "Rolls[" + j + "] = " + rolls[j]); 
    } 

输出是正确的

Rolls[0] = 4 
Rolls[1] = 2 
Rolls[2] = 3 
Rolls[3] = 6 
Rolls[4] = 3 
Rolls[5] = 4 

我一定在做s某处愚蠢的东西。

+0

谢谢大家的精彩答案(他们太快了!)andersoj得到正确的答案,因为他先回答。现在我得去讲我的HS电脑老师... – Gonzo 2011-03-28 02:35:40

回答

8

声明:

for (int j : rolls) 

在迭代中的条目rolls,而不是指数。由于Java中的数组初始化为0,因此对于6次迭代中的每一次,值j都为零。

2
for (int j : rolls) { 

当你做出一个新的数组,在轧辊的数量的值是0。

当您使用循环过你没有索引信息阵列的增强。

你保证迭代结束,所以如果你自己跟踪它,你可以这样做。但是,如果没有自己做,你就没有关于它的信息。

2

在第一个,j将是每个数组元素的初始值。在这种情况下,它们都是默认的0。