我有三个if语句:
if (!(a == 0 && b == 0)) {...}
if (!(a == 0 && b != 0)) {...}
if (!(a != 0 && b != 0)) {...}
我想将它们组合在一个代码块中,例如方法。
如果一个语句已经运行,我不希望其他语句运行。如果我想避免提出一些好的逻辑,有一些解决方法,但我想知道是否有一种漂亮的方法来编写它。
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 = 零,n = 非零,a,b 变量,r = 结果,T = 真,F = 假)
表达方式:
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;
}
只是为了重新表达你的问题。 你说如果一个块运行,其他块不应该运行。 所以当你写的时候
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 ...
}
请注意,正如我在评论中所述,第三个...
永远无法运行。