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是 要输出的,请各位大大们指正,谢谢拉`

解决方案 »

  1.   

    if (isPrime){ 
    System.out.println(isPrime);
    System.out.println(i); 
    加一句打印你就知道了!
      

  2.   

    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);
          }
        }
      }
    }
      

  3.   

    说的不队啊 
    if (isPrime){
      System.out.println(isPrime); 
      System.out.println(i); 

    这个只有在isPrime是true的时候才执行输出 所以是
    true
    2
    true
    3
    true
    5
    还是不能看出 执行过程 请看下我对执行过程的分析哪里出错了
      

  4.   


    //看下这个
    public class Prime {
        public static boolean isPrime(int num){
            for(int i=2;i<num;i++){
                if((num%i)==0){
                    return false;
                }
            }
            return true;
        }
        public static void main(String[] args){
            for(int i=1;i<=50;i++){
                if(isPrime(i)){
                    System.out.print(i+" ");
                }
            }
        }
    }
      

  5.   


    你知道是true的时候输出就行为4的时候你返回的是一个false自然不会打印!
      

  6.   

    我也来凑个热闹,FOR语句的执行过程的三个条件;第一个(int j=2)是设定初始值,很好理解;
    第二个(既:j <i;)是设定循环的条件,当(J<I=FALSE)时不执行{循环体内容};、
    第三个(j++)是最容易混淆的,我刚开始学的时候也迷糊过实际上它是在循环体执行完以后才被执行。
    可以把for语句这样写,我想会容易理解点:
    for{int i=2;
        i<j;
        循环体;
        i++;
        }
    说了这么多不知道lz可能同意?!呵呵……