【问题标题】:Java declaring iterator outside for loopJava在for循环外声明迭代器
【发布时间】:2018-10-04 18:50:55
【问题描述】:

根据Oracle的文档,for循环是我们所知道的:

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);
         }
    }
}

【问题讨论】:

  • 去掉'i;'中的'i'它应该可以工作。
  • 在 Stack Overflow 上,我们倾向于不混合问题陈述并在问题帖子中解决它。相反,您可以self-answer您自己的问题。请从您的问题帖子中删除答案部分。
  • @Tsyvarev 完成 :)

标签: java for-loop


【解决方案1】:

你可以:

 for(; i<11; i++){
      System.out.println("Count is: " + i);
 }

但是i的范围不同。 i 现在将存在于循环之外。

【讨论】:

    【解决方案2】:

    你可以。但是,您只需在初始化通常进行的地方有一个空白;

    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
    

    【讨论】:

      【解决方案3】:

      在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
      

      有了这个知识库,如果你知道什么是 statemnt,你可以使用任何 for 循环,例如这个 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
      

      【讨论】:

        【解决方案4】:

        引用 Java 文档

        最好在初始化表达式中声明变量。名称 i、j 和 k 常用于控制 for 循环;在初始化表达式中声明它们会限制它们的寿命并减少错误。 for 循环的三个表达式是可选的;可以按如下方式创建无限循环:

        // infinite loop
        for ( ; ; ) {
        
            // your code goes here
        }
        

        所以,我错过了。这是可能的,但不是有利的。将初始化部分留空是解决方案

          for (  ;i <= 10 ; i++ ) {
        
                // i is defined outside already
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-18
          • 2011-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多