在下面的示例中,如果在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}});
答案 0 :(得分:2)
这是java
的工作原理。如果在块中声明变量,那么该块就是变量的范围。
块是平衡大括号之间的一组零个或多个语句,可以在允许单个语句的任何地方使用。
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”被忽略的原因,如果在循环之外声明了某个值,就会被打印出来。