以下工作正常,
int i;
for (i = 0; i < 10; i++) {}
但这不是
// a is an ArrayList of Integers
Integer i;
for (i: a) {}
我被迫这样做:
for (Integer i : a) {}
为什么第二个循环不起作用?
答案 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();
...
}
答案 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