循环变量在增强的for循环中

时间:2015-09-27 21:54:58

标签: java

以下工作正常,

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

但这不是

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

我被迫这样做:

for (Integer i : a) {}

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

5 个答案:

答案 0 :(得分:1)

以这种方式思考:如果你总是初始化你的变量会怎么样?

在第一种情况下:它在这个例子中被初始化,显然没问题。

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

在第三种情况下:您的变量在该循环的范围内显式声明,并且非常明显是临时的。它将完成从这个数组中提取你需要的东西并完成它的工作。对外部代码片段的任何修改都需要使用显式setter进行。请注意,您无法在此初始化它,因为初始化毫无意义。

答案 1 :(得分:0)

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

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

对于增强的for循环,你必须有

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

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

答案 2 :(得分:0)

您必须在数组列表中显式指定要迭代的对象类型。在第一个for循环中,您只需插入索引。在第二种情况下,您试图让for循环抓取对象而不知道它是什么类型的对象。

  

增强的for语句相当于表单的基本for语句:

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

14.14.2. The enhanced for statement

答案 3 :(得分:0)

这个循环使用是正常的。您可以在for

之外声明变量类型
 int i;
 for (i = 0; i < 10; i++) {}

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

第二个,如果你想使用带有Generic类型的foreach(也称为Enhanced For-loop),语法必须是:

for(data_type variable : array | collection){}  

希望这有帮助!

答案 4 :(得分:0)

根据JLS(请参见 15.27.2。Lambda正文的最底部)-在增强型for循环的每次迭代中,我们都有一个全新的{{1 }}变量 =>我们无法重用循环之前声明的(df["column_category"].cat.categories.get_loc("item"))变量。

每个循环中都有一个全新的变量,因此在这里有声明语法:df["column_category"].cat.categories[0],因为它实际上在每次迭代中一次又一次地声明。

证明来自有关lambda的JLS代码示例:

i