我有这些冗长的陈述,我将在这里称为x,y等。 我的条件语句的结构如下:
if(x || y || z || q){
if(x)
do someth
else if (y)
do something
if(z)
do something
else if(q)
do something
}
else
do smthing
有没有更好,更短的方式来写这个东西?感谢
答案 0 :(得分:4)
我现在看不出你怎么写的大问题。 我建议使用大括号,即使是单个语句if-blocks。这将帮助您避免错误,以防您以后必须添加更多代码行(并可能忘记添加花括号)。我觉得它也更具可读性。 代码看起来像这样:
if (x || y || z || q) {
if (x) {
do something
} else if (y) {
do something
}
if (z) {
do something
} else if (q) {
do something
}
} else {
do something
}
答案 1 :(得分:4)
避免多重检查和错误复杂逻辑表达式的另一种变体可能是:
boolean conditionhandled = false;
if (x) {
do something
conditionhandled = true;
} else if (y) {
do something
conditionhandled = true;
}
if (z) {
do something
conditionhandled = true;
} else if (q) {
do something
conditionhandled = true;
}
if (!conditionhandled) {
do something
}
答案 2 :(得分:1)
这对我来说非常清楚(明确是好的)。
你可以做的是首先评估x,y,z和q并将它们存储为变量,这样你就不必两次了。
答案 3 :(得分:1)
也许这更容易阅读。但现在你将进行一次额外检查。如果它不是关键任务代码,那么您可以使用以下内容:
if (x)
do something;
else if (y)
do something;
if (z)
do something;
else if(q)
do something;
if !(x || y || z || q)
do something completely different.
答案 4 :(得分:0)
我不推荐以下内容,事实上,我认为你得到的很好,但是:
s = true;
if (x) {
do something;
s = false;
} else if (y) {
do something;
s = false;
}
if (z) {
do something;
s = false;
} else if (q) {
do something;
s = false;
}
if (s) {
so something;
}
答案 5 :(得分:0)
你能对x,y,z,q做一些假设吗? 例如。只有其中一个可以是真的。你可以把它看作一个国家
enum State {
X{
void doSomething(){
doItTheXWay();
}
},
Y{
void doSomething(){
doItTheYWay();
}
},
Z{
void doSomething(){
doItTheZWay();
}
},
Q{
void doSomething(){
doItTheQWay();
}
};
void doSomething(){
}
}
并在您使用if语句的代码中
你可以指定一个州并做正确的事
State state = getAState();
state.doSomething();
如果您不喜欢枚举,则State可以是接口,而X to Q可以实现类。 在这种情况下的好处是多次使用相同的if else构造。稍后说一些代码行,你会以
开头if(x)
do_the_next_thing_with_X();
...
或者您可以使用其他功能扩展您的枚举并进行一次调用
state.doTheNextThing();