据我们所知,根据Oracle for loop文档的形成:
for (initialization; termination; increment) {
statement(s)
}
例如,
class ForDemo {
public static void main(String[] args){
for(int i=1; i<11; i++){
System.out.println("Count is: " + i);
}
}
}
为什么我们不能像这样在for循环之外声明初始化部分?
class ForDemo {
public static void main(String[] args){
int i = 1;
for(i; i<11; i++){
System.out.println("Count is: " + i);
}
}
}
答案 0 :(得分:8)
您可以:
for(; i<11; i++){
System.out.println("Count is: " + i);
}
但是i
的范围是不同的。 i
现在将位于循环外部。
答案 1 :(得分:5)
可以。但是,您通常只需在初始化通常进行的地方输入一个空白的;
:
int i = 1;
for(; i<11; i++){
System.out.println("Count is: " + i);
}
区别在于i
的范围现在扩展到了循环之外。可能是您想要的。否则,最好将变量保持在尽可能小的范围内。正如for
循环的docs所说:
在初始化表达式中声明它们会限制它们的寿命并减少错误。
输出:
Count is: 1
Count is: 2
Count is: 3
Count is: 4
Count is: 5
Count is: 6
Count is: 7
Count is: 8
Count is: 9
Count is: 10
答案 2 :(得分:4)
for循环中真正发生的事情
BasicForStatement:
for ( ForInit ; Expression; ForUpdate )
如文档所述,初始化需要声明
如果ForInit代码是语句表达式的列表
所以在这段代码中
for(i; i<11; i++){
System.out.println("Count is: " + i);
}
i
不是陈述,它只是一个变量。那么什么是陈述?
语句大致等同于自然语言中的句子。一种 语句构成一个完整的执行单元。以下类型 可以通过终止表达式使表达式成为语句 加上分号(;)。
Assignment expressions Any use of ++ or -- Method invocations Object creation expressions
如果知道状态是什么,例如,此for循环有效
int i = 1; // Initializated
for(i++; i<11; i++){ // Whit a statemnt
System.out.println("Count is: " + i);
}
,输出将是:
Count is: 2
Count is: 3
Count is: 4
Count is: 5
Count is: 6
Count is: 7
Count is: 8
Count is: 9
Count is: 10
答案 3 :(得分:0)
引用Java文档
最好在初始化表达式中声明变量。名称i,j和k通常用于控制循环。在初始化表达式中声明它们会限制它们的寿命并减少错误。 for循环的三个表达式是可选的;可以如下创建无限循环:
// infinite loop
for ( ; ; ) {
// your code goes here
}
所以,我错过了。可能,但是不利。解决方案让初始化部分留空
for ( ;i <= 10 ; i++ ) {
// i is defined outside already
}