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

mdprotacio Punkte 842

Die einfachste Form zur Lösung des Problems mit ternären Operatoren ist:

return a ? (b ? true : c) : (b ? c : false);

Möglicherweise möchten Sie auch eine Lösung mit Hilfe der doppelten Negation der Bedingung finden, d. h. statt mindestens zwei wahren Werten müssen Sie die Bedingung mit höchstens einem falschen Wert erfüllen.

0voto

Derek Organ Punkte 7993

Mir scheint, dass drei von drei Zahlen recht willkürlich sind, und die Funktion sollte mit einer beliebigen Zahl funktionieren. Um die Frage zu beantworten, würde ich also eine Funktion schreiben, die herausfindet, ob x in einem Array z.B. wahr ist,

bool istrue ( int x, bool[] list)
    y = count true in list
    return y >= x

0voto

Dhananjay Punkte 3515

Funktion ko liefert die Antwort:

static int ho(bool a)
{
    return a ? 1 : 0;
}

static bool ko(bool a, bool b, bool c)
{
    return ho(a) + ho(b) + ho(c) >= 2 ? true : false;
}

0voto

To Kra Punkte 2979
public static boolean atLeast(int atLeastToBeTrue, boolean...bools){
    int booleansTrue = 0;
    for(boolean tmp : bools){
        booleansTrue += tmp ? 1 : 0;
    }
    return booleansTrue >= atLeastToBeTrue;
}

Sie können wählen, wie viele at least Sie wollen wahrhaftig sein von varargs a.k.a. boolean[] :-)

0voto

Dupinder Singh Punkte 6087

Dies ist sehr einfach mit Hilfe der arithmetischen Operation.

boolean a = true;
boolean b = false;
boolean c = true;

// Exactly One boolean value true.
if((a?1:0)+(b?1:0)+(c?1:0)==1) 
   return true;
else
   return false;

// Exactly 2 boolean value true.
if((a?1:0)+(b?1:0)+(c?1:0)==2) 
   return true;
else
   return false;

und so können Sie einfach den Wert der Konstante erhöhen, um zu prüfen, wie viele boolesche Werte vorhanden sind true

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