我有一个有趣的问题。我正在编写一个程序来打印 1 到 100 之间的质数。首先让我向您展示我的代码:
public class Lessons {
public static void main(String[] args) {
int b;
boolean isPrime = true;
for (int a=2; a<=100; a++) {
for (b=2; b<a;b++) {
if (a%b==0) {
isPrime = false;
break;
}
}
if (isPrime) {
System.out.println(a);
}
}
}
}
该程序的输出是2 3
,这是错误的。但是,如果我在第一个 for 循环内初始化 boolean 变量 boolean isPrime = true; ,我会得到正确的素数列表。谁能帮我理解为什么 boolean 变量初始化的位置会影响输出?
最佳答案
您需要考虑该变量的含义。我认为这可能意味着“a
的当前值为素数吗?”。然后,每次 a
获取一个新值时,您都需要重新开始,并且根据您的方法,将其视为素数,直到您证明它不是素数。
如果您在第一个 for
循环之前初始化它,那么您实际上是在问“到目前为止我看到的 a
的所有值都是素数吗?”。显然,对于 2 和 3 来说这是正确的,但是一旦您评估 4,它就会被设置为 false 并永远保持在那里。
这与变量本身初始化的位置并没有真正的关系。您可以将其保留在原来的位置,只要在进入内部 for
循环之前为它分配一个 true
值即可。重要的一点是 a
的每个值都有机会根据其自身优点进行评估,而不会继承先前值的结果。
所以这会起作用:
public static void main(String[] args) {
int b;
boolean isPrime;
for (int a=2; a<=100; a++)
{
isPrime = true;
for (b=2; b<a;b++)
{
if (a%b==0)
{
isPrime = false;
break;
}
}
if (isPrime)
{
System.out.println(a);
}
}
}
关于java - 在Java中使用 "for"循环时 boolean 变量的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35657143/