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.   

    (3)  i++,所以i=4,isPrime = true; 
        因为上次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……
      

  2.   

    当i=2时,j=2,3,4......
    可是当i=2时,for (int j=2;j <i;j++), 初始化时j=2]
    那么j<i=false,这个for循环里的循环体将不执行 直接跳到下个语句块
    j++应该不会执行啊
      

  3.   

    恩 想明白了 谢谢提醒
    老兄啊,看这句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
    是不是应该是这样