104613005 發表於 2018-12-9 00:42:52

JAVA條件判斷疑問

今天看到關於迴圈的演示,非常簡單,如下:
public class EX5
   {
   public static void main(String[] args)
   {
    int i=0;
      do
   {
      System.out.println("這是第" + i + "次");      
      } while(i++<3);
    }
   }               

───────────(分隔線)───────────────
執行結果:
這是第0次
這是第1次
這是第2次
這是第3次
───────────(分隔線)────────────────
問題:
條件式 (i++<3)
當i=1 =2 都會執行,
   i=3<3   ←這個應該不成立



但為何會再執行一次?

───────────(分隔線)────────────────

如果改成這樣:
do{
      System.out.println("這是第"+i+"次");
      i++;
      } while(i<3);


則會只到"這是第2次"?

───────────(分隔線)────────────────



想問大家怎麼理解?


104352758 發表於 2018-12-11 18:32:41

本帖最後由 104352758 於 2018-12-11 18:42 編輯

do while 迴圈 是一定會被執行一次 例如
do{
   System.out.println("1");
   }while(0>1)
雖然 while 不成立 但是 執行一次


第一個 while 的 boolean 值 因運算子的優先權 i被+1 才執行 布林運算子(>) 所以 被執行了4次
可參考
https://blog.xuite.net/andy19890 ... 8%E9%A0%86%E5%BA%8F

第二個 一樣從0 開始 i <3故 印出 0 1 2
倘若有說錯 還請其他大大指教

104613005 發表於 2018-12-12 23:55:30

104352758 發表於 2018-12-11 18:32
do while 迴圈 是一定會被執行一次 例如
do{
   System.out.println("1");

感謝同學拔刀相助,
但雖然有運算上的優先順序了,還是沒有解到惑:lol

我想的邏輯給你看看~
----------------------------------
int i=0;
   
    do{
      System.out.println("這是第"+i+"次");      
      } while(i++<3);
----------------------------------
宣告、賦值 int i=0
再來 先DO 一次 Println →印出(這是第0次)
因i=0,運算i++這時i=1,且滿足關係運算子 <3 →執行一次DO (這是第一次)
因i=1,運算i++這時i=2,且滿足關係運算子 <3 →執行一次DO (這是第二次)
因i=2,運算i++這時i=3,但不滿足關係運算子 <3 →執行一次DO (這是第三次)

這個關係 ,為何不滿足<3時卻又再執行一次DO呢? (此時i值已經++ , i=3)

100219761 發表於 2019-2-12 17:12:46

本帖最後由 100219761 於 2019-2-12 17:18 編輯

  我是以 JVM 的行為模式解析每一個步驟‧請參考~~


  程式碼 : 

  1: - 4: 是行號

  run(1) 對應行號 1: 你懂得!
 
  ------------------------------------------

    1: int i=0;

    2: do{

    3:   System.out.println("這是第" + i + "次");

    4: } while(i++<3);

  ------------------------------------------

  run(1):i=0

  run(2):準備進入do-while  

  run(3):此時i=0;印出”這是第0次” <======= output

  run(4):首先先點出題外話
         int i = 2;

         System.out.println( "i++ < 3 ? " + (i++ < 3) );      
                        
         這會印出true是因為i先取出2且與3比大小回傳true後才會做++,++ 後i = 3

         回原提,run(4)時 i = 0; while(i++<3)為true ; 接續 run(2) @ i 變成 1 了歐



  run(2):準備進入do-while  

  run(3):此時 i=1 ;印出 ”這是第1次” <======= output

  run(4):i = 1 ; while(i++<3) 結果為 true ; 接續 run(2) @ i 變成 2 了歐



  run(2):準備進入do-while  

  run(3):此時 i=2 ;印出 ”這是第2次” <======= output

  run(4):i = 2 ; while(i++<3) 結果為 true ; 接續 run(2) @ i 變成 3 了歐



  run(2):準備進入do-while

  run(3):此時 i=3 ;印出 ”這是第3次” <======= output

  run(4):i = 3 ; while(i++<3) 結果為 false ; 離開do-while



  執行結果

    印出 ”這是第0次”

    印出 ”這是第1次”

    印出 ”這是第2次”

    印出 ”這是第3次”

104420966 發表於 2019-5-4 10:16:41

本帖最後由 104420966 於 2019-5-4 10:35 編輯

int i=0;
do {
        System.out.println("這是第"+i+"次"+"   是不是3   "+(i==3));
}while(i++<3);
System.out.println(i);

這是第0次   是不是3   false   i++後   i =1先啟動迴圈後判定下次執行必要
這是第1次   是不是3   false   i++後   i= 2先啟動迴圈後判定下次執行必要
這是第2次   是不是3   false   i++後   i= 3先啟動迴圈後判定下次執行必要
這是第3次   是不是3   true    i++後   i=4 無起動必要


有誤麻煩糾正 感激各位~~
頁: [1]
查看完整版本: JAVA條件判斷疑問