Eigene Bedingung in IF-Bedingung

Hallo, ich bräuchte eure Hilfe.
Ich habe eine if-Schleife geschrieben, die sehr viele Bedingungen enthält. Ich will diese Bedingungen nun in einer eigenen Klasse zusammenfassen.
Ich habe schon gegoogelt aber keine Antwort gefunden, ob es möglich ist, ein eigenen Bedingung zu schreiben, die ungefähr so aussieht: if(isZutreffend){...} und dieses "isZutreffend" will ich dann in einer eigenen Klasse aufschlüsseln.


Vielen Dank schon mal ihm voraus
Tom
 

Tobse

Top Contributor
Zunächst: Es heisst If-Statement. Ein If ist keine Schleife.

Zu deiner Frage:
Klar geht das. Erstelle die Klasse und lege Setter für alle benötigten Werte an (ode rnoch besser: übergib sie im Konstruktor). Dann kannst du noch eine Methode hinzufügen, die dann die ganzen Bedingungen enthält, z.B. isCorrect.

Wenn du zu viele Bedingungen in einem If-Statement hast, ist das aber ein Zeichen dafür, dass dein Code zu kompliziert ist. Das in eine einzige weitere Klasse auszulagern macht es nicht unbedingt besser.
 
Meist du das ganze If-Statement in eine Methode setzen?
Weil ich habe probiert nur die Bedingung in eine Methode zu setztn und es funktioniert nicht:
Java:
public void isCorrect()
{
(a == b || a ==c)
}
 

Hellosager

Aktives Mitglied
Java:
public boolean isCorrect(){
   if(a == b || a == c)
     return true;

   return false;
}

So müsste das aussehen.
Die Methode soll ja einen boolean zurückliefern für deine IF-Abfrage.
Void liefert nichts zurück.
 

VirtualIndex

Aktives Mitglied
Ich schlage als Methode lieber dies vor:

Java:
    public boolean isCorrect() {
        return (a == b || a == c);
    }

Der Vorteil gegenüber dem vorigen Beispiel dürfte klar sein und funktioniert einfach besser.
 

VirtualIndex

Aktives Mitglied
@Jardcore weniger fehleranfälliger ist es nicht bei Codeänderungen. Das Einzige, das geschehen kann, ist dass sich die Bedingung oder der Rückgabewert ändert. In beiden Fällen muss man gleichviel ändern.

Der Vorteil ist, dass man hier nicht etwas tut, was sowieso geschieht. Man sieht mit einem einzigen Blick, sofort, was dabei heraus kommt. Wenn ich beim vorigen Beispiel schaue könnte ich mich vergucken oder mich wundern, warum mal return true/false dort steht.

Wichtig ist hierbei am Ende eine Sache und zwar, dass man versteht, warum das so geht. Ich selber habe das lange Zeit falsch gemacht - in Methoden und in Bedingungen. In Java wird jeder Ausdruck und logische Operation zu einem booleschen Wert. Man kann jederzeit wahr oder falsch entscheiden. Und weil all dies schon boolesche Ausdrücke sind, die wahr oder falsch ausdrücken, muss man nicht noch auf == false oder == true in Bedingungen prüfen geschweige denn ein solches Konstrukt machen.

Das wäre sonst so, als ob man prüft: "Ist brennendes Auto gleich brennendes Auto"? Natürlich! Was sonst? Falsch bleibt falsch. "Ist ein heiles Auto ein heiles Auto?" ist genauso unsinnig.

Daher niemals so Konstruktionen wie
Java:
if(x>3 == false)
oder
Java:
if(x>3 == true)
. Besser und richtiger ist immer:
Java:
if(!x>3)
oder
Java:
if(x>3)
. Das Ausrufezeichen steht hier für "ist nicht" und kein Ausrufezeichen für wahr/trifft zu.
 

Jardcore

Top Contributor
@Jardcore weniger fehleranfälliger ist es nicht bei Codeänderungen. Das Einzige, das geschehen kann, ist dass sich die Bedingung oder der Rückgabewert ändert. In beiden Fällen muss man gleichviel ändern.
Java:
public boolean isCorrect(){
   if(a == b || a == c)
     return true;

   return false;
}
Java:
public boolean isCorrect(){
   if(a == b || a == c)
     return false;

   return true;
}
Der Fehler kann zum Beispiel nicht passieren, wenn du die richtige Variante wählst...
Java:
    public boolean isCorrect() {
        return (a == b || a == c);
    }
 

Thallius

Top Contributor
Sorry aber die Lösungen sind alle Käse. Wenn schon, dann muss die Methode so aussehen

Code:
public boolean isCorrect(int a, int b, int c){
   if(a == b || a == c)
     return true;

   return false;
}

Gruß

Claus
 

Jardcore

Top Contributor
Sorry aber die Lösungen sind alle Käse. Wenn schon, dann muss die Methode so aussehen

Gruß
Java:
public boolean isCorrect(int a, int b, int c){
   if(a == b || a == c)
     return true;

   return false;

Claus
Wer lesen kann ist klar im Vorteil... bitte lies dir doch die vorherigen Kommentare durch.

Btw: deine Lösung ist genauso fehlerbehaftet wie schon mehrfach erwähnt.
 

Joose

Top Contributor
Sorry aber die Lösungen sind alle Käse. Wenn schon, dann muss die Methode so aussehen
Aber auch nur wenn "a", "b" und "c" keine Klassenattribute sind ;)

Btw: deine Lösung ist genauso fehlerbehaftet wie schon mehrfach erwähnt.
Er wollte nur auf fehlende Parameter hinweisen ;)
Beide Lösungen (der Einzeiler und die längere Version) funktionieren und haben beide ihre Berechtigung je nach Anwendungsfall und Umfang.
Soll noch etwas geloggt werden bringt der Einzeiler wenig, wird das if-Statement zu kompliziert/lang ist es besser es aufzuteilen (Lesbarkeit > Kürze)
 
K

kneitzel

Gast
Und dann evtl. noch die Bemerkung: Wenn eine Funktion auf keine Instanzvariablen zugreift, dann macht es Sinn, die Funktion als static zu definieren.

Dies ist oft schon rein logisch erklärbar - so will ich ja generell wissen, ob ich z.B. ein korrektes Dreieck bekomme mit den Werten. Dann hat man den Vorteil, dass die Funktion statisch gebunden wird, was Performance-Vorteile mit sich bringt.
Der Nachteil ist, dass die Funktion nicht überschrieben werden kann.

Konrad
 
K

kneitzel

Gast
Wieso denn das Thallius? Wenn ich Eigenschaften einer Instanz abfrage, dann gehören da keine Parameter rein. Dazu werden die Funktionen ja auf der Instanz aufgerufen.

Also in der Klasse Auto habe ich evtl. eine Funktion isDriving() und die hat lediglich ein return speed > 0; und speed ist Bestandteil vom Auto. Da ist es doch Quatsch Parameter mit anzugeben und widerspricht auch komplett der objektorientierten Sichtweise:
Die Werte sind ja gekapselt! Evtl. habe ich ja gar nicht die Seiten a,b und c sondern nur a und b sowie einen Winkel.... (Blödes Beispiel, aber es gibt viele Wege, Daten vorzuhalten!)

Konrad

Edit: Oder war das jetzt nur auf das Posten eine Methode im Forum bezogen?
 

Thallius

Top Contributor
Ok, in Deinem Beispiel ist das natürlich ohne Parameter richtig. Mir erschien die Frage des TO aber eher in die Richtung ich mache mir eine Klasse wie zum Beispiel

public class Math

in der ich dann eine Methode

public boolean isPositiv(int a)

habe. Da wäre es nicht sinnvoll einen Kobnstruktor

public class Math(int Wert)

zu erstellen nur um dann eine Methode

public boolean isPositiv()

erstellen zu können.

Gruß

Claus
 

Thallius

Top Contributor
Das ist dann richtig, aber da dann das static nicht vergessen.

Warum? Es kann ja durchaus Sinn machen es nicht static zu machen. Nehmen wir mal an ich will erine Klasse schreiben die mir eine Währung umrechnet. Dann erstelle ich eine Instanz von

public class ChanceCurrency("Euro","Dollar")

und rufe eine Methoide darin auf von

public int changeValue(int value)

Man kann sich also für alles ein Beispielszenario basteln ;)

Gruß

Claus
 

Jardcore

Top Contributor
Wenn das Wort Wenn nicht wäre... es geht hier aber um einen exakten Fall :)
Wenn ich eine Motorsteuerung programmieren wollte dann würde ich wahrscheinlich .... (du verstehst worauf ich hinaus will)
 
K

kneitzel

Gast
Nein, dein Beispiel mit der Währung nutzt ja dann Instanzvariablen - halt die Währungen und den Umrechnungskurs.


Aber bei dem Beispiel war dies nicht der Fall. Dein Math Beispiel ist das beste Beispiel dafür. Erst eine Instanz von Math zu erzeugen, um dann isPositive aufzurufen ist einfach idiotisch. Dann doch lieber ein new Number(zahl).isPositive() ohne Argumente.

bezüglich static habe ich etwas geschrieben und zu den Fakten habe ich nichts zu ergänzen. (Maximal noch, dass Microsoft in Visual Studio sogar eine Warnung ausgibt beim check der code qualität, wenn eine funktion keine instanzelemente nutzt und nicht static ist. Das ist aber nur bedingt übertragbar, da es bezüglich static und dynamic bindings dort anders läuft.)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Amina556 Eigene Klasse definieren Java Basics - Anfänger-Themen 9
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
T Datentypen Eigene Datentypen Java Basics - Anfänger-Themen 15
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
D Attribut Telefonnummer - eigene Klasse oder String Java Basics - Anfänger-Themen 13
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
S Eigene LinkedList Klasse Java Basics - Anfänger-Themen 4
I Eigene Java Tools Nutzung Java Basics - Anfänger-Themen 6
G eigene Bibliothek einbinden Java Basics - Anfänger-Themen 1
K Eigene Annotations, Pre-/Post-/Call-Method Java Basics - Anfänger-Themen 6
O Erste Schritte Eigene charAt(i) Methode schreiben Java Basics - Anfänger-Themen 10
D Methoden Eigene Methode um alle Ausgaben aufzurufen Java Basics - Anfänger-Themen 17
L Eigene Exception schreiben bei zu langem Array Java Basics - Anfänger-Themen 10
P Maven und eigene Jars Java Basics - Anfänger-Themen 4
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
A Eigene Methoden entwicken Java Basics - Anfänger-Themen 3
F Klassen Eigene Exception Bedingungen festlegen Java Basics - Anfänger-Themen 2
H GSON-Bibliothek für eigene Programme benutzen Java Basics - Anfänger-Themen 2
H Klassen auf eigene Klasse zugreifen Java Basics - Anfänger-Themen 2
N Eclipse - eigene Icons unter ClassPath Resource Java Basics - Anfänger-Themen 0
N Eigene Stream Methoden implementieren Java Basics - Anfänger-Themen 3
R eigene Graphikbedienelemente Java Basics - Anfänger-Themen 8
V Generics / eigene Liste Java Basics - Anfänger-Themen 4
P Java 8 & Eigene Applets Java Basics - Anfänger-Themen 3
E Best Practice Exaktes Rechnen mit (Pseudo-)Rationalen/Realen Zahlen. Operations Zuweisung für (eigene) Klassen Java Basics - Anfänger-Themen 3
G eigene Bibliothek in Java importieren Java Basics - Anfänger-Themen 5
D Klassen Eigene Klasse für ArrayList Java Basics - Anfänger-Themen 6
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
P Vererbung Eigene HashMap Variante Java Basics - Anfänger-Themen 2
J Eigene Klasse für die Variablen? Java Basics - Anfänger-Themen 3
P Eigene Knöpfe mit eigenem Listener Java Basics - Anfänger-Themen 5
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
T Muss ein Parametertest immer eine eigene Testklasse sein? Java Basics - Anfänger-Themen 3
B Multithreading und eigene Queue entwickeln Java Basics - Anfänger-Themen 3
O GUI: Eigene Fenster "Form"? Java Basics - Anfänger-Themen 13
F Eigene LinkedList - toString Java Basics - Anfänger-Themen 10
O Denkanstöße für eigene Konfigurations-Datei Java Basics - Anfänger-Themen 12
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
C eigene Exception Java Basics - Anfänger-Themen 4
M externe JARs in die eigene JAR einbinden Java Basics - Anfänger-Themen 9
V Klassen import - einfaches Umleiten auf eigene Klassen? Java Basics - Anfänger-Themen 8
S Eigene Exception Klasse - fehlender Konstruktor mit String Java Basics - Anfänger-Themen 3
B eigene klasse in listen eintragen Java Basics - Anfänger-Themen 6
A Objekte in eigene Klasse auslagern Java Basics - Anfänger-Themen 2
S [JavaFX 2.1] - Eigene Sprachauswahl? Java Basics - Anfänger-Themen 4
K Klassen Eigene Exception verwenden Java Basics - Anfänger-Themen 9
J eigene packages bzw klassen verwenden Java Basics - Anfänger-Themen 25
E Eigene Stackklasse Java Basics - Anfänger-Themen 7
B Eigene Exceptions entwerfen Java Basics - Anfänger-Themen 3
S Eigene Exception Schreiben und Welche Auslösen wie ? Java Basics - Anfänger-Themen 7
P eigene kleine Datenverwaltung Java Basics - Anfänger-Themen 5
N Eigene Methoden-> Werte übergeben Java Basics - Anfänger-Themen 5
U Klassen Eigene Klassen importieren Java Basics - Anfänger-Themen 13
Kenan89 ActionListener in eigene Klasse Java Basics - Anfänger-Themen 8
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
S Eigene Klassen addieren Java Basics - Anfänger-Themen 3
B OOP Eigene Objekte in Arrays zusammenfassen Java Basics - Anfänger-Themen 3
E Eigene class datum Java Basics - Anfänger-Themen 2
G Eigene MessageBox kreieren Java Basics - Anfänger-Themen 9
I Erste Schritte Eigene Fehlermeldungen bei Exceptions Java Basics - Anfänger-Themen 19
F Klassen Eigene Klasse definieren Java Basics - Anfänger-Themen 4
S Eigene KeyEvent-Mask erstellen Java Basics - Anfänger-Themen 4
X Eigene Libary Java Basics - Anfänger-Themen 2
Crashbreaker Eigene Java-Programm ohne hilfe des CMD starten Java Basics - Anfänger-Themen 11
A Klassen Eigene Datenklasse - Strings mit fixer Länge Java Basics - Anfänger-Themen 2
T eigene Exception Klasse Java Basics - Anfänger-Themen 12
G Shape um eigene Achse drehen Java Basics - Anfänger-Themen 2
P Vererbung Basisklasse soll eigene Methode benutzen Java Basics - Anfänger-Themen 38
F Eigene Klasse für die Keys von HashMap Java Basics - Anfänger-Themen 5
J Eigene kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
G Eigene Klasse als Array, zugriff? Java Basics - Anfänger-Themen 2
xehpuk Ordner "Eigene Bilder" ansteuern Java Basics - Anfänger-Themen 3
V Sonderzeichen als eigene "Operatoren" im JTextField Java Basics - Anfänger-Themen 4
S Eigene Stack Klasse Java Basics - Anfänger-Themen 26
D Eigene equals methode schreiben Java Basics - Anfänger-Themen 4
dataframe OOP Eigene typisierte Liste Java Basics - Anfänger-Themen 3
W GUI als eigene Klasse oder in die Startklasse? Java Basics - Anfänger-Themen 21
T Konstruktor für eigene Klasse erstellen Java Basics - Anfänger-Themen 6
H Buttonbefehle in eigene Klasse schreiben Java Basics - Anfänger-Themen 8
M Datentypen Eigene iterierbare Liste Java Basics - Anfänger-Themen 4
G Eigene Klasse für externe Befehle - Warten auf Prozesse Java Basics - Anfänger-Themen 6
S Klassendiagramm - nur eigene Klassen? Java Basics - Anfänger-Themen 3
nrg Eigene simple List-Klasse programmieren Java Basics - Anfänger-Themen 3
C Eigene Interpreter-Programmiersprache mit Java Java Basics - Anfänger-Themen 17
B eigene Exception.... Java Basics - Anfänger-Themen 5
N Java Programm soll Datei in eigene jar schreiben Java Basics - Anfänger-Themen 13
F Eigene Exception StackTrace und Message ist leer warum??? Java Basics - Anfänger-Themen 3
M Eigene Pakete in Eclipse erstellen Java Basics - Anfänger-Themen 5
M Eigene Hash Funktion Java Basics - Anfänger-Themen 5
O Eigene Exceptions Java Basics - Anfänger-Themen 11
H eigene Schriftarten registrieren Java Basics - Anfänger-Themen 5
Kasoki Eigene Funktionen / Commands Java Basics - Anfänger-Themen 14
M Eigene LinkedList und Nodes Java Basics - Anfänger-Themen 20
S eigene Methoden in JDialog Java Basics - Anfänger-Themen 13
K eigene Hash-Datenstruktur Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben