613 Stimmen

Prüfen, ob mindestens zwei von drei Booleschen Werten wahr sind

Ein Interviewer hat mir kürzlich folgende Frage gestellt: Geben Sie bei drei booleschen Variablen a, b und c true zurück, wenn mindestens zwei der drei Variablen wahr sind.

Meine Lösung folgt:

boolean atLeastTwo(boolean a, boolean b, boolean c) {
    if ((a && b) || (b && c) || (a && c)) {
        return true;
    }
    else{
        return false;
    }
}

Er sagte, dass dies noch verbessert werden kann, aber wie?

173 Stimmen

Integrieren Sie die Return-Anweisung.

82 Stimmen

atLeastTwo(iWantYou, iNeedYou, imEverGonnaLoveYou)

1 Stimmen

Wäre es C gewesen, hätte man die Booleschen Werte einfach addieren können. Vielleicht war es das, woran er dachte, aber er vergaß, dass Java das nicht kann?

0voto

Bobin Punkte 151

Es ist einfach mit Operator Überladen, wenn Sie eine Menge von Booleschen haben.

operator fun Boolean.unaryPlus() = if (this) 1 else 0
// ...
if(+bool1 + +bool2 + ... + +boolN > 2) {
    // ...
}

-1voto

nabil london Punkte 491

Eine andere:

return a? b||c : b&&c

-4voto

gnrfan Punkte 18511

Ich glaube, dass die Verwendung einfacher boolescher Operatoren (a || b) && (b || c) in Ordnung ist und einfacher ist.

Sie können jeden der 3 Buchstaben mit einem der beiden anderen austauschen und es ist immer noch derselbe Ausdruck.

-6voto

user1883212 Punkte 7019

Ich denke, die einfachste Lösung ist:

return (a && b) || c;

-7voto

Brandon Punkte 11

Mein erster Gedanke war

return (a||b)&&(b||c)

aber der Einfachheit halber fand ich die von euch vorgeschlagene Lösung a+b+c>=2 besser

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X