Re: [問題] if 和 else if 的問題

看板java作者 (23)時間2年前 (2022/03/14 02:05), 2年前編輯推噓3(301)
留言4則, 1人參與, 2年前最新討論串2/2 (看更多)
: → ssccg: 其實java沒有elseif,只有else後接的是個if statement 03/13 23:13 : → ssccg: 你把else的括號補上去就知道差在哪了 03/13 23:13 : 真的非常謝謝您!不過我還是有點不懂您所說的是什麼意思... : 不是有if...else if....else if ...else 和 : if...if...if...else...兩種嗎? 沒有兩種 只有 if-else 一種 if ( Expr1 ) { Stmts1 } else if ( Expr2 ) { Stmts2 } else { Stmts3 } 其實相當於 if ( Expr1 ) { Stmts1 } else { if ( Expr2 ) { Stmts2 } else { Stmts3 } } else if 寫法只是else內容是又一個 if-else 的簡短寫法 調整過縮排後就很清楚 整段程式的所有Statements都是屬於第一個 if-else 控制的範圍內 Stmts2、3會不會執行跟第一個 if 是有關係的 而 if ( Expr1 ) { Stmts1 } if ( Expr2 ) { Stmts2 } else { Stmts3 } 第一個 if 控制的範圍就到 Stmts1而已 後面的Stmts2、3會不會執行就跟第一個 if 完全沒有關係 else if 不只是在 if 前面加個 else 這麼簡單 整個程式的結構是完全不一樣的 : → ssccg: 至於你寫的程式,你最後的else相當於if (str.length() <= 2 03/13 23:19 : → ssccg: || !(str.substring(0,2).equals ...)) 跟你的結果符合啊 03/13 23:21 : → ssccg: 「尤其我一開始就已經寫了如果string的長度是2,就應該retu 03/13 23:22 : → ssccg: rn ""」這句,你往上看看你寫的明明是 result = "",並沒有 03/13 23:23 : → ssccg: return "",程式是照你寫的跑的,不是照你認為的跑的 03/13 23:23 : 謝謝您!不過我的else那裡不是應該是相當於if (str.length()>2 && ...) : 為什麼您覺得是<=2 || ? : 我把我的思路一步一步寫清楚,還是不了解為什麼一模一樣的code : 改成else if就對(我有附上圖 : → ssccg: 只有你寫錯,沒有什麼一定要用else if 03/13 23:24 : 謝謝您,的確向您所說,需要一步驟一步驟看,但我還是沒想通, : 因為我的邏輯一開始就是 // 你這段程式我的看起來是長這樣 : public String without2(String str) { // 定義一個變數 result,初始值設成 ""; : String result = ""; // 執行到此,如果str的長度等於2,把變數result 設成 "" : if ((str.length() == 2)){ : result = ""; : } // 執行到此,如果str的長度小於2,把變數result 設成 str : if (str.length() < 2){ : result = str; : } // 執行到此,如果str的長度大於2,而且str最前面的兩個字母和最後的兩個字母一樣 : if ((str.length()>2) && : (str.substring(0,2).equals(str.substring(str.length()-2,str.length())))){ // 把 result 設成 str 去掉前兩個字元的字串值 : result = str.substring(2, str.length()); // 如對應的 if 不成立(字的長度小於或等於2,或前兩個字母和最後兩個字母不一樣) : } else { // 把 result 設為 str : result = str : } // 完整的 if-else 會包含全部的情況 // 所以執行到此,result 的初始值和前兩個 if 完全多寫的 // result 目前的值只看最後這個 if-else // 執行到此,不管上面執行了什麼,回傳現在 result 的值 : return result; : } 再讓我提一次你這句 「尤其我一開始就已經寫了如果string的長度是2,就應該return ""」 整段程式看下來顯然沒這回事,最後面才有return 反而是如果你沒有多用 result 這個變數 而是每個 if 裡面真的是直接寫 return 那就會跟你想的一樣 但是你用的就不是 return : 但這樣時就會有錯 (我貼上圖可能比較清楚) : https://imgur.com/Rcch9FN
: : 但一模一樣寫法,只要改成else if就對了 (同樣也貼上圖) : https://imgur.com/jclPYLb
你把 else if 照前面展開成適當的縮排 你就知道兩段程式流程控制結構完全不一樣 不是一模一樣的寫法 : : → ssccg: 這種基本的control statement,你不能只是模糊的記說很多個 03/13 23:27 : → ssccg: if連續大概怎樣,你要很明確的知道你寫的每一個if,會造成 03/13 23:29 : → ssccg: 程式依什麼順序執行,哪幾行是條件成立時會執行的,哪幾行 03/13 23:32 : → ssccg: 是條件不成立執行的,哪幾行是一定會執行的 03/13 23:32 : : 謝謝您,這真的是我最想搞清楚的...我也一直一點一點想, : 但不知道自己的盲點在哪 : 我把圖放上去可能比較清楚, : 希望能真正明確的瞭解,謝謝您的幫忙! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.150.124.138 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/java/M.1647194720.A.03C.html ※ 編輯: ssccg (118.150.124.138 臺灣), 03/14/2022 02:07:06

03/14 12:12, 2年前 , 1F
真的非常非常謝謝您這麼詳細的解說!我真的學到好多...
03/14 12:12, 1F

03/14 12:13, 2年前 , 2F
原來我整個思維都錯了,而且連return的用法都不是很清楚
03/14 12:13, 2F

03/14 12:18, 2年前 , 3F
甚至return的位置讓output全錯亂我都沒發現,學得太差了
03/14 12:18, 3F

03/14 12:20, 2年前 , 4F
謝謝您花這麼多時間一步一步講解!真的受益良多!
03/14 12:20, 4F
文章代碼(AID): #1YBZ9W0y (java)
文章代碼(AID): #1YBZ9W0y (java)