if/else verkürzen

Status
Nicht offen für weitere Antworten.
S

StevenPeter

Gast
Hallo,

wie kann ich diesen einfachen Vergleich von 3 Werten etwas verkürzen?

Code:
		if(this.form == a.form)				
			if(this.form == b.form)		
				formpruef = true;
			else
				formpruef = false;
		else
			if(this.form != b.form)
				if(a.form != b.form)
					formpruef = true;
				else
					formpruef = false;
			else
				formpruef = false;

Nur da ich diesen vorgang mit 4 Eingenschaften nutzen muss würde ich gerne ein paar Zeilen sparen!

Danke für die Hilfe.
Gruß Steven
 

Ebenius

Top Contributor
Ad hoc (ohne Gewähr und mit Wein):
Code:
formpruef = this.form == a.form && this.form == b.form || this.form != b.form && a.form != b.form;
 
S

stev.glasow

Gast
du kannst das auf 2 "eingenschaften " kürzen:
Code:
if(this.form == a.form)            
	formpruef = this.form == b.form
else
	formpruef = this.form != b.form && a.form != b.form

und wenn dir nicht zu unübersichtlich is alles in eine zeile schreiben:
Code:
formpruef = (this.form == a.form && this.form == b.form) || (this.form != b.form && a.form != b.form)
[edit]
ach man, selbst um 2 uhr kloppen wie uns noch um die einfachen antworten
 

Ebenius

Top Contributor
Stevg, Ausklammern geht mit Wein nicht. Du gewinnen! :)

BTW: Du hast Post!

// EDIT: Man beachte bei stevg's und meinem (ersten) Post:

The main rules of optimization

Rule 1: Don't do it.

Rule 2: (For experts only) Don't do it yet.
 
S

stev.glasow

Gast
meins war falsch hatte das this.form == b.form irgendwo unterwegs liegen gelassen
[edit]
hehe
 

Ebenius

Top Contributor
Hmm. Also für mich, rein optisch leimen die '&&' die Terme zusammen und die '||' trennen; damit denke ich da nie falsch. Aber da eselsbrückt jeder anders, Geschmackssache halt.

Wein alle, gute Nacht!
 
S

stev.glasow

Gast
ich mach teilweise sogar son quatsch:
(a == b && a != c ) && (h == 98 && k == -1)
mal etwas überspitzt gemacht - aber halt son bisschen gruppieren was zusammen gehört

nacht
 

Ebenius

Top Contributor
@OP
Hilft Dir nicht das Auslagern in Methodne, um die if-Abfrage einfacher zu machen? Irgendwie sowas:
Code:
private static boolean equals(Object a, Object b) {
  return a == null && b == null || a != null && a.equals(b);
}

private static boolean needsCheck(Object myValue, Object valueA, Object valueB) {
  return equals(myValue, valueA) && equals(myValue, valueB)
        || !equals(myValue,  valueB) && !equals(valueA, valueB);
}

  // ... Dein Code
  formpruef = needsCheck(this.form, a.form, b.form);
Wenn ich mehrfach die gleiche Prüfung machen würde, würde ich's wahrscheinlich so machen. Dann wird der Code wesentlich besser lesbar.

(Code im Browser getippt. Tippfehler bitte selber beheben!)

Jetzt aber wirklich: schlafen. Gute Nacht! Ebenius
 
S

stev.glasow

Gast
unsere einzeilenlösung ist auch falsch:
folgendes beispiel
this.form ist gleich a.form und this.form ist ungleich b.form
das ergibt bei ihm false und bei unserer einzeilenlösung true

bei meiner 4zeilenlösung passt es aber.
 

Landei

Top Contributor
Warum einfach, wenns auch kompliziert geht?
Code:
formpruef = (this.form == a.form) ? (this.form == b.form) 
  : (this.form != b.form) ? (a.form != b.form) : false;
 
M

maki

Gast
Code:
if(this.form == a.form)             
      if(this.form == b.form)       
          formpruef = true; 
      else if(this.form != b.form && a.form != b.form) 
               formpruef = true; 
else 
   formpruef = false;
 

Landei

Top Contributor
@maki: Wenn dein Code richtig ist (zu faul zum Überlegen), kannst du das innere if noch zusammenfassen:
Code:
...
      if(this.form == b.form || (this.form != b.form && a.form != b.form))
               formpruef = true; 
...
 

Marco13

Top Contributor
Ihr wißt schon, dass man das auch einfach in ein Karnough-Veitch-Diagramm eintragen, die Primimplikanten suchen, und daraus dann die Disjunktive Normalform bilden kann? :meld: ( :cool: )
Code:
/**
 * This methode returns ... [whether this complicated criterion is met ]
 * 
 * @return Whether this complicated criterion is met
 */
private boolean doThisWierdCheck()
{
    // 8 Zeilen leicht nachvollziehbarer Code
    ...
    // Oder optional: 1 Zeile schwer nachvollziehbarer code
}
 

Landei

Top Contributor
Code:
   ...
   //oder optional: 1 Zeile leicht nachvollziehbarer Code
   ...
 

HoaX

Top Contributor
Marco13 hat gesagt.:
Ihr wißt schon, dass man das auch einfach in ein Karnough-Veitch-Diagramm eintragen, die Primimplikanten suchen, und daraus dann die Disjunktive Normalform bilden kann? :meld: ( :cool: )

Las mich raten, du hattest gestern Weihnachtsfeier und das sind die Nachwirkungen des Restalkohols? ;)
 
S

StevenPeter

Gast
Ach du lieber gott, ihr seit ja noch vollkommen eskaliert gestern nacht! Und ich dachte schon ich bin noch spät am programmieren! :)

Danke erstmal, ich versuch aus eurem

stevg hat gesagt.:
meins war falsch hatte das this.form == b.form irgendwo unterwegs liegen lassen

und

stevg hat gesagt.:
unsere einzeilenlösung ist auch falsch:

jetzt mal was raus zu suchen das ich verstehe und das richtig ist ;)

Danke, danke!

lg SP
 
S

stev.glasow

Gast
find das am besten
stevg hat gesagt.:
Code:
if(this.form == a.form)            
	formpruef = this.form == b.form
else
	formpruef = this.form != b.form && a.form != b.form
bzw
Code:
formpruef = this.form == a.form? this.form == b.form: this.form != b.form && a.form != b.form
is das gleiche nur in unübersichtlich

was nen Karnough-Veitch-Diagramm is weiß ich nicht, denke die jungs ham schon wieder zu viel geraucht ^^
 
S

StevenPeter

Gast
Gudn,

Code:
formpruef = (this.form == a.form) ? (this.form == b.form) : (this.form != b.form) ? (a.form != b.form) : false;

funktionniert super! Vielen dank Landei, und natrürlich auch allen anderen!

Habe zwar paar Minuten zum verstehen gebraucht aber ist ja eingentlich ganz simpel.

Falls jemand die selbe Frage hat:

Der Bedingungsoperator ist der einzige dreistellige Operator. Der erste Operand erwartet einen logischen Ausdruck, in dessen Abhängigkeit entweder der zweite oder dritte Operand zurückgeliefert wird. Im Falle des True - Wertes wird daher der erste Operand verwendet, ansonsten der zweite.

Das folgende Beispiel wird den zweiten Operanden ausgeben, da die Bedingung des ersten Operanden True ergibt.:

Code:
public class MyClass
{
  public static void main(String[] args)
  {
    boolean b = true;
    System.out.print(b?1:2);      
  }
}

Ausgabe : 1

lg SP
 

Marco13

Top Contributor
stevg hat gesagt.:
was nen Karnough-Veitch-Diagramm is weiß ich nicht, denke die jungs ham schon wieder zu viel geraucht ^^

Eher zu wenig :( Bin so un-entspannt :(

Aber zum KV-Diagramm: Was ich da gesagt hatte, war ... richtig, und nicht komplett als Witz gemeint: Ein KV-Diagramm ist eine praktische Methode, um boolsche Ausdrück zu minimieren (Siehe http://de.wikipedia.org/wiki/Karnaugh-Veitch-Diagramm - einer der Längsten Wiki-Artikel, die ich bisher gesehen habe... ). Die verwendet man, um Erstsemestlern auf schmerzhafte Art beizubringen, wie man von Hand Schaltungen minimieren kann (in der Praxis nimmt man wohl eher andere Methoden - KV-Diagramme werden bei >4 Variablen unübersichtlich).

Die gleiche Methode kann man auch verwenden, um boolsche Ausfrücke bei if-Abfragen zu vereinfachen. Paradoxerweise bringt das aber nicht so viel: Entweder man hat nur <= 4 Variablen - dann schreibt man's einfach übersichtlich hin, weils auf die paar Zeilen Code nicht ankommt, wenn man sie in eine Methode auslagert, oder man hat >4 Variablen, dann .... sollte man seinen Programmierstil überdenken :wink:
 

GermanPsycho

Mitglied
Entweder ich (Thread Opener) habe die Funktion übersehen oder ich konnte keinen Haken setzte da ich das Thread als Gast erstellt habe!

Wenn irgend ein Mod vorbeischaut wäre es nett den Haken zu setzen da hier die Frage ja mit verschiedenen Möglichkeiten nett beantwortet wurde! :applaus:

lg GP
 
M

maki

Gast
Marco13 hat gesagt.:
Die gleiche Methode kann man auch verwenden, um boolsche Ausfrücke bei if-Abfragen zu vereinfachen. Paradoxerweise bringt das aber nicht so viel: Entweder man hat nur <= 4 Variablen - dann schreibt man's einfach übersichtlich hin, weils auf die paar Zeilen Code nicht ankommt, wenn man sie in eine Methode auslagert, oder man hat >4 Variablen, dann .... sollte man seinen Programmierstil überdenken
Bei mehr als 4 Variablen greift man zu Quine/McCluskey:
http://de.wikipedia.org/wiki/Verfahren_nach_Quine_und_McCluskey

Man bekommt zwar nicht immer die kürzestete Form, aber dafür lässt sich dieer Algo schön (rekursiv) als Programm abbilden.
 

Marco13

Top Contributor
Für Schaltungsminimierung ja :wink: (Oder die "Espresso"-Methode). Aber wenn man mitten im Porgrammierfluss auf einmal einen if-Ausdruck mit Quine-McCluskey vereinfachen will, macht man IMHO was falsch .... :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T if-else Bedingung wird ignoriert Java Basics - Anfänger-Themen 4
I If / Else in Setter? Java Basics - Anfänger-Themen 8
M If-Else Java Basics - Anfänger-Themen 5
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
laxla123 Verschachtelte If-Else Schleife Java Basics - Anfänger-Themen 21
laxla123 If-else Java Java Basics - Anfänger-Themen 4
luggas89 If else auch mit unterschiedlichen Antworten Java Basics - Anfänger-Themen 5
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
W Verschachtelte If-else --> finde meinen Fehler nicht Java Basics - Anfänger-Themen 30
pumpgun99 Fehler Meldung "else without if" Java Basics - Anfänger-Themen 3
B Scanner-If/else kleine Abhebungs-Simulation Java Basics - Anfänger-Themen 3
A Übung Else if Java Basics - Anfänger-Themen 2
M Else wird nicht ausgeführt. Java Basics - Anfänger-Themen 5
L If und else bei 2 Dimensionalen Arrays Java Basics - Anfänger-Themen 8
F if else if anfängerfrage Java Basics - Anfänger-Themen 22
T if else Befehl funktioniert nicht richtig Java Basics - Anfänger-Themen 27
C Problem mit If Else If und Überprüfung eines Counters Java Basics - Anfänger-Themen 3
T "Einkauf" & if else Struktur Java Basics - Anfänger-Themen 7
steven789hjk543 Input mit if-else Java Basics - Anfänger-Themen 23
H ERGÄNZUNGSFRAGE: Klammersetzung bei if-else Anweisungen und Schleifen Java Basics - Anfänger-Themen 2
A break; mit Einfluss hinter else if Block Java Basics - Anfänger-Themen 3
R else without if error Java Basics - Anfänger-Themen 5
F Methoden Verschachtelte if else Methode Java Basics - Anfänger-Themen 10
M Java Taschenrechner (if-else) Java Basics - Anfänger-Themen 11
C Variablen 'else' without 'if' Java Basics - Anfänger-Themen 4
F If - Else Java Basics - Anfänger-Themen 3
F Variablen If else: Einer Variable einen Wert hinzufügen oder so? Java Basics - Anfänger-Themen 6
I if/else Statements Java Anfänger Java Basics - Anfänger-Themen 14
M jOptionPane mit if else Java Basics - Anfänger-Themen 16
K Frage zu If & else if Java Basics - Anfänger-Themen 5
R else if anweisungen Java Basics - Anfänger-Themen 2
Y Problem mit If-Else Verzweigung! Java Basics - Anfänger-Themen 9
A Warum funktioniert switch aber nicht if/else? Java Basics - Anfänger-Themen 23
Hijo2006 If-else Java Basics - Anfänger-Themen 6
P Erste Schritte Taschenrechner mit if-else Anweisung Java Basics - Anfänger-Themen 6
T If/ Else If (zurückkehren) Java Basics - Anfänger-Themen 4
O Grosse If / Else verschachtelung übersichlitcher gestlten Java Basics - Anfänger-Themen 6
S Erste Schritte Unterschied "if" und "else if" Java Basics - Anfänger-Themen 27
M If in einem else Java Basics - Anfänger-Themen 14
A boolean Methode ohne If und else Java Basics - Anfänger-Themen 1
J Mehrere IF Anweisungen und dazugehörige ELSE Java Basics - Anfänger-Themen 6
C else in if umschreiben Java Basics - Anfänger-Themen 2
J Fehlermeldung else without if Java Basics - Anfänger-Themen 5
P Compiler-Fehler wieso zeigt der compiler ein else without if? Java Basics - Anfänger-Themen 3
E If...else... Java Basics - Anfänger-Themen 7
G Mehrere If-else-Sätze der Reihe nach durchlaufen lassen Java Basics - Anfänger-Themen 2
C If Else Frage Java Basics - Anfänger-Themen 2
M if, else Anweisung Java Basics - Anfänger-Themen 3
J Ergebnis wird gespammt sowie eine else if Frage Java Basics - Anfänger-Themen 2
A instanceof-if-else-Anweisungen eleganter lösen Java Basics - Anfänger-Themen 5
O if and else geht nur manchmal Java Basics - Anfänger-Themen 17
V Operatoren Java if-else argument Java Basics - Anfänger-Themen 4
D Keine Funktion bei "else" Java Basics - Anfänger-Themen 5
P [ANFÄNGER] if else funktioniert nicht Java Basics - Anfänger-Themen 4
T If, else Problem Java Basics - Anfänger-Themen 12
C IF-Else Verknüpfungen Java Basics - Anfänger-Themen 10
Uzi21 if - else Abfrage Java Basics - Anfänger-Themen 6
T Problem im If-Else-Statement Java Basics - Anfänger-Themen 4
R if funktion ohne else - Bedingung trifft nicht zu, ausgabe nicht nachvollziehbar Java Basics - Anfänger-Themen 7
T If ; else error on system token delete Java Basics - Anfänger-Themen 5
N Best Practice Stilistische Anwendung von if/else-Abfragen Java Basics - Anfänger-Themen 7
L else without if Fehler Java Basics - Anfänger-Themen 14
F try/catch - (else) Java Basics - Anfänger-Themen 11
H Worauf bezieht sich die erste else-Anweisung Java Basics - Anfänger-Themen 9
S if und else problem... Java Basics - Anfänger-Themen 13
Q if-else Logikproblem Java Basics - Anfänger-Themen 4
M Probleme mit else if Java Basics - Anfänger-Themen 15
M Erste Schritte Break-Anweisung bei if-else Java Basics - Anfänger-Themen 6
B OOP If und else in Main class einbinden Java Basics - Anfänger-Themen 9
T Erste Schritte switch case Anweisung und if else Verzweigungen? Java Basics - Anfänger-Themen 6
K Bedingungen else Java Basics - Anfänger-Themen 7
B if-else in einer schleife Java Basics - Anfänger-Themen 14
J Erste Schritte If-Else Idee gesucht Java Basics - Anfänger-Themen 6
T if else Java Basics - Anfänger-Themen 8
R boolean, if-else Java Basics - Anfänger-Themen 7
M if then else geht nicht Java Basics - Anfänger-Themen 10
P int-Wertevergleich mit if-else-Verzweigung Java Basics - Anfänger-Themen 3
P If-else-Verzweigung Java Basics - Anfänger-Themen 9
E Compiler-Fehler Fehler: else without if Java Basics - Anfänger-Themen 11
D Java Einsteiger (boolean, if-else etc.) Java Basics - Anfänger-Themen 7
I Methoden Problem If/Else; Public Void Java Basics - Anfänger-Themen 6
P Anzahl der else if Operatoren begrenzt?? Java Basics - Anfänger-Themen 7
K Mal wieder ein Problem mit If / Else Java Basics - Anfänger-Themen 10
K Anfänger If / Else Problem Java Basics - Anfänger-Themen 5
C if else Abfrage Java Basics - Anfänger-Themen 11
T Umschreiben von switch in if else und umgekehrt Java Basics - Anfänger-Themen 9
C Schleifen, if, else......? Java Basics - Anfänger-Themen 8
2 if und else Java Basics - Anfänger-Themen 9
L If/else nicht korrekt ausgeführt. Java Basics - Anfänger-Themen 22
E Verschachtelte If-Anweisungen - "else without if" Java Basics - Anfänger-Themen 4
S Brauche Hilfe bei if/else Java Basics - Anfänger-Themen 3
S if-else Java Basics - Anfänger-Themen 22
A ein if else problem Java Basics - Anfänger-Themen 13
N If-else-If Leiter Java Basics - Anfänger-Themen 9
U Dringend: Syntax error on token "else" Java Basics - Anfänger-Themen 8
L if else anweisung Java Basics - Anfänger-Themen 2
M If/Else mit Zahlenfolge Java Basics - Anfänger-Themen 13
B Problem mit Variable und if/else Java Basics - Anfänger-Themen 6
H alternativen zu if .. else .. Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben