Wie kann ich den InOrder-Code weiter vereinfachen, indem ich nur einen Aufruf bei OutofOrder mache?

Probleme beim Versuch, einen Weg zu finden, um den inOrder-Code so zu vereinfachen, dass er nur einen einzigen Aufruf an OutofOrder ausführt. Ich habe Schwierigkeiten, einen Weg zu finden, um den Anruf zu machen...

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
}
}

Antwort auf "Wie kann ich den InOrder-Code weiter vereinfachen, indem ich nur einen Aufruf bei OutofOrder mache? " 2 von antworten

Wenn Sie das Ergebnis negieren möchten, so:

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

  • p is n1 > n2, and ist und
  • q is n2 > n3

~(p v q) = = ~p ^ ~q (read: not p and not q) (sponsert: nicht p und nicht q)

So:

  • ~p is ist "-1 9-" (das Gegenteil von n1 > n2), and ) und
  • ~q is ist n2 <= n3 (the opposite of (das Gegenteil von n2 > n3) )

so könnte man InOrder as als

return (n1 <= n2) && (n2 <= n3)

umschreiben

Zusätzlich zu Cyrils Antwort können Sie ein neues InOrder by negating the logic statement in erhalten, indem Sie die Logikanweisung in OutOfOrder

OutOfOrder says p v q (read: p or q) (sponsert: p oder q)
negieren.