我编写了以下程序来显示2到50(含)之间的所有素数。该程序按预期运行,但当我重新检查代码时,我想知道它为什么没有失败。 if
语句可以更改isprime
变量的值。但是,一旦内部for
代码块{}被遗忘,这一变化是否会被遗忘?这意味着isprime
将保留true
,并且会显示所有数字。
class Prime {
public static void main (String args []) {
int a, b;
boolean isprime;
for (a = 2; a < 51; a++) {
isprime = true;
for (b = a-1; b > 1; b--) {
if (a % b == 0) isprime = false;
}
if (isprime) System.out.println(a);
}
}
}
答案 0 :(得分:2)
嗯,如你所见,它不是如何工作的:变量的范围是声明它的块,包括任何子块。
修改子块中的变量会修改它的所有范围。每次新块开始时都不会生成变量的副本。
答案 1 :(得分:1)
1.'if'语句可以改变'isprime'变量的值
是的。内部if
可以更改isprime
2.但是,一旦内部'for'代码块{}被遗忘,这个改变是否会被遗忘?
不,不会忘记。
3.这意味着isprime将保持为真,并显示所有数字。
只有忘记了第二个问题(第2个问题)时才会发生这种情况
想一想。全局变量可以通过任何方法改变,因为它的范围是整个程序。这个变量可以通过任何方法改变。同样,isprime
可以main
更改main
,因为它在main
中声明,其范围在{{1}}。