问题描述
尝试找到一种简化inOrder代码的方法时遇到麻烦,因此只对OutofOrder进行了一个单一的调用。我很难找到拨打电话的方法...
public class InOrder {
//Don't change this
public boolean OutOfOrder(int n1,int n2,int n3) {
return (n1 > n2) || (n2 > n3);
}
//The original and messy InOrder,leave this as an example of what not to do
public boolean inOrder(int n1,int n3) {
if (n2 > n1) {
if (n3 > n2) {
return true;
} else {
return false;
}
} else if (n2 == n1) {
if (n3 == n1) {
return true;
} else {
return false;
}
} else {
return false;
}
}
//The new and improved InOrder for part 5,call OutOfOrder
public boolean inOrder5a(int n1,int n3) {
return true; //replace this
}
}
解决方法
如果要对结果求反,可以这样:
public boolean inOrder(int n1,int n2,int n3) {
return !OutOfOrder(n1,n2,n3);
}
,
除了Cyril的答案外,您可以通过取反InOrder
中的逻辑语句来获得新的OutOfOrder
OutOfOrder
说p v q
(读取:p或q)
其中:
-
p
是n1 > n2
,并且 -
q
是n2 > n3
~(p v q)
= ~p ^ ~q
(读取:不是p而不是q)
所以:
-
~p
是n1 <= n2
(与n1 > n2
相反),并且 -
~q
是n2 <= n3
(与n2 > n3
相反)
因此您可以将InOrder
重写为
return (n1 <= n2) && (n2 <= n3)