Re: [问题] if 和 else if 的问题

楼主: ssccg (23)   2022-03-14 02:05:18
: → 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
:
: 谢谢您,这真的是我最想搞清楚的...我也一直一点一点想,
: 但不知道自己的盲点在哪
: 我把图放上去可能比较清楚,
: 希望能真正明确的了解,谢谢您的帮忙!
作者: sluggard (~Halcyon Days~)   2022-03-14 12:12:00
真的非常非常谢谢您这么详细的解说!我真的学到好多...原来我整个思维都错了,而且连return的用法都不是很清楚甚至return的位置让output全错乱我都没发现,学得太差了谢谢您花这么多时间一步一步讲解!真的受益良多!

Links booklink

Contact Us: admin [ a t ] ucptt.com