在for循环中声明的变量的范围

时间:2017-06-13 07:06:37

标签: java variables scope

在下面的示例中,如果在count循环内声明变量for,则变量isPrime()将被忽略。如果它在方法public class Interest { public static void main(String[] args) { isPrime(); } static void isPrime() { int count = 0; for (int i = 1; i <= 50; i++) { if (i % 2 != 0) { count++; System.out.println("The number is: " + i); System.out.println("We have: " + count + " prime numbers"); if (count == 10) { System.out.println("The loop is ending"); break; } } } } } 内声明,那么一切顺利。

我不明白为什么?

这是我的代码。

     var board = JXG.JSXGraph.initBoard("jxgbox", {
                boundingbox: [-5, 5, 5, -5],
                axis: false
            });
      var pol = board.create('polygon',[[0,0],[0,1],[1,1],[1,0]], 
                  {vertices: {visible:false}});

3 个答案:

答案 0 :(得分:2)

这是java的工作原理。如果在块中声明变量,那么该块就是变量的范围。

引自Java docs

  

块是平衡大括号之间的一组零个或多个语句,可以在允许单个语句的任何地方使用。

for表示范围,因此计数范围仅限于该块(表示它是本地块变量)。

此外,您将其视为java看起来忽略count上的任何更新,因为在每次迭代时变量都会重新初始化。 您可以在每次迭代的开始和结束时看到更好的打印count

for (int i = 1; i <= 50; i++) {
     int count = 0;
      System.out.println("Begin " + count );
      if (i % 2 != 0) 
         count++;
     System.out.println("End " + count );
}

产地:

Begin 0
End   1
Begin 0
End   0
Begin 0
End   1
Begin 0
End   0
Begin 0
End   1
Begin 0
End   0
Begin 0
End   1
Begin 0
End   0
Begin 0
End   1
....

这告诉您,只要函数的控制到达count块的末尾,for上的任何更新都会丢失。这就是为什么如果你想在迭代中保持信息,你必须使用在某个外部范围内声明的变量(在这种情况下,函数isPrime()的范围可以正常工作)。

答案 1 :(得分:0)

这是找到奇数不是素数的逻辑。其次当你将count放入for循环时,每次i增加时它会重置为0。

当i&gt;时,循环终止。超过50,即51。

希望这有帮助。

答案 2 :(得分:0)

如果在循环中声明变量,则每次迭代都将重置变量的值。这就是为什么你觉得如果在循环中声明“count”被忽略的原因,如果在循环之外声明了某个值,就会被打印出来。