java: Eine lange Liste von Bedingungen, was zu tun ist? [geschlossen]

8

Ich brauche einen Vorschlag für den richtigen Ansatz, um Bedingungen in Java anzuwenden.

Ich habe 100 Bedingungen, aufgrund derer ich den Wert einer String-Variablen ändern muss, die dem Benutzer angezeigt wird.

eine Beispielbedingung: a<5 && (b>0 && c>8) && d>9 || x!=4

Es gibt mehr Bedingungen, aber Variablen sind mehr oder weniger gleich.

Ich mache das gerade jetzt:

%Vor%

Eine Wechselfallalternative würde offensichtlich dort in if-else eingebettet sein, d. h.

%Vor%

Aber ich suche eine elegantere Lösung, wie die Verwendung eines Interfaces dafür mit polymorpher Unterstützung. Was könnte ich tun, um Codezeilen zu vermeiden oder was der richtige Ansatz ist?

  

--- Bearbeiten ---

Ich benötige dies tatsächlich auf einem Android-Gerät. Aber es ist hier eher ein Java-Konstrukt.

Dies sind kleine Momentaufnahmen von Zuständen, die ich bei mir habe. Wenn einige korrekt sind, wird mehr hinzugefügt. Das würde natürlich mehr if-else erfordern und diese könnten auch verschachtelt werden. In diesem Fall würde die Verarbeitung langsam erfolgen.

  

Ich speichere jetzt die Nachrichten in einer separaten Klasse mit verschiedenen String-Variablen, die ich statisch behalten habe, wenn eine Bedingung wahr wird   dann wähle ich die statische Variable aus der einzigen Klasse und zeige das an   ein. Wäre es richtig, die resultierenden Nachrichten zu speichern.

    
Prateek 09.01.2013, 13:44
quelle

4 Antworten

7

Abhängig von der Anzahl der bedingten Eingaben können Sie möglicherweise eine Nachschlagetabelle oder sogar HashMap verwenden, indem Sie alle Eingaben oder sogar einige relativ einfache komplexe Bedingungen in einem einzigen Wert codieren:

%Vor%

Dieses Paradigma hat den zusätzlichen Vorteil der konstanten Zeit ( O(1) ) Komplexität, die in einigen Fällen wichtig sein kann. Abhängig von der Komplexität der Bedingungen haben Sie im Durchschnitt möglicherweise weniger Verzweigungen im Code-Pfad als im Gegensatz zu vollständigem if-then-else Spaghetti-Code, was zu Leistungsverbesserungen führen kann.

Wir können Ihnen vielleicht mehr helfen, wenn Sie Ihrer Frage mehr Kontext hinzufügen. Woher kommen die Bedingungseingaben? Wie sind sie?

Und die wichtigere Frage: Was ist das eigentliche Problem, das Sie lösen möchten?

    
thkala 09.01.2013, 13:52
quelle
4

Dafür gibt es viele Möglichkeiten. Ohne viel über Ihre Domäne zu wissen, würde ich etwas wie (Sie können sich bessere Namen denken: P)

erstellen %Vor%

Auf diese Weise können Sie eine Set von UserFriendlyMessageBuilder erstellen und sie einfach als erste durchlaufen, die die Bedingung erfüllt, Ihre rohe Nachricht zu transformieren.

%Vor%     
Caesar Ralf 09.01.2013 13:53
quelle
0

Was mir scheint ist: "Sie haben sehr viel weniger Wert darauf gelegt, das Produkt in Modulen zu entwerfen" Welches ist der Hauptfaktor für die Verwendung von OOP Language.

zB: Wenn Sie 100 Bedingungen haben und 4 Module erstellen können, dann brauchen Sie theoretisch 26 Bedingungen.

    
Saty 09.01.2013 14:11
quelle
0

Dies ist eine zusätzliche Möglichkeit, die es sich zu überlegen lohnt.

Nimm jeden Vergleich und berechne seine Wahrheit, dann schaue den resultierenden booleschen [] in einer Wahrheitstabelle nach oben. Es gibt eine Menge existierender Arbeiten an vereinfachenden Wahrheitstabellen , die Sie anwenden könnten. Ich habe eine Wahrheitstabelle Vereinfachung Applet Ich schrieb vor vielen Jahren. Sie können seinen Quellcode nützlich finden.

Die Kosten dafür sind alle Vergleiche, oder zumindest diejenigen, die benötigt werden, um den Ausdruck unter Verwendung der vereinfachten Wahrheitstabelle auszuwerten. Der Vorteil ist ein organisiertes System zur Verwaltung einer komplizierten Kombination von Bedingungen.

Auch wenn Sie keine Wahrheitstabelle direkt im Code verwenden, sollten Sie in Erwägung ziehen, sie zu schreiben und zu vereinfachen, um Ihren Code zu organisieren.

    
Patricia Shanahan 09.01.2013 14:41
quelle