Switch Anweisung

MiMa

Top Contributor
Hallo,
derzeit beschäftige ich micht mit Switch-Anweisungen.
Ich möchte gerne aus einen gegebenen Text eine Bedingung erfüllen, die aus 3 String Schlagwörtern besteht.
Gelöst habe ich es derzeit mit einer IF-Anweisung, würde aber gerne mal nachfragen, wie es mit einer Switch-Anweisung funktioniert?
Java:
public static String sucheRechnungsart(String text) {
        String rechnungsart ="";
       
        if (text.contains("Arzt") && text.contains("Patient") && text.contains("Behandlung")) {
            rechnungsart = "Arzt";
            IndexLogger.info("Es wurde eine Arztrechnung erkannt");
        } // if Bedingung
       
        switch (text) {
        case "Arzt"+" Patient"+" Behandlung":
                System.out.println("Es wurde eine Arztrechnung im Switch erkannt");
                break;
        } // switch
        return rechnungsart;
    } // sucheRechnungsart
Ich habe versucht eine Switch-Anweisung zu erstellen, aber scheinbar wird es als eine Zeichenkette mit Leerzeichen verglichen, was nicht das gleiche ist wie eine && Beziehung.
Die && funktioniert in dieser aber Form nicht.
Über eine Tipp würde ich mich sehr freuen.
Vielen Dank
M
 

Robat

Top Contributor
Dafür ist eine switch-Anweisung schlicht und ergreifend nicht gedacht.
Mit einer switch-Anweisung kannst du den Inhalt einer Variable auf verschiedene Zustände prüfen. Also bspw ob in text "Arzt" drin steht.
Du willst aber wissen ob text "Arzt" / "Patient" / "Behandlung" enthält. Das sind 2 verschiedene Dinge.

Ein "hacky" Weg wäre zwar folgender:
Java:
String text = "Arzt und Patient oder Behandlung";

switch(String.valueOf(text.contains("Arzt") && text.contains("Patient") && text.contains("Behandlung"))) {
     case: "true":
          // do something
          break;
     default:
          // do something else
          break;
}

Aber ich sehe keinen Grund eine switch-Anweisung so zu missbrauchen ;)
Meiner Meinung nach fährst du in dem Anwendungsfall mit einer if-Anweisung ganz gut.
 

Lamajockey

Mitglied
Hi,
mach dir mal klar was in der Variable text steht.
Wenn der Inhalt jetzt genau "Arzt Patient Behandlung" wäre
würde dein Code schon funktionieren.
 

MiMa

Top Contributor
Vielen Dank.
Also muss bei der Switch-Anweisung der gleiche Inhalt in der Abfrage enthalten sein wie bei der IF-Anweisung. Ich sehe dann keinen Grund eine Switch-Anweisung zu nutzen, da es keinen wesentlichen Vorteil bringt. Geprüft wird kein String der zusammengebaut wird, sondern eine Kombination. Die Reihenfolge kann verschieden sein, wichtig ist nur das die verschiedenen Suchwörter enthalten sind.
Es ist halt nur dann eine Arzt Rechnung wenn die Bedingung "Arzt && Patient && Behandlung" oder "Patient && Arzt && Behandlung" usw. erfüllt ist. Das mit den "Arzt+Patient+Behandlung" ist ein String, der niemals in dieser Form vorhanden sein wird.
 

Robat

Top Contributor
Ich sehe dann keinen Grund eine Switch-Anweisung zu nutzen
Natürlich ist es kein muss. Du kannst eine switch-Anweisung auch ganz einfach als if darstellen.
Nur bringt es mMn einen großen Vorteil eine switch zu verwenden: Lesbarkeit.

In meinen Augen ist
Java:
String text = "WertX";

switch(text) {
     case "Wert1":
         doSomething();
         break;
     case "Wert2":
         doSomethingElse();
         break;
     default:
         someDefaultStuff();
         break;
}

lesbarer, als folgendes:

Java:
String text = "WertX";

if(text.equals("Wert1") {
    doSomething();
} else if(text.equals("Wert2") {
    domeSomethingElse();
} else {
   someDefaultStuff();
}

Aber das ist sicherlich irgendwo Geschmackssache.
 

MiMa

Top Contributor
Ja Du hast recht, die Lesbarkeit ist bei Switch besser, obwohl die Bedingung die gleiche ist.
Die Liste wird ja auch mit der Zeit wesentlich länger. Ich denk, das ich doch die Swicht-Anweisung nutzen werden.
Vielen Dank
 

MiMa

Top Contributor
Spätestens wenn ein Switch mehr als 10 cases hat sollte man über sein Gesamt-Konzept dringend nachdenken.
Über was soll man denn dann nachdenken?
Wenn ich Rechnungen Kategorisieren muss, dann ist halt für jede Art eine eigene Abfrage nötig, um dies zu definieren. Arzt, Versicherungen,....
Was mir dazu eher einfallen würde wäre eine Künstiche intelligenz, die das selbst entscheiden kann.
Aber damit habe ich mich nicht beschäftigt, hört sich aber nach sehr viel Wissen und Arbeit an um ein Programm bei zu bringen selbstständig zu lernen.
 

Robat

Top Contributor
Ich glaube mit einer geeigneten Datenstruktur könntest du dir relativ viele Abfragen vereinfachen.

Such dir eine Datenstruktur (bspw eine Map) in der du zu jeder Kategorie bestimmte Key-Words zuordnen kannst.
Wenn du nun einen Text kategorisieren willst, iterierst du über die Kategorien und vergleichst alle Key-Words mit dem Text.

Wenn du was passendes gefunden hast gibst du die Kategorie zurück (oder machst irgendwas mit der Kategorie).
 

Thallius

Top Contributor
Über was soll man denn dann nachdenken?
Wenn ich Rechnungen Kategorisieren muss, dann ist halt für jede Art eine eigene Abfrage nötig, um dies zu definieren. Arzt, Versicherungen,....
Was mir dazu eher einfallen würde wäre eine Künstiche intelligenz, die das selbst entscheiden kann.
Aber damit habe ich mich nicht beschäftigt, hört sich aber nach sehr viel Wissen und Arbeit an um ein Programm bei zu bringen selbstständig zu lernen.

Du solltest dich fragen wofür du wissen willst was für ein Typ das ist. Wenn es z.B. darum geht ihnen etwas bestimmtest zuzuweisen kannst du zum Beispiel einfach eine Map machen in der der Typ dein Key ist und die Value eben das was du zuweisen willst.
Oder Du willst für jeden Typ eine andere Aktion ausführen? Dann solltest Du eine Klasse Vertrag definieren und jeden einzelnen Typ als Ableitung davon. Dann kannst du die "Bearbeiten" Methode in jeder Klasse überschreiben. Oder Du arbeitest mit Interfaces oder oder oder.

Gruß

Claus
 

MiMa

Top Contributor
Map werde ich mir anschauen, vielleicht vereinfacht sich dann noch etwas.
Viel lieber würde ich mir die Abfragen auch sparen, aber irgendwie muss ja definiert werden, wo die unterschiede sind.

Ich denke das ich mich auch noch umschauen werden, wenn es um die GUI geht.
Daran habe ich noch keine Zeile geschrieben. Das ganze ist jetzt zwar erst mal Hardcoded. Wünschen würde ich mir später, das man Suchkriterien in eine Liste eingeben kann, die dann entsprechend verfährt.
Danke
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Switch Anweisung Allgemeine Java-Themen 4
C Switch mit String Allgemeine Java-Themen 19
F Switch Prefix Suffix Allgemeine Java-Themen 9
K Enum mit switch Allgemeine Java-Themen 2
K Eclipse Alternativkonstrukte (Verzweigungen: if, switch,else..) Allgemeine Java-Themen 4
I switch aus der realen Welt Allgemeine Java-Themen 17
Q Variable aus Schleife/Switch benutzen Allgemeine Java-Themen 7
N switch Statement Allgemeine Java-Themen 4
M Verständnis enum - switch Allgemeine Java-Themen 2
R Java enum switch Allgemeine Java-Themen 11
Escorter Switch in der Schleife! Allgemeine Java-Themen 4
F Frage zu switch und enums Allgemeine Java-Themen 5
P switch/actionPerformed Allgemeine Java-Themen 7
G switch case VS. if.else if Allgemeine Java-Themen 2
M Switch von case zu case weiterleiten Allgemeine Java-Themen 6
E if oder switch Allgemeine Java-Themen 27
E Es ist nicht möglich, eine Batch-Anweisung auszuführen. Allgemeine Java-Themen 9
killig HashMap mit if-Anweisung überprüfen Allgemeine Java-Themen 4
S Methoden "Unschöne" Break-Anweisung aus verschachtelter Funktion entfernen Allgemeine Java-Themen 11
E Die if-Anweisung in einer Java Bean bzw. in einem Servlet? Allgemeine Java-Themen 8
O Darstellung von else if anweisung im struktogramm? Allgemeine Java-Themen 1
J VB --> Java (Set Anweisung) Allgemeine Java-Themen 2
M if-Anweisung in endlosschleifewird nicht aufgerufen Allgemeine Java-Themen 2
J if else Anweisung macht nicht was es soll. Wieso? Allgemeine Java-Themen 10
S Else-Anweisung Problem Allgemeine Java-Themen 17
S Erste Schritte if-Anweisung in for- oder while-schleife umwandeln Allgemeine Java-Themen 3
S Problem mit if-Anweisung Allgemeine Java-Themen 6
K import- Anweisung fehlerhaft und andere Fehler (eclipse) Allgemeine Java-Themen 2
R if-Anweisung wird angemeckert, andere identische nicht Allgemeine Java-Themen 9
@ [Eclipse] Fehlermeldung bei import-Anweisung Allgemeine Java-Themen 3
M try-catch (Wie erzwing ich die catch-Anweisung)? Allgemeine Java-Themen 13
M Problem mit if-Anweisung Allgemeine Java-Themen 10
S mehrfach if-anweisung Allgemeine Java-Themen 8
B Zwei Bedingungen für eine Anweisung Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben