【发布时间】:2015-06-18 21:55:03
【问题描述】:
我想编写一个程序来查找从 b 到 a 的所有素数,所以我编写了以下代码(有效):
public static void main(String[] args) {
int a;
int c;
boolean isPrime;
a = 2;
c = 0;
while(a <= 100000 ){
isPrime = true;
for (int b = 2;b<a; b++){
c = a%b ;
//System.out.println(c);
if ( c == 0){
// this stores every not prime number
isPrime = false;
}
}
if (isPrime){
System.out.println(a);
}
a=a+1;
}
} // main end
接下来我尝试编写这段代码的变体,但没有成功:
public static void main(String[] args) {
int q;
int w;
boolean isPrimeOne = false;
q = 2;
w = 0;
while(q <= 100){
isPrimeOne = false;
for (int d = 2; d<q; d++){
w = q%d;
if( w != 0 ){
isPrimeOne = true;
}
}
}
if(isPrimeOne){
System.out.println(w);
}
w = w+1;
}
在我看来,我的第一个和第二个代码非常相似。唯一的区别(我明白了)是我在第一个中将 isPrime 初始化为 true,在第二个中初始化为 false。
为什么第一个代码有效而第二个无效?
【问题讨论】:
-
您在第二个中增加
w而不是q。 -
即使是
q,实际上在while循环外也是递增的。
标签: java boolean primes boolean-logic