[问题] 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