對於java中變量發生改變,引起的輸出結果改變

        最近剛學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初學者有所幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章