【问题标题】:How Can I Further Simplify the InOrder code by making just one call to OutofOrder?如何通过只调用一次 OutofOrder 来进一步简化 InOrder 代码?
【发布时间】:2020-12-21 06:13:25
【问题描述】:

在试图找到一种方法来简化 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 n2, 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 n2, int n3) {
return true; //replace this
}
}

【问题讨论】:

    标签: java if-statement return boolean simplify


    【解决方案1】:

    如果你想否定结果,这样:

    public boolean inOrder(int n1, int n2, int n3) {
        return !OutOfOrder(n1, n2, n3);
    }
    

    【讨论】:

      【解决方案2】:

      除了西里尔的回答,你可以通过否定OutOfOrder中的逻辑语句得到一个新的InOrder

      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)

      【讨论】:

        猜你喜欢
        • 2020-12-21
        • 2020-12-16
        • 1970-01-01
        • 1970-01-01
        • 2015-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-08
        相关资源
        最近更新 更多