![]() |
Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Hallo,
3 Variablen
Delphi-Quellcode:
bOK soll jetzt nur True sein, wenn nur einer der 3 Werte True ist.
var
B1, B2, B3: Boolean; bOK: Boolean; begin // bOK := ?? end; Mein bisheriger Ansatz:
Delphi-Quellcode:
usw.
bOK := False;
if B1 then begin bOK := True; end; if B2 then begin if bOK then begin bOK := False; Exit; end; bOK := B2; end; if Be then begin Irgendwie ist heute Montag ... Wie löst man das eleganter ??? Ich will nicht viele And's und Or's haben.
Delphi-Quellcode:
Naja, jetzt habe ich halt doch and's und or's ...
if ((B1=True) and (B2=False) and (B3=False)) or
((B1=False) and (B2=True) and (B3=False)) or ((B1=False) and (B2=False) and (B3=True)) then begin bOK := True; end; Heiko |
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Mit einer OR Verknüpfung?
Delphi-Quellcode:
bOK := B1 or B2 or B3;
|
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Delphi-Quellcode:
bOK := B1 xor B2 xor B3;
|
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Warum XOR?
Ah ja. Stimmt. Hast Recht. Bei mir wäre bOK auch wahr, wenn zwei oder drei wahr wären, es darf aber nur einer wahr sein. |
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Delphi-Quellcode:
Gruß
w:=0;
if B1 then inc(w,1); if B2 then inc(w,1); if B3 then inc(w,1); bok:=W=1; K-H |
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Hallo,
ja, mit dem Inc und Hochzählen sieht elegant aus ;) Da kommt man nach 17:00 nicht drauf ... ;) Ah so: elegant und trotzdem leserlich sollte es sein. Jetzt schmeisse ich mal den Profiler an und mal schaun, was am schnellsten bei 1.000.000 Vergleiche ist. Danke Heiko |
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Zitat:
Zitat:
Delphi-Quellcode:
bOK := IfThen(B1, 1, 0) + IfThen(B2, 1, 0) + IfThen(B3, 1, 0) = 1;
|
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Zitat:
(Das XOR "gefällt" mir besser. -- Shit nicht zu ende gedacht) (kommt wohl darauf an mit welchen Hilfskonstruktionen man zuerst gearbeitet hat) Laß mal hören was effektiver ist. Gruß K-H |
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Für den Datentype Boolean (WordBool ausgenommen) funktioniert folgendes:
Delphi-Quellcode:
Ich ergänze:
bOk := Ord(b1) +Ord(b2) +Ord(b3) = 1
Wenn man so etwas wie
Delphi-Quellcode:
macht wird es auch hässlich. :-)
b1 := Boolean(11);
|
AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
Zitat:
Delphi-Quellcode:
:stupid:
bOk := Ord( b1 ) + Ord( b2 ) + Ord( b3 ) = Ord( true );
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz