作者ssccg (23)
看板java
标题Re: [问题] if 和 else if 的问题
时间Mon Mar 14 02:05:18 2022
: → 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://webptt.com/cn.aspx?n=bbs/java/M.1647194720.A.03C.html
※ 编辑: ssccg (118.150.124.138 台湾), 03/14/2022 02:07:06
1F:推 sluggard: 真的非常非常谢谢您这麽详细的解说!我真的学到好多... 03/14 12:12
2F:→ sluggard: 原来我整个思维都错了,而且连return的用法都不是很清楚 03/14 12:13
3F:推 sluggard: 甚至return的位置让output全错乱我都没发现,学得太差了 03/14 12:18
4F:推 sluggard: 谢谢您花这麽多时间一步一步讲解!真的受益良多! 03/14 12:20