Mehrere Werte gegeneinander prüfen

Status
Nicht offen für weitere Antworten.

Heady86

Bekanntes Mitglied
Morgen zusammen,

es handelt sich zwar zum einen um eine GUI Frage, aber da es mehr im die Technik im Hintergrund geht poste ich es mal hier.

Welche Technik ist sinnvoll wenn ich mehrere Werte gegeneinander abprüfe um nicht zutreffende auszuschließen.

Explizites Beispiel:

Im Hintergrund hab ich mehrere "Mischungen" abgespeichert:
--> Mischungenz.B. Spezi und Apfelschorle.

Im Vordergrund habe ich eine GUI mit Checkboxen und eine leere Textbox (für die Ausgabe):
--> Checkboxen: Cola, Fanta, Apfelsaft, Sprudel

Funktion soll nun sein dass wenn ich Cola und Fanta anhake, dass unten Spezi (oder ein Rezept, je nachdem was hinterlegt ist) ausgegeben wird. Bei so wenigen Komponenten wäre es ja jetzt noch denkbar mit if-anweisungen und Bitoperatoren zu arbeiten.

Was aber wenn man 20 Komponenten zur Auswahl hat (wie z.B. bei einem Cocktail) und dann das Ergebnis ausgegeben werden soll.

Evtl. eine verkettete Liste?

Danke fürs auf die Sprünge helfen :)

Grüße
 
B

bygones

Gast
ne verkettete liste bringt da nicht viel.

ich wuerds ueber ne datenbank machen....
 

Heady86

Bekanntes Mitglied
ich wuerds ueber ne datenbank machen

Das heißt wenn z.B. Cola angehakt wurde, speicher ich mir Cola in ne Variable und Query dann in die DB irgendwas mit ...WHERE getränk='variable' ....usw ? Versteh ich das in etwa richtig so?
 
B

bygones

Gast
Das heißt wenn z.B. Cola angehakt wurde, speicher ich mir Cola in ne Variable und Query dann in die DB irgendwas mit ...WHERE getränk='variable' ....usw ? Versteh ich das in etwa richtig so?

ja du hast in der DB fuer eine Mischung eine reihe von Getraenken. Wenn nun Getraenk A, Getraenk B und Getraenk X angekreuzt wurden sendest du ne query ab die nach Mischungen mit diesen Getraenken sucht.
 
S

Spacerat

Gast
Warum denn gleich 'ne DB? Es gibt doch Collections
Java:
public interface Getraenk
{
  public void trinken();
  public void verschuetten();
  // waa...
}

final class Grundgetraenk
implements Getraenk
{
  // Getraenk implementieren usw...
}

final class Mixgetraenk
implements Getraenk
{
  private final Collection<Grundgetraenk> zutaten;

  public Mixgetraenk(Collection<Grundgetraenk> zutaten)
  {
    if(zutaten == null || zutaten.isEmpty()) {
      throw new IllegalArgumentException("keine Zutaten");
    }
    // pruefen, ob alle Zutaten gueltig sind...
    // ...
    this.zutaten = Collections.unmodifiableCollection(zutaten);
  }

  public boolean contains(Grundgetraenk getraenk)
  {
    return zutaten.contains(getraenk);
  }

  public boolean containsAll(Collection<Grundgetraenk> getraenke)
  {
    return zutaten.containsAll(getraenke);
  }

  // Getraenk implementieren usw.
}
 
B

bygones

Gast
wenn schon ne DB da ist erspar ich mir die persistierung von zig Collections um dann ueber alle laufen zu muessen und ueber contains alles zu erfragen.

aber natuerlich, gehen tut es auch
 

Heady86

Bekanntes Mitglied
Hi,

so wollte jetzt mal mein Vorhaben umsetzen bzw es mal testen.

Ich wollte es vorab jetzt mal mit einer DB testen, nur mal um zu sehen wie es geht. (Mit Collections hab ich noch nie gearbeitet, werd ich mir aber auch mal ansehen).

Ist-Zustand:
  • Also, ich hab mir jetzt mit swing mal ne GUI aufgebaut zum Testen (siehe Bild1).
  • Im Hintergrund habe ich zum testen eine Tabelle (siehe Bild2).
  • Testabfragen funktioneren, Verbindung passt also.

Soll-Zustand:
Wenn jetzt z.B. Fanta und Cola anhake soll bei Klick auf Query in der Datenbank gesucht werden und dann Spezi ausgeben.

Problem:
Ich muss mir jetzt ja anhand der checkboxen einen entsprechenden Query zusammenbauen, wie könnte der aussehen? Ich suche sowas in die Richtung:
"SELECT Mischung FROM Getränke WHERE ???Zutaten = ..isChecked()????" .

Für die Checkboxen nutz ich einen ItemListener oder?

Ich weiß also nicht wie ich die einzelnen Zutaten ansprechen/filtern kann, ich sollte die Zutatenspalten ja irgendwie variable machen und nicht Zutat 1, 2 usw.
Für Tipps wär ich dankbar (kann auch die Tabelle umbauen, nur wie)

Danke und schönen Abend
 

Landei

Top Contributor
Du solltest eine Getränketabelle haben, die ID und Mischung enthält, und eine Zutatentabelle, die ebenfalls ID (aber nicht als Primär- sondern Fremdschlüssel) enthält und eine(!) Spalte mit Zutaten.

Deine erste Zeile wäre dann "1, Spezi" in der Getränketabelle und "1,Cola","1, Fanta" in der Zutatentabelle.

Die Abfrage wäre dann:
SELECT * FROM Getränke
WHERE NOT exists (SELECT * FROM Zutaten WHERE ID = Getränke.ID AND Zutat NOT IN ('Cola', 'Fanta')

Auf deutsch: Suche mir alle Getränke, für die es keine Zutat gibt, die nicht etweder Cola oder Fanta ist.

Vielleicht geht es auch eleganter, komm grade nicht drauf...
 

Heady86

Bekanntes Mitglied
Super, danke schonmal für die Tipps, werd ich so umbauen.

Eine Frage noch.

Kann ich den Bereich:
('Cola', 'Fanta')
irgendwie abhängig von den Checkboxen machen? Also so dass da nicht hardgecodet Cola/Fanta drinsteht weil das ja nur auf das Beispiel zutrifft, also dass er da auf die Werte prüft die in der GUI angehakt sind.
 

Landei

Top Contributor
Ich glaube nicht, dass PreparedStatements bei variabler Variablenanzahl funktionieren (aber da kann ich mich irren). Aber du kannst dir den String einfach dynamisch zusammenbauen, am besten mit einem StringBuilder.
Java:
StringBuilder sb = new StringBuilder("SELECT * FROM ... AND Zutat NOT IN (");
boolean first = true;
for(String zutat : zutaten) {
   if(first) first=false else sb.append(",");
   sb.append("'").append(zutat).append("'");
}
sb.append(")");
String sql = sb.toString();
 

Heady86

Bekanntes Mitglied
Hm, entweder hab ich noch nen Denkfehler oder bei dem Query passt noch etwas nicht:
SELECT * FROM Getränke
WHERE NOT exists (SELECT * FROM Zutaten WHERE ID = Getränke.ID AND Zutat NOT IN ('Cola', 'Fanta')
Ausgabe:
1 Spezi
2 O-Saft

aber eigentlich sollte ja nur "1 Spezi" ausgegeben werden.

Struktur ist jetzt mal so, hab ich was übersehen?
 

HannsW

Bekanntes Mitglied
Ich würd mir ne db anlegen, in der die Zutaten als EIN String stehen( und das Ergebnis als zweites Feld), und das ganze vosrorglich noch UpperCase.

DAnn kann man anhand der selectierten Buttons deren Texte aneinanderhängen, und in der DB suchen.
COLAFANTAO-SAFT würdest Du dann nicht finden, wohl aber COLAFANTA = Spezi
 

Wookie81

Aktives Mitglied
Servus

Es kommt ein bißchen drauf an was du willst (Java lernen, Umgang mit DBen üben oder nur das Programm schreiben) ... wenn du einfach das Programm schreiben willst kannst du natürlich die Lösung von HannsW nehmen, die ist aber weder gut noch löst sie das Problem elegant.

Ich bin mir nicht ganz sicher was du willst:
a) alle Mischungen angeben die man mit den gegebenen Zutaten machen kann
b) alle Mischungen die mindestens die gegebenen Zutaten enthalten angeben

Falls a): Landeis Lösung ist schon recht gut, funktioniert aber nur für Mischungen welche mindestens eine Zutat haben (aber das sind ja alle Mischungen!). Um dies abzufangen müsste man sich eine andere Abfrage überlegen oder man hängt einfach
SQL:
AND exists (SELECT * FROM Zutaten WHERE ID = Getraenke.ID)
an. Drei SELECTs für so eine Anfrage ist natürlich nicht mehr elegant ;)

Falls b) nochmal bescheid geben oder selbst überlegen, wie die Abfrage lauten müsste.

Wk
 

Heady86

Bekanntes Mitglied
Morgen,
Ich würd mir ne db anlegen, in der die Zutaten als EIN String stehen( und das Ergebnis als zweites Feld), und das ganze vosrorglich noch UpperCase
OK, das wär natürlich auch noch eine Möglichkeit.

Ich bin mir nicht ganz sicher was du willst:
a) alle Mischungen angeben die man mit den gegebenen Zutaten machen kann
Genau das. Nochmal Beispiel:
Es gibt "Saures Radler (Bier+Sprudel)" und OSaftschorle (OSaft+Sprudel), hake ich in der GUI Osaft [x] und Sprudel[x] an soll nur Osaftschorle aber NICHT Saures Radler ausgegeben werden, da nicht alle Bedingungen zutreffen.
AUSNAHME:

Wenn ich z.B Weizen und Osaft ankreuze, darf natürlich auch Weizen ausgegeben werden. D.h. Rezepte wo eine Zutat die ich ankreuze gar nicht drin ist darf ausgegeben werden, aber ein Rezept wo eine Zutat drin ist die ich NICHT angekreuzt habe nicht

Weizen[x] , Osaft[x] und Cola[]-->Ausgabe: Weizen
Aber KEINE Ausgabe von Colaweizen, da dafür nicht alle "Muss"-Zutaten angehakt wurden

Ich hoff das war jetzt nicht allzu kompliziert ???:L

Drei SELECTs für so eine Anfrage ist natürlich nicht mehr elegant
Da geb ich dir recht :)

Grüße
 

Heady86

Bekanntes Mitglied
Osaft [x] und Sprudel[x] hat das gleiche Ergebnis wie
Weizen[x],Osaft [x] und Sprudel[x] ??
Nein.

Osaft [x] und Sprudel[x]
Ausgabe:
1, Osaftschorle

Weizen[x],Osaft [x] und Sprudel[x]
Ausgabe.
1, Osaftschorle
2, Weizen

Sorry wenns falsch rübergekommen ist.

Google mal nacvh dem sog. Specification Design Pattern.
Werd ich mir ansehen, danke
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Mehrere Werte in einem Switch Case parallel überprüfen Java Basics - Anfänger-Themen 6
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
C Mehrere Double werte einlesen Java Basics - Anfänger-Themen 5
M SortedMap mehrere Werte Java Basics - Anfänger-Themen 8
H Eine Methode mehrere Werte zurückgeben lassen Java Basics - Anfänger-Themen 7
F Hashmap, mehrere werte/key Java Basics - Anfänger-Themen 2
J mehrere double Werte einlesen Java Basics - Anfänger-Themen 18
G mehrere Werte für .equals ? Java Basics - Anfänger-Themen 22
S mehrere Werte zu einem Key abspeichern Java Basics - Anfänger-Themen 3
M mehrere return-Werte Java Basics - Anfänger-Themen 10
B Mehrere Werte mit Comparable sortieren Java Basics - Anfänger-Themen 14
F Mehrere Double-Werte aus einem String Java Basics - Anfänger-Themen 3
N Mehrere Werte gleichzeitig in ein Array schreiben? Java Basics - Anfänger-Themen 7
M Mehrere Werte aus einer Methode zurückgeben Java Basics - Anfänger-Themen 7
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
T Mehrere if bedingungen ohne & Java Basics - Anfänger-Themen 2
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
MiMa Java Doc mehrere Return Parameter Java Basics - Anfänger-Themen 11
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
Buroto Klassen Mehrere .txt Datein verbienden und anschließend auslisten Java Basics - Anfänger-Themen 10
S mehrere TreeSets so speichern, dass man sie miteinander vergleichen kann Java Basics - Anfänger-Themen 1
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
C mehrere JPanel in ein JFrame bringen Java Basics - Anfänger-Themen 9
L Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben Java Basics - Anfänger-Themen 9
D mehrere Berechnungen in einer Methode Java Basics - Anfänger-Themen 9
U Kann man bei Java gleich mehrere Bedingungen prüfen in der If, aber in einem "Satz"? Java Basics - Anfänger-Themen 1
Kotelettklopfer Mehrere Projekte in einem Git verwalten Java Basics - Anfänger-Themen 10
I JAX-RS Mehrere Parameter in Query Java Basics - Anfänger-Themen 3
M mehrere Rückgabenwerte aus Methode Java Basics - Anfänger-Themen 7
A Input/Output Mehrere Csv-Dateien einlesen Java Basics - Anfänger-Themen 2
R Mehrere Buchstaben aus einem String entfernen Java Basics - Anfänger-Themen 1
TimoN11 Java - Eine oder mehrere Eingaben möglich machen Java Basics - Anfänger-Themen 6
M Mehrere Datenbank zugriffe über tomee.xml regeln? Java Basics - Anfänger-Themen 1
S Mehrere Probleme im Code Java Basics - Anfänger-Themen 7
Ich lerne Java. Methoden Mehrere Methoden mit Punkt Java Basics - Anfänger-Themen 45
M Ausgabe einer Liste welche mehrere Stacks enthält Java Basics - Anfänger-Themen 3
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
F Mehrere Server Sockets in einer Anwendung Java Basics - Anfänger-Themen 9
T DoWhile Schleife über mehrere Mothoden Java Basics - Anfänger-Themen 5
B Methoden Mehrere ähnliche Methoden zusammenfassen Java Basics - Anfänger-Themen 24
E Mehrere Eingabezeilen gleichzeitig einlesen Java Basics - Anfänger-Themen 7
C Mehrere Zufallswerte Java Basics - Anfänger-Themen 4
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
R Error, wenn mehrere Clients gleichzeitig die Verbindung beenden Java Basics - Anfänger-Themen 16
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
O Datei in mehrere kleine Dateien umwandeln Java Basics - Anfänger-Themen 47
Henri Mehrere Ordner umbenennen Java Basics - Anfänger-Themen 11
E Mehrere Arrays addieren mit Übertrag Java Basics - Anfänger-Themen 13
J Mehrere paintComponenten in einem Programm Java Basics - Anfänger-Themen 0
F Mehrere Buttons mit einem ActionListener abdecken Java Basics - Anfänger-Themen 24
B Jeweils den Parent bekommen -> mehrere Ebenen Java Basics - Anfänger-Themen 2
javajoshi mehrere Threads: Methoden zentral unterbringen Java Basics - Anfänger-Themen 8
M Erste Schritte Mehrere eingaben in einer Line vergleichen (if equals...) Java Basics - Anfänger-Themen 6
L Mehrere Jars im Unterordner Java Basics - Anfänger-Themen 2
L LibGDX - mehrere Screens Java Basics - Anfänger-Themen 1
J Sudoku mehrere Lösungen Java Basics - Anfänger-Themen 29
F Mehrere Instanzen der Klasse A EINER Instanz der Klasse B übergeben Java Basics - Anfänger-Themen 3
T Mehrere JFrames gleichzeitig öffnen Java Basics - Anfänger-Themen 6
O Erste Schritte Scanner mehrere male benutzen (Konsole) Java Basics - Anfänger-Themen 7
S mehrere If Bedingungen Java Basics - Anfänger-Themen 5
F Mehrere Zeilen zu einer Zeile zusammenfügen und in eine Datei schreiben Java Basics - Anfänger-Themen 1
B Mehrere Zahlen speichern Java Basics - Anfänger-Themen 60
M mehrere extends? Java Basics - Anfänger-Themen 19
N Datei Zeilenweise einlesen, Ausgabe mehrere Arrays Java Basics - Anfänger-Themen 7
C ButtonController löst mehrere Methoden aus Java Basics - Anfänger-Themen 5
D JPanel mehrere Formen zeichnen Java Basics - Anfänger-Themen 5
B Timer mehrere Male ausführen Java Basics - Anfänger-Themen 4
kilopack15 Mehrere Threads in einer Klasse Java Basics - Anfänger-Themen 8
F mehrere eingegebene Zahlen mit Zahlen von 1-9 multiplizieren Java Basics - Anfänger-Themen 18
F Mehrere Konstruktoren? Wofür? Java Basics - Anfänger-Themen 21
J Mehrere Eingabefelder programmiert (Zeigt Fehler an) Java Basics - Anfänger-Themen 6
Jinnai4 Mehrere Textfelder überprüfen Java Basics - Anfänger-Themen 16
N Mehrere Forms auf einem Panel Java Basics - Anfänger-Themen 6
Tommy Nightmare Variable auf mehrere Ungleichheiten prüfen Java Basics - Anfänger-Themen 18
D Mehrere Objekte in ein Objekt zusammenfassen Java Basics - Anfänger-Themen 16
D Input/Output Mehrere Befehle nacheinander ausführen Java Basics - Anfänger-Themen 20
K Mehrere Objekte anlegen Java Basics - Anfänger-Themen 23
N Integers aus Textdatei auslesen und mehrere Arrays erstellen Java Basics - Anfänger-Themen 9
S Verständnis - Frage mehrere SQL Statements in While Schleife Java Basics - Anfänger-Themen 0
J MVC Pattern, mehrere Controller/Views/Models Java Basics - Anfänger-Themen 0
J Mehrere IF Anweisungen und dazugehörige ELSE Java Basics - Anfänger-Themen 6
I Klassen Mehrere Java Klassen in einer .java Datei Java Basics - Anfänger-Themen 7
V Mehrere Dateien aus JFileChooser in eine ArrayList speichern Java Basics - Anfänger-Themen 2
F Mehrere Konstruktoren Java Basics - Anfänger-Themen 10
A Mehrere Radiobuttons Java Basics - Anfänger-Themen 3
B Klassen Mehrere Objekte mit Schleife erstellen - How? Java Basics - Anfänger-Themen 1
T Mehrere Methoden in der main-Methode verknüpfen und aufeinander anwenden Java Basics - Anfänger-Themen 2
V OOP Aufnahme von Dreiecken in ein/mehrere Objekte Java Basics - Anfänger-Themen 0
Q OOP Mehrere Instanzen auf ein Feld Java Basics - Anfänger-Themen 13
C Klasse auf mehrere Objekte zugreifen lassen Java Basics - Anfänger-Themen 26
G Mehrere If-else-Sätze der Reihe nach durchlaufen lassen Java Basics - Anfänger-Themen 2
K Mehrere String.valueOf() kürzer schreiben / "packen"? Java Basics - Anfänger-Themen 2
F String mehrere male ausgeben? Java Basics - Anfänger-Themen 4
H wie mehrere variablen in einfacher for-schleife? Java Basics - Anfänger-Themen 2
H möglichkeiten für for-schleife? (mehrere ausgangsvariablen?) Java Basics - Anfänger-Themen 9
M PdfBox - mehrere Formularseiten Java Basics - Anfänger-Themen 2
Z Mehrere XML-Dateien zu einer zusammenfügen Java Basics - Anfänger-Themen 3
M GUI- mehrere Komponenten auf Container adden Java Basics - Anfänger-Themen 2
I Erste Schritte Resource Bundle - Alles in einem File oder mehrere? => Faktor Performance Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben