[問題] if 和 else if 的問題

作者: sluggard (~Halcyon Days~)   2022-03-13 19:58:28
最近開始學JAVA,一邊練習網路上的題目,
但發現我對於第二次開始使用if 和 else if的用法還是有點不太懂
我查了stackoverflow,上面說到兩者最大的差異就是
如果我用if,就代表不管怎麼樣,系統都會檢視
if(i==0){
executes;}
if(i==1){
executes;
}
// 不管有幾個,系統都會一一檢視,只要符合就會執行
如果是用else if,那第一個條件如果符合,
下面的i==1不管符合不符合都不會執行
if(i==0){
executes;}
else if(i==1){
executes;}
我不知道這樣的理解是否正確?
如果是的話,我就不了解為什麼下面這個情況,一定要用else if,而不能用if
我做練習的題目是說:
Given a string, if a length 2 substring appears at both its
beginning and end, return a string without the substring at the beginning,
so "HelloHe" yields "lloHe". The substring may overlap with itself,
so "Hi" yields "". Otherwise, return the original string unchanged.
例如:
without2("HelloHe") → "lloHe"
without2("HelloHi") → "HelloHi"
without2("Hi") → ""
所以我試著寫的是:
public String without2(String str) {
String result = "";
if ((str.length() == 2)){
result = "";
}
if (str.length() < 2){
result = str;
}
if ((str.length()>2) &&
(str.substring(0,2).equals(str.substring(str.length()-2,str.length())))){
result = str.substring(2, str.length());
} else {
result = str;
}
return result;
}
但這樣發現,
without2("Hi") → 應該要是"" 但我的卻會跑出"Hi"
without2("xx") → 應該要是"" 但我的卻會跑出"xx"
只要我把第二和地三個if ,改成 else if 就全對了
我不懂為什麼這裡一定要用else if呢?
尤其我一開始就已經寫了如果string的長度是2,就應該return ""
為什麼還是會跑出原本的字?
我想請問像我這種問題,要看什麼書才會學得透徹呢?
因為常常有些細節想不明白,我該怎麼學習呢?
謝謝^_^
作者: gasbomb (虛空雷神獸)   2022-03-13 20:21:00
用debugger一步一步看吧 常看就習慣了
作者: GGing (小軒軒)   2022-03-13 21:23:00
這跟程式語言無關,單純邏輯問題
作者: sluggard (~Halcyon Days~)   2022-03-13 22:02:00
喔~可能真的是邏輯,因為我真的還沒想通為什麼不能用if,一定要用else if,而且基本觀念理解卻無法應用妥當
作者: snowlike (.zZ)   2022-03-13 22:13:00
因為你的第三個 if 把前面已經判斷過的res覆寫掉了
作者: ssccg (23)   2022-03-13 23:13:00
其實java沒有elseif,只有else後接的是個if statement你把else的括號補上去就知道差在哪了至於你寫的程式,你最後的else相當於if (str.length() <= 2|| !(str.substring(0,2).equals ...)) 跟你的結果符合啊「尤其我一開始就已經寫了如果string的長度是2,就應該return ""」這句,你往上看看你寫的明明是 result = "",並沒有return "",程式是照你寫的跑的,不是照你認為的跑的只有你寫錯,沒有什麼一定要用else if這種基本的control statement,你不能只是模糊的記說很多個if連續大概怎樣,你要很明確的知道你寫的每一個if,會造成程式依什麼順序執行,哪幾行是條件成立時會執行的,哪幾行是條件不成立執行的,哪幾行是一定會執行的
作者: qrtt1 (有些事,有時候。。。)   2022-03-14 09:01:00
講那麼多,有沒有先依著前面推薦的 debugger 去走一遍流程?
作者: sluggard (~Halcyon Days~)   2022-03-14 12:07:00
謝謝大家的建議!我是線上練習,不懂怎麼debug,不會我盡快學怎麼在Eclipse裡面練習debug,而不是直接在線上寫
作者: MonyemLi (life)   2022-03-17 16:34:00
程式由上而下執行,只有幾個指令能跳出。else if 不能獨立使用,是if命令的選用
作者: aidansky0989 (alta)   2022-04-04 14:35:00
順序結構、分支結構、循環結構統稱編程第一範式,可以驗證所有的執行結果
作者: roshia (roshia)   2022-04-23 21:30:00
回傳值為String的方法,在該return的時候沒return,要馬補上return 要馬補上else
作者: didibi (爛車俠)   2022-05-09 23:01:00
不知道問題解決了嗎?我在想應該是因為最後一個if…else的部分,你認為的else是指「除了以上有列出以外的所有情況」,但實際上這裡的else指的是「除了最後一個if以外的情況」(字的長度沒有大於二,或是…)如果是用一個if後面else if的話就會先判斷,不符合再往下一個判斷,比較符合你的邏輯~

Links booklink

Contact Us: admin [ a t ] ucptt.com