在for循环中声明变量的必要性

4

我是一名新手,但在仔细查看其他问题后仍然找不到答案。

为什么有时需要声明变量,有时不需要呢?以下是两个例子:

示例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?我会感激不尽您的解答。


1
经验法则:从最窄的块开始。只有在需要时,才将其“上移”。 - Maroun
因为你在 for 循环的结束 } 后使用它。作用域在那里结束,所以你必须声明变量,以便之后可以访问它。也许你应该多了解一下作用域。 - user5444681
变量在其作用域结束后不再存在。 - user7191279
因为您在for循环执行后访问了i变量。在for循环中定义的变量仅在循环执行期间具有作用域。 - rachit
对于变量j,循环的运行并不保证。因此,如果你想在循环后打印它,就需要先进行赋值。 - Stultuske
显示剩余2条评论
2个回答

2
如果你在循环中声明循环变量,那么它只能在循环内部访问。
因为在你的最后一段代码中,在循环结束后你同时访问了ij(在System.out.println("Found " + searchfor + " at " + i + ", " + j);),所以你必须在循环之前声明它们。
这也是你必须在循环之前初始化j的原因。如果arrayOfInts.length为0,则可能永远不会执行循环,但你仍然会在上述println语句中访问j,因此必须在此时进行初始化。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接