2015-09-27 232 views
0

下正常工作,循环变量增强的for循环

int i; 
for (i = 0; i < 10; i++) {} 

但这并不

// a is an ArrayList of Integers 
Integer i; 
for (i: a) {} 

,我不得不做这种方式:

for (Integer i : a) {} 

为什么第二个循环不起作用?

回答

0

对于for循环,您需要3个语句。 你的第二个循环只有2条语句,而你的第一条语句有3条。最重要的是,你从来没有初始化你的整数i。确保做到

int i =0; 
for(i;i<=10;i++){ 
} 

对于enchanced for循环,你必须有

for (String element : array) { 
System.out.println("Element: " + element); 
} 

你可以看看这个链接,它可能会有所帮助。 What is the syntax of enhanced for loop in Java?

+0

第二个是增强for循环。 – Corey

+0

是你的“一”指数组? – Randomshot6

+0

ArrayList,好友。 – Corey

1

想想这样:如果你总是初始化你的变量会发生什么?

第一种情况:在本例中初始化,显然没有问题。

在第二种情况下:初始化它,说,1.现在你有一个变量,“1”,你把它扔进这个for循环。 “for(1:a)”。那是什么意思??如果你为a中的每个值覆盖“i”的值,那么当它出现在循环中时,它只是A中的最后一个条目。再说一遍,那真的意味着什么?为什么这会有用?这个循环之外的其他代码的效果如何?支持它的设计很糟糕,它会导致各种疯狂的,意想不到的行为和不可读的代码。

在第三种情况下:您的变量在该循环的范围内显式声明,并且非常明显是暂时的。它将完成从这个数组中提取你需要的东西并完成它的工作。对外部代码的任何修改都需要用明确的设置器有意地发生。请注意,你不能在这里初始化它,因为初始化没有意义。

0

你必须明确地给出你在数组列表中迭代的对象的类型。在第一个for循环中,您只需插入索引即可。第二,你试图让for循环抓住对象而不知道它是什么类型的对象。

增强for语句相当于一个基本为形式的语句:

for (Iterator i = Expression.iterator(); i.hasNext();) { 
    TargetType Identifier = (TargetType) i.next(); 
    ... 
} 

14.14.2. The enhanced for statement

0

这一个是正常使用循环。你可以声明变量类型之外的

int i; 
for (i = 0; i < 10; i++) {} 

Integer i; 
    for (i = 0; i < 10; i++) { 
     System.out.println(i); 
    } 

第二个,如果你想与通用型使用的foreach(也称为增强型for循环)时,语法必须是:

for(data_type variable : array | collection){} 

希望得到这个帮助!