聯成電腦技術論壇

 找回密碼
 註冊
搜索

「彼岸花」繪畫教學

魚與熊掌兼得的圖片壓縮工具

「回眸」人物繪畫教學

查看: 321|回復: 4

[問題] JAVA條件判斷疑問

[複製鏈接]
發表於 2018-12-9 00:42:52 | 顯示全部樓層 |閱讀模式
今天看到關於迴圈的演示,非常簡單,如下:
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次"?

─(分隔線)──



想問大家怎麼理解?


發表於 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
倘若有說錯 還請其他大大指教

回復 支持 反對

使用道具 舉報

 樓主| 發表於 2018-12-12 23:55:30 | 顯示全部樓層
104352758 發表於 2018-12-11 18:32
do while 迴圈 是一定會被執行一次 例如
do{
     System.out.println("1");

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

我想的邏輯給你看看~
----------------------------------
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)
回復 支持 反對

使用道具 舉報

發表於 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次”

回復 支持 反對

使用道具 舉報

發表於 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 無起動必要


有誤麻煩糾正 感激各位~~
回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



小黑屋|Archiver|手機版|聯成電腦技術論壇  

GMT+8, 2019-5-20 09:26

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表