对于每个循环异常

时间:2012-04-02 11:04:52

标签: java arrays foreach

我的第二个打印行中有例外。

int num[] = {50,20,45,82,25,63};
System.out.print("Given number : ");
for(int d:num){
System.out.print("  " + num[d]);
}

控制台输出

Given number : Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 50

为什么不采用所有数组元素而只采用50?

5 个答案:

答案 0 :(得分:6)

for(int d:num)循环中,每个项目都由d而非num[d]

表示

所以,这是应该如何做的。

for(int d:num){
    System.out.print("  " + d);
}

简单的干运行会告诉你哪里出错了。

  

对于第一个循环,您的陈述将归结为 num[50] ,这在任何地方都无法使用,因此您将获得例外。


但是,如果您尝试使用索引编制,那么下面的一个简单技巧就可以解决问题

int index = 0;
for(int d:num){
    System.out.print("  " + num[index++]);
}

但我真的相信,这是正确解决问题的方法。

答案 1 :(得分:3)

对于每个循环 num [any index] 不是必需的。它只是从第一个索引检索到最后一个索引,并将它们中的每一个分配给变量d。所以你只需要打印值d。

for(int d:num){
System.out.print("  " + d);
}

答案 2 :(得分:1)

使用增强型for循环,您可以直接在示例中使用可变“d”:

System.out.print(d);

获得ArrayIndexOutOfBound的原因是num[d]尝试在第一次迭代时访问数组中的第50位。 (哪个超出范围)。

答案 3 :(得分:0)

在使用每个循环时,不要使用数组索引。

在您的代码中,

int num[] = {50,20,45,82,25,63};
System.out.print("Given number : ");
for(int d:num)
{
    System.out.print("  " + num[d]);
}
第一次迭代中的

将产生d = 50,这是您想要的结果。如果您使用num[d],则会产生num[50],这是错误的索引。

相反,请使用以下代码

for(int d:num)
{
    System.out.print("  " + d);
}

答案 4 :(得分:0)

你可能想要编码如下。

for(int d:num){
System.out.print("  " + d);
}

How does the Java 'for each' loop work?