[問題] if 和 else if 的問題
最近開始學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 ""
為什麼還是會跑出原本的字?
我想請問像我這種問題,要看什麼書才會學得透徹呢?
因為常常有些細節想不明白,我該怎麼學習呢?
謝謝^_^
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.227.39.208 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/java/M.1647172710.A.192.html
推
03/13 20:21,
2年前
, 1F
03/13 20:21, 1F
→
03/13 21:23,
2年前
, 2F
03/13 21:23, 2F
→
03/13 22:02,
2年前
, 3F
03/13 22:02, 3F
→
03/13 22:03,
2年前
, 4F
03/13 22:03, 4F
推
03/13 22:13,
2年前
, 5F
03/13 22:13, 5F
→
03/13 23:13,
2年前
, 6F
03/13 23:13, 6F
→
03/13 23:13,
2年前
, 7F
03/13 23:13, 7F
真的非常謝謝您!不過我還是有點不懂您所說的是什麼意思...
不是有if...else if....else if ...else 和
if...if...if...else...兩種嗎?
→
03/13 23:19,
2年前
, 8F
03/13 23:19, 8F
→
03/13 23:21,
2年前
, 9F
03/13 23:21, 9F
→
03/13 23:22,
2年前
, 10F
03/13 23:22, 10F
→
03/13 23:23,
2年前
, 11F
03/13 23:23, 11F
→
03/13 23:23,
2年前
, 12F
03/13 23:23, 12F
謝謝您!不過我的else那裡不是應該是相當於if (str.length()>2 && ...)
為什麼您覺得是<=2 || ?
我把我的思路一步一步寫清楚,還是不了解為什麼一模一樣的code
改成else if就對(我有附上圖)
→
03/13 23:24,
2年前
, 13F
03/13 23:24, 13F
謝謝您,的確向您所說,需要一步驟一步驟看,但我還是沒想通,
因為我的邏輯一開始就是
public String without2(String str) {
//我先把結果寫成String result = "";
String result = "";
// 如果字的長度等於2,我的result就是"" empty string
if ((str.length() == 2)){
result = "";
}
// 如果字的長度小於2,result就等於原本的字
if (str.length() < 2){
result = str;
}
// 如果字的長度大於2,而且字最前面的兩個字母和最後的兩個字母一樣的話
if ((str.length()>2) &&
(str.substring(0,2).equals(str.substring(str.length()-2,str.length())))){
// result 就把字的前兩個字元刪掉
result = str.substring(2, str.length());
// 其他的情形,(字的長度大於2 而且&&字的前兩個字母和最後兩個字母不一樣)
} else {
// result 就是原本的字
result = str
}
// 根據上面各種情況決定result是哪一個
return result;
}
但這樣時就會有錯 (我貼上圖可能比較清楚)
https://imgur.com/Rcch9FN
但一模一樣寫法,只要改成else if就對了 (同樣也貼上圖)
https://imgur.com/jclPYLb
→
03/13 23:27,
2年前
, 14F
03/13 23:27, 14F
→
03/13 23:29,
2年前
, 15F
03/13 23:29, 15F
→
03/13 23:32,
2年前
, 16F
03/13 23:32, 16F
→
03/13 23:32,
2年前
, 17F
03/13 23:32, 17F
謝謝您,這真的是我最想搞清楚的...我也一直一點一點想,
但不知道自己的盲點在哪
我把圖放上去可能比較清楚,
希望能真正明確的瞭解,謝謝您的幫忙!
※ 編輯: sluggard (61.227.39.208 臺灣), 03/14/2022 01:02:46
→
03/14 09:01,
2年前
, 18F
03/14 09:01, 18F
→
03/14 12:07,
2年前
, 19F
03/14 12:07, 19F
→
03/14 12:09,
2年前
, 20F
03/14 12:09, 20F
→
03/17 16:34,
2年前
, 21F
03/17 16:34, 21F
→
03/17 16:34,
2年前
, 22F
03/17 16:34, 22F
推
04/04 14:35,
2年前
, 23F
04/04 14:35, 23F
→
04/04 14:35,
2年前
, 24F
04/04 14:35, 24F
→
04/23 21:30,
2年前
, 25F
04/23 21:30, 25F
→
04/23 21:30,
2年前
, 26F
04/23 21:30, 26F
→
05/09 23:01,
2年前
, 27F
05/09 23:01, 27F
→
05/09 23:01,
2年前
, 28F
05/09 23:01, 28F
→
05/09 23:01,
2年前
, 29F
05/09 23:01, 29F
→
05/09 23:01,
2年前
, 30F
05/09 23:01, 30F
→
05/09 23:01,
2年前
, 31F
05/09 23:01, 31F
→
05/09 23:01,
2年前
, 32F
05/09 23:01, 32F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章