最近剛學java時,有一個題目:
打印100到200之間所有的素數
第一判斷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初學者有所幫助。