有人可以请教我以下事项:
public class Loopy {
public static void main(String[] args)
{
int[] myArray = {7, 6, 5, 4, 3, 2, 1};
int counterOne;
for (counterOne = 0; counterOne < 5; counterOne++) {
System.out.println(counterOne + " ");
}
System.out.println(counterOne + " ");
int counterTwo = 0;
for (counterTwo : myArray) {
System.out.println(counterTwo + " ");
}
}
}
在for循环中,我们在循环外声明counterOne
并在循环内使用它。这是正确的,只要在循环完成后我们不使用counterOne
。
在foreach循环中,我们还在循环外声明counterTwo
,然后在循环内使用 。但是,在这种情况下会引发错误:
“线程中的异常”main“java.lang.RuntimeException:Uncompilable 源代码 - 找不到符号符号:class counterTwo location:class package1.Loopy“
你能帮我理解为什么吗?
两者之间的唯一区别是,counterOne
初始化为零,然后逐步指定值(小于5)。
在foreach循环中,counterTwo
逐个分配,每个数组项。
如果我们在第二个for循环中进行此调整,该程序有效:for(int counterTwo : myArray)
,而第一个适用于两种情况:
for (counterOne = 0; counterOne < 5; counterOne++)
答案 0 :(得分:11)
从this section of the Java Language Specification关于增强型for
- 循环:
增强的for语句具有以下形式:
EnhancedForStatement:
for ( {VariableModifier} UnannType VariableDeclaratorId : Expression ) Statement
EnhancedForStatementNoShortIf:
for ( {VariableModifier} UnannType VariableDeclaratorId : Expression ) StatementNoShortIf
请注意,类型声明 UnannType
必须出现在for
循环中。因此,您应该按如下方式编写循环:
for (int z : x) {
答案 1 :(得分:2)
嗯,简单来说,第二个是“特殊”,它实际上是“为每个人”。它总是需要内部的变量声明。 而不是解释它,这里你是一个关于这个问题的链接,请查看: Why is declaration of the variable required inside a foreach loop
答案 2 :(得分:0)
这只是每个循环的语法。您不能在循环本身之外的每个循环中使用定义的变量。这就是语言的定义方式。
https://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html