Ein Objekt nach einem String durchsuchen?

Pimbulli

Mitglied
Hallo zusammen,

ich bin ein ziemlicher Java Anfänger und soll im rahmen meiner Projektarbeit ein Programm für ein Videoverleih erstellen.
Ich würde nun gerne implementieren, dass der Kunde einfach die Filme die er haben möchte (bis zu 4) in vier verschiedene Strings eingibt, und dann der entsprechende Film inkl. Preis ausgegeben wird.
Habe mir gedacht, dass ich vllt. die einzelnen Objekte (die auch den Namen enthalten) nach den eingegeben Strings durchsuche, aber weiß ich leider echt nicht wie ich das umsetzen soll.
Hat jemand vllt einen Vorschlag oder Tipp?

[CODE lang="java" title="Beispiel Objekt"]Blockbuster ThirtyHours;
Blockbuster.setArtikelnummer(1);
Blockbuster.setPreis(1.99);
Blockbuster.setMaxAusleihe(14);
ThirtyHours = new Blockbuster();
ThirtyHours.setVorhanden(true);
ThirtyHours.setAltersbeschränkung(16);
ThirtyHours.setLaufzeit(144);
ThirtyHours.setProduktionsland("USA");
ThirtyHours.setName("Thirty Hours");[/CODE]

[CODE lang="java" title="Kundeneingabe"]int ausleihe = 7;
boolean verlängern = false; //ob der Kunde den Ausleihzeitraum verlängern möchte
String film1 = "I am Legend";
String film2 = "Anderer Film";
String film3 = "Film";
String film4 = "wieder ein Film";
[/CODE]
 
Ich würde ein Interface "Searchable" mit spendieren, welche alle suchbaren Objekte implementieren müssen. Das Interface könnte eine Methode "search" definieren, welches ein boolean zurückliefert, auf welches gefiltert werden kann. So in etwa:

Java:
class Blockbuster implements Searchable {
  // ...

  public boolean search(String keyword) {
    return name.equals(keyword);
  }
}
 
Erst einmal am Range ein anderer Punkt: Die Klasse Blockbuster scheint recht dubios zu sein, denn da sind einige statische Dinge definiert, die dubios sind. Oder kosten z.B. alle Blockbuster das Gleiche?
Und das setzen der Artikelnummer ist auf Klassenebene auch recht dubios ...

Und wenn Du Blockbuster durchsuchen willst, dann würde ich das einfach in einer entsprechenden Methode prüfen. Die Klasse Blockbuster wird ja wohl am Besten wissen, welche Felder durchsucht werden sollten.
 
Ich verstehe deine Art, den Preis zu setzen nicht ganz, du verwendest es als eine Klassenvariable, willst du das so? (Dass alle Filme gleich viel kosten)
Und die Artikelnummer, die bei dir ja ein Zähler zu sein scheint, könnte man schöner in einem Konstruktor setzen, allgemein könntest du dir damit die Initialisierung der Blockbuster etwas kompakter gestalten.
Als Anfänger hätte ich alle Filme in einem array gespeichert und wäre mit einer Methode sucheBlockbuster() der Array durchgegangen und hätte mit der .equals()-Funktion dann einfach die Namen abgeglichen. Kommt natürlich drauf an, wie weit ihr seit und was ihr damit üben sollt.
 
Also bzgl. des Interfaces:
Das Klappt, allerdings müsste ich dann für jeden Film in Blockbuster (und auch für die anderen Kategorien) jeweils eine solche abfrage machen oder?
[CODE lang="java" title="Abfrage"]if(ThirtyHours.search(film1) | ThirtyHours.search(film2) |
ThirtyHours.search(film3) | ThirtyHours.search(film4) ) {
System.out.println("Name ist enthalten.");
}
else {
System.out.println("Name nicht enthalten.");
}[/CODE]
Kann man nicht irgendwie eine ganze Klasse nach einem String überprüfen?
Mein Ziel ist es btw., dass die Filme die der Kunde eingibt überprüft werden (ob diese in einer der Klassen existieren) und daraufhin für die eingegeben Filme eine Rechnung ausgeführt wird:
Die Werte dieser Methoden sollten dann von den filmen kommen
[CODE lang="java" title="Rechnnung"] public static double rechnungKorrekt(double preis, int ausleihzeitraum, String name, boolean verlängern, boolean vorhanden, boolean mitgliedschaft) {
double versand = 4.0;
double mwst = 1.07;
double rabatt = 0.8;
double result = (preis * ausleihzeitraum) * mwst;
if(verlängern == true && mitgliedschaft == true && vorhanden == true) {
result = ((preis * (ausleihzeitraum + 2)) * mwst) * rabatt;
return round(result, 2);

}
else if(verlängern == false && mitgliedschaft == true && vorhanden == true) {
result = ((preis * ausleihzeitraum) * mwst) * rabatt;
//System.out.println(round(result, 2));
return round(result, 2);
}
else if(verlängern == false && mitgliedschaft == false && vorhanden == true) {
result = (preis * ausleihzeitraum + versand) * mwst;
//System.out.println(round(result, 2));
return round(result, 2);
}
else if(verlängern == true && mitgliedschaft == false && vorhanden == true) {
result = ((preis * (ausleihzeitraum + 2)) + versand ) * mwst;
//System.out.println(round(result, 2));
return round(result, 2);
}
else return 0.0;[/CODE]
 
Also es macht aus meiner Sicht keinen Sinn, dass man da generell alles prüft. Was genau stört Dich da jetzt?

Die lange Abfrage? Man kann natürlich jederzeit eine Methode bauen, die entweder ein String Array mit Begriffen nimmt oder eben ein varargs Aufruf:
Java:
public boolean searchAll(final String... searchValues) {
    for (String searchValue: searchValues) {
        if (search(searchValue)) return true;
    }
    return false;
}

Dann hast Du nur noch die Abfrage nach if(ThirtyHours.search(film1, film2, film3, film4) )
 

Neue Themen


Zurück
Oben