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
 
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.
 
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.
 
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.
 
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.
 
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
 
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.
 
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).
 
Ü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
 
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
 

Zurück
Oben