【问题标题】:Need of declaration of a variable in a for loop [duplicate]需要在for循环中声明变量[重复]
【发布时间】:2018-04-25 21:56:26
【问题描述】:

我是新手,但在仔细查看其他问题后找不到这个问题的答案。

为什么有时需要声明变量而有时不需要?我举两个例子:

示例 1:这里,我们不必在 for 循环之前声明 i

class ForDemo {
    public static void main(String[] args){
         for(int i=1; i<11; i++){
              System.out.println("Count is: " + i);
         }
    }

示例 2:这里我们需要在循环之前声明i

class BreakWithLabelDemo {
    public static void main(String[] args) {

        int[][] arrayOfInts = { 
            { 32, 87, 3, 589 },
            { 12, 1076, 2000, 8 },
            { 622, 127, 77, 955 }
        };
        int searchfor = 12;

        int i;
        int j = 0;
        boolean foundIt = false;

    search:
        for (i = 0; i < arrayOfInts.length; i++) {
            for (j = 0; j < arrayOfInts[i].length;
                 j++) {
                if (arrayOfInts[i][j] == searchfor) {
                    foundIt = true;
                    break search;
                }
            }
        }

        if (foundIt) {
            System.out.println("Found " + searchfor + " at " + i + ", " + j);
        } else {
            System.out.println(searchfor + " not in the array");
        }
    }

如果您还可以告诉我,如果在 for 循环中我已经分配了值 0,为什么我还必须初始化变量 j = 0,我将不胜感激。

【问题讨论】:

  • 经验法则:从最窄的块开始。并且仅在需要时将其“向上”移动。
  • 因为你在 for 循环的关闭 } 之后使用它。范围到此为止,因此您必须声明该变量,以便之后可以访问它。也许您应该阅读一下有关范围的内容。
  • 该变量在其作用域结束后不再存在。
  • 因为您在 for 循环执行后访问 i 变量。在for 中定义的变量只在循环执行之前有作用域。
  • 对于 j,不能保证你的循环会运行,所以如果你想在循环之后打印它,就需要设置它

标签: java variables for-loop


【解决方案1】:

如果你在循环中声明循环变量,它只能在循环内部访问。

由于在上一次 sn-p 中,您在循环结束后(在 System.out.println("Found " + searchfor + " at " + i + ", " + j); 中)同时访问了 ij,因此您必须在循环之前声明它们。

这也是你必须在循环之前初始化j 的原因。循环可能永远不会执行(如果arrayOfInts.length 为0),但您仍然会在提到的println 语句中访问j,因此必须在此时对其进行初始化。

【讨论】:

    【解决方案2】:

    在示例 1 中,i 仅在 for 循环中使用。这就是为什么您不需要事先声明它。在示例 2 中,i 用于循环中,但随后也用于“if (foundIt)”-Block。因此,它必须在循环外声明。

    【讨论】:

      猜你喜欢
      • 2015-03-25
      • 1970-01-01
      • 2021-08-29
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多