Java 将单行if语句拆分为多行if语句
我试图将单行if语句拆分为具有相同含义的多行if语句。我有:Java 将单行if语句拆分为多行if语句,java,Java,我试图将单行if语句拆分为具有相同含义的多行if语句。我有: if(a || (b && c)) { /* do smt */ } 但我想把它改成,如果我 if(a && b && c) { /*do smt*/ } 意思相同 if(a) { if(b) { if(c) { /* do smt */ } } } 谢谢 是的,你可以这样做,但也许你不应该这样做 i
if(a || (b && c))
{
/* do smt */
}
但我想把它改成,如果我
if(a && b && c)
{
/*do smt*/
}
意思相同
if(a)
{
if(b)
{
if(c)
{
/* do smt */
}
}
}
谢谢 是的,你可以这样做,但也许你不应该这样做
if(a&b)语句代码>
完全等同于
if (a){
if (b){
statement;
}
}
但是对于if(a | | b)
,情况就不同了:您需要编写语句代码>位于多个位置:
if (a){
statement;
} else if (b){
statement;
}
也就是说,|
确实分布在&&
之间,即使具有短路特性:
所以
可以写成
if ((a || b) && (a || c)){
statement;
}
从上面看,这是
if (a || b){
if (a || c){
statement;
}
}
虽然不必要地混淆了,但这正是您想要的。这方面的需要不是很清楚,但您可以这样做:在函数中创建它:
function codeToDo() {
// your code to execute on condition
}
if (a) {
codeToDo();
else if (b) {
if (c) {
codeToDo();
}
}
要进一步处理if(a | | b)
零件,请应用:
if(a){
/*do task1*/
}else if(b){
/*do task1*/
}
请注意,在if(a)
以及else if(b)
中,您运行的是相同的代码;i、 任务1.布尔代数可以改变这种情况
a | |(b&c)
(a|b)和&(a|c)
所以你可以这样做:
if(a || b)
{
if(a || c){
/* do smt */
}
}
如果不重复if
块的主体,就无法真正做到这一点。您可以将a | | b
转换为!(!a&&!b)
,但尽管这使用了&&
,但由于周围的语句,您不能将其拆分为嵌套的if
语句!(…)
你为什么要这么做?我的假设是a
、b
和c
这三个条件非常长和/或复杂。如果是这种情况,我建议采取以下措施之一:
- 声明三个具有描述性名称的布尔变量,并在条件中使用它们
boolean isLoggedIn = // some really long data base lookup
boolean isGuest = // more data base stuff
boolean guestCanEdit = // a complex boolean expression
if (isLoggedIn || (isGuest && guestCanEdit)) { ...
if (list.isEmpty() ||
(!list.isEmpty() && list.getLast().compareTo(heap.peek().value) <= 0))
- 定义三种执行上述检查的方法,并使用
if
if (isLoggedIn(user) || (isGuest(user) && guestCanEdit(topic))) { ...
但是,请注意,第一个版本不使用短路,即将评估所有条件,即使第一个条件已为真或第二个条件为假。如果任何条件在计算上很昂贵,或者第三次检查只有在第二次检查成功(例如null
检查后)才可能进行,则应避免这种情况
关于你的健康状况
boolean isLoggedIn = // some really long data base lookup
boolean isGuest = // more data base stuff
boolean guestCanEdit = // a complex boolean expression
if (isLoggedIn || (isGuest && guestCanEdit)) { ...
if (list.isEmpty() ||
(!list.isEmpty() && list.getLast().compareTo(heap.peek().value) <= 0))
如果您的目标是计算调用compareTo
的次数,则可以使用以下方法:
if (! list.isEmpty() && list.getLast().compareTo(heap.peek().value) <= 0)
<代码> >(.List.IsVunTy.&&List.GETLAST[).COMPARETO(HEAP.PEEK())值。如果条件<代码> A<代码> B> < /COD>和<代码> C >代码>太长,请考虑用简短但描述性的名称编写方法,例如“代码> IF(ISLogGeDin(用户)”(ISCube(用户)& GuestCnEngEdEdress(主题))
你的问题是什么?我不明白。我会写一个问题的扩展版本来更清楚。因此if语句是if(list.isEmpty()| |)(!list.isEmpty()&&list.getLast().compareTo(heap.peek().value)不要考虑你能做什么,而要考虑上下文。三重if非常难看,会降低代码的可读性。代码应该尽可能像一个口语句子一样阅读。我想这正是我想要的!谢谢!@henrich注意,现在你的第一个条件是if(list.isEmpty()| |!list.isEmpty())
。对于您的特定情况,您根本不需要外部的if
。处理两次对a的求值,如果a需要复杂的计算,则效果不是很好。如果a碰巧有副作用,则也是错误的。这是真的@tobias_kif(list.isEmpty()| list.getLast().compareTo(heap.peek().value)两次处理a的计算,如果a需要复杂的计算,则效果不是很好。如果a碰巧有副作用,则也是错误的。
if (! list.isEmpty() && list.getLast().compareTo(heap.peek().value) <= 0)