最近刚学java时,有一个题目:

        打印100200之间所有的素数

        第一判断100

        第二次判断101....一直到200

        旁边有个同学,写了程序后,发现没有输出结果,她就问我为什么?我当时一看,感觉好像没什么

问题啊,但是运行了,就是什么都没输出,我就郁闷了,当时她的代码是这样的:

        

public class Text_SuShu
{
 
   /**
    * @param args
    */
   public static void main(String[] args)
   {
     boolean suShu = true;
     
     for (int i = 100; i <= 200; i++)
     {
        for (int j = 2; j< i; j++)
        {
          if(i % j ==0)
          {
          
             suShu = false;
             
             break;
           }         
        }
        if(suShu)
        {
        
           System.out.println(i);
        }
     }
   }
}

       我当时是经过调试了,发现了问题,她把 boolean suShu = true; 这个布尔型变量定义在for循环语

句外面,这样suShu的初始值为true,当进入for循环之后,第一次i = 100,因为100符合 if(i % j ==0)的条

件,这样suShu = false的值就变了,break后跳出了循环;在进行下次的循环时,因为suShu的值还是

false,都不符合下面两个if的条件,所以一直到循环结束,suShu的值都还是false,自然也就没有输出值了。

        于是,经过修改后代码是这样的:

public class Text_SuShu
{
 
   /**
    * @param args
    */
   public static void main(String[] args)
   {
     
     
     for (int i = 100; i <= 200; i++)
     {
        boolean suShu = true;//位置的改变
        
        for (int j = 2; j< i; j++)
        {
          if(i % j ==0)
          {
       
             suShu = false;
             
             break;
           }         
        }
        if(suShu)
        {
        
           System.out.println(i);
        }
     }
   }
}

       这时如果有人说:博主凑字数的吧,这两个代码基本就差不多。我想说的这两个代码确实差不多,

但我不是凑字数,这两个代码只有一个地方不一样,那就是boolean suShu = true;声明的位置不一样,

上面一个代码是在for语句外面,而下面这个代码是在for语句里面,这样只是因为一个在里面一个在外

面,但是执行后的结构完全不一样,下面这个代码能正确输出100~ 200之间所有素数,这是为什么呢?

       因为下面这个代码,进入内层for语句后,当有符合if(i % j ==0)这个条件的,suShu值变成flase,

但是内层循环结束的时候,又回到外层循环时,suShu的值又会被置成true,这样就保证了代码能正确执行。

        这是我学习java时遇到的一个问题,希望对java初学者有所帮助。