java 板


LINE

最近开始学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://webptt.com/cn.aspx?n=bbs/java/M.1647172710.A.192.html
1F:推 gasbomb: 用debugger一步一步看吧 常看就习惯了 03/13 20:21
2F:→ GGing: 这跟程式语言无关,单纯逻辑问题 03/13 21:23
3F:→ sluggard: 喔~可能真的是逻辑,因为我真的还没想通为什麽不能用 03/13 22:02
4F:→ sluggard: if,一定要用else if,而且基本观念理解却无法应用妥当 03/13 22:03
5F:推 snowlike: 因为你的第三个 if 把前面已经判断过的res覆写掉了 03/13 22:13
6F:→ ssccg: 其实java没有elseif,只有else後接的是个if statement 03/13 23:13
7F:→ ssccg: 你把else的括号补上去就知道差在哪了 03/13 23:13
真的非常谢谢您!不过我还是有点不懂您所说的是什麽意思... 不是有if...else if....else if ...else 和 if...if...if...else...两种吗?
8F:→ ssccg: 至於你写的程式,你最後的else相当於if (str.length() <= 2 03/13 23:19
9F:→ ssccg: || !(str.substring(0,2).equals ...)) 跟你的结果符合啊 03/13 23:21
10F:→ ssccg: 「尤其我一开始就已经写了如果string的长度是2,就应该retu 03/13 23:22
11F:→ ssccg: rn ""」这句,你往上看看你写的明明是 result = "",并没有 03/13 23:23
12F:→ ssccg: return "",程式是照你写的跑的,不是照你认为的跑的 03/13 23:23
谢谢您!不过我的else那里不是应该是相当於if (str.length()>2 && ...) 为什麽您觉得是<=2 || ? 我把我的思路一步一步写清楚,还是不了解为什麽一模一样的code 改成else if就对(我有附上图)
13F:→ ssccg: 只有你写错,没有什麽一定要用else if 03/13 23:24
谢谢您,的确向您所说,需要一步骤一步骤看,但我还是没想通, 因为我的逻辑一开始就是 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
14F:→ ssccg: 这种基本的control statement,你不能只是模糊的记说很多个 03/13 23:27
15F:→ ssccg: if连续大概怎样,你要很明确的知道你写的每一个if,会造成 03/13 23:29
16F:→ ssccg: 程式依什麽顺序执行,哪几行是条件成立时会执行的,哪几行 03/13 23:32
17F:→ ssccg: 是条件不成立执行的,哪几行是一定会执行的 03/13 23:32
谢谢您,这真的是我最想搞清楚的...我也一直一点一点想, 但不知道自己的盲点在哪 我把图放上去可能比较清楚, 希望能真正明确的了解,谢谢您的帮忙! ※ 编辑: sluggard (61.227.39.208 台湾), 03/14/2022 01:02:46
18F:→ qrtt1: 讲那麽多,有没有先依着前面推荐的 debugger 去走一遍流程? 03/14 09:01
19F:→ sluggard: 谢谢大家的建议!我是线上练习,不懂怎麽debug,不会我 03/14 12:07
20F:→ sluggard: 尽快学怎麽在Eclipse里面练习debug,而不是直接在线上写 03/14 12:09
21F:→ MonyemLi: 程式由上而下执行,只有几个指令能跳出。else if 不能 03/17 16:34
22F:→ MonyemLi: 独立使用,是if命令的选用 03/17 16:34
23F:推 aidansky0989: 顺序结构、分支结构、循环结构统称编程第一范式, 04/04 14:35
24F:→ aidansky0989: 可以验证所有的执行结果 04/04 14:35
25F:→ roshia: 回传值为String的方法,在该return的时候没return,要马补 04/23 21:30
26F:→ roshia: 上return 要马补上else 04/23 21:30
27F:→ didibi: 不知道问题解决了吗?我在想应该是因为最後一个if…else 05/09 23:01
28F:→ didibi: 的部分,你认为的else是指「除了以上有列出以外的所有情 05/09 23:01
29F:→ didibi: 况」,但实际上这里的else指的是「除了最後一个if以外的 05/09 23:01
30F:→ didibi: 情况」(字的长度没有大於二,或是…) 05/09 23:01
31F:→ didibi: 如果是用一个if後面else if的话就会先判断,不符合再往下 05/09 23:01
32F:→ didibi: 一个判断,比较符合你的逻辑~ 05/09 23:01







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP