public class Primes {
public static void main(String [] args) {
int nValues = 50;
boolean isPrime = true; for (int i=2;i <=nValues;i++){
isPrime = true;
for (int j=2;j <i;j++){
if (i%j == 0){
isPrime = false;
}
}
if (isPrime){
System.out.println(i);
}
}
}
}
本人新手 对嵌套的for循环有点搞不明白 这个程序是查找2-50的所有素数,
这个程序是对的 可是我理解不了,我是这么想的请各位大大们指正
(1) 当i=2时isPrime = true;
当j=2时,和i比较的结果为false;
所以直接跳到System....... i=2.
(2) i++,所以i=3,isPrime = true;
因为上次for 循环没执行 所以j不自加1,因此j还是2,那么j <i成立.但是i%j!=0;
所以直接跳到System.....i=3.
(3) i++,所以i=4,isPrime = true;
因为上次for 循环执行了 所以j加1为3,那么j <i成立,但是i%j!=0;
所以直接跳到System.....i=4
可到第3次循环的时候就不对了 这个程序的输出是 输出 2 3 5,因为4不是素数
可是按我的这种想法 4是 要输出的,请各位大大们指正,谢谢拉`
public static void main(String [] args) {
int nValues = 50;
boolean isPrime = true; for (int i=2;i <=nValues;i++){
isPrime = true;
for (int j=2;j <i;j++){
if (i%j == 0){
isPrime = false;
}
}
if (isPrime){
System.out.println(i);
}
}
}
}
本人新手 对嵌套的for循环有点搞不明白 这个程序是查找2-50的所有素数,
这个程序是对的 可是我理解不了,我是这么想的请各位大大们指正
(1) 当i=2时isPrime = true;
当j=2时,和i比较的结果为false;
所以直接跳到System....... i=2.
(2) i++,所以i=3,isPrime = true;
因为上次for 循环没执行 所以j不自加1,因此j还是2,那么j <i成立.但是i%j!=0;
所以直接跳到System.....i=3.
(3) i++,所以i=4,isPrime = true;
因为上次for 循环执行了 所以j加1为3,那么j <i成立,但是i%j!=0;
所以直接跳到System.....i=4
可到第3次循环的时候就不对了 这个程序的输出是 输出 2 3 5,因为4不是素数
可是按我的这种想法 4是 要输出的,请各位大大们指正,谢谢拉`
因为上次for 循环执行了 所以j加1为3,那么j <i成立,但是i%j!=0;
老兄啊,看这句for (int j=2;j <i;j++)中j=2已经重新将j初始化为2了。
当i=2时,j=2、3、4……
当i=3时,j=2、3、4……
当i=4时,j=2、3、4……
…………………………
当i=50时,j=2、3、4……
可是当i=2时,for (int j=2;j <i;j++), 初始化时j=2]
那么j<i=false,这个for循环里的循环体将不执行 直接跳到下个语句块
j++应该不会执行啊
老兄啊,看这句for (int j=2;j <i;j++)中j=2已经重新将j初始化为2了。
当i=2时,j=2、3、4……
当i=3时,j=2、3、4……
当i=4时,j=2、3、4……
…………………………
当i=50时,j=2、3、4…… 谢谢你的提醒
不过当i=2时 j=2
当i=3时 j=2
当i=4时 j=2,3
当i=5时 j=2,3,4
是不是应该是这样