Java用于在外部声明初始化的循环

时间:2018-10-04 18:50:55

标签: java for-loop

据我们所知,根据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);
         }
    }
}

4 个答案:

答案 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代码是语句表达式的列表

From Java Docs

所以在这段代码中

 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
    }