我有三 if语句:
if (!(a == 0 && b == 0)) {...}
if (!(a == 0 && b != 0)) {...}
if (!(a != 0 && b != 0)) {...}
我想将它们组合在一个代码块中,例如方法。
如果有人运行,我不希望其他语句运行。有一些解决方法,如果我想避免提出一些好的逻辑,但我想知道是否有一种漂亮的方式来编写它。
答案 0 :(得分:5)
if (!(a == 0 && b b == 0)) {...}
真值表
a b r
z n T
n n T
z z F
n z T
的
if (!(a == 0 && b b != 0)) {...}
真值表
z n F
n n F
z z T
n z T
的
if (!(a != 0 && b b != 0)) {...}
真值表
z n T
n n F
z z T
n z T
常见案例
n z T
所以对所有3个条件都有效的结果是
a != 0 && b == 0
请注意:所有3个条件都完全不同,只有在您执行
时才会执行此操作(第一个&&
秒&&
第三个)是true
自己验证所有案例
(z = 0,n =非零,a,b变量,r =结果,T =真,F =假)
答案 1 :(得分:1)
最简单的表达方式:
public int foo(boolean a, boolean b) {
int result;
if (a) {
if (b) { result = 1; }
else { result = 2; }
else {
if (b) { result = 3; }
else { result = 4; }
return result;
}
(注意这会分别评估a和b一次,这是你在这里可以期待的最小值)
为了让@DavidWallace满意,这里是对原始问题的特定形式的翻译:
public int foo(int a, int b) {
int result;
if (a==0) {
if (b==0) { result = 1; } // or whatever should happen, not specified in the question
else { result = 2; }
else {
if (b==0) { result = 3; }
else { result = 4; }
return result;
}
答案 2 :(得分:1)
重新说出你的问题。你说如果一个块运行,其他块不应该运行。所以当你写了
if (!(a == 0 && b == 0)) {...}
if (!(a == 0 && b != 0)) {...}
if (!(a != 0 && b != 0)) {...}
你的意思是
if (!(a == 0 && b == 0)) {
// first ...
}
else if (!(a == 0 && b != 0)) {
// second ...
}
else if (!(a != 0 && b != 0)) {
// third ...
}
但这相当于
if (a != 0 || b != 0) {
// first ...
}
else if (b == 0) {
// second ...
}
请注意,第三个...
永远无法运行,正如我在评论中所述。