Informatik Wartebank programmieren (Java, Arrays)?

3 Antworten

Die Wartebank braucht einen Zugriffspunkt auf alle Helden, bspw. via Array / Liste / .... Diese kannst du dann mittels Schleife durchlaufen, um nach dem Held mit dem gegebenen Wert zu suchen.

Pseudocode:

for hero in heroes
  if hero.name eq nameOfHeroSearchedFor
    return hero
return null

Das Suchverfahren entspräche einer linearen Suche. Optimieren kannst du dies, indem du Helden beim Einspeichern in die Liste bereits richtig einsortierst. Dann könnte eine binäre Suche eingesetzt werden.

Bezüglich des Sortierens hilft dir der Wikipedia-Artikel zu Sortierverfahren weiter. Einfach wäre der Bubblesort zu implementieren. Effektiver sind Verfahren wie Quicksort oder Mergesort.

hairybear  18.09.2018, 13:37

oder er implementiert das interface comperable, dann kann er mit array.sort drauf zugreifen.

1
regex9  18.09.2018, 13:52

PS.: Helden sollten miteinander vergleichbar sein. Gib der Klasse also noch eine Methode equals.

@Override
boolean equals(Object other) {
  if (this == other) {
    return true;
  }

  if (!getClass().equals(other.getClass()) {
    return false;
  }

  Hero otherHero = (Hero) other;
  return lifepoints == otherHero.lifepoints && /* ... */;
}

Normalerweise würde hier noch die Methode hashCode (für das Speichern des Objekts HashSets, etc.) implementiert werden, das lasse ich für diesen Fall aber einmal außen vor.

Kurz gesagt prüft die Methode, ob das Heldenobjekt gleich mit einem anderen Heldenobjekt ist. Wenn beide Instanzen gleich sind, sind sie identisch, wenn ihre Klassen ungleich sind, können sie nicht gleich sein. Wenn doch, kann man gefahrlos casten und einzelne Attribute miteinander vergleichen.

1

Gehen wir das Ganze mal Stück für Stück durch:

Du hast:

Die Klasse "Held" ist ein Datenobjekt oder auch "Entity" genannt. Diese hat einen Konstruktor der alle Felder setzt ("AllArgsConstructor")

Du willst:

Eine Klasse die Methoden bietet um Helden nach verschiedenen Kriterien zu finden oder "Filtern".

Du brauchst:

  1. Etwas wo die Helden gespeichert werden: Wo willst du diese Helden "lagern"? Du brauchst ein Objekt, dass alle Helden kennt und dir diese auch liefern kann. Im normalfall würden diese irgendwo in einer Datenbank liegen, aber um das Ganze etwas einfacher zu hatlen, sagen wir mal dass diese nur in einer Liste gespeichert werden sollen.
  2. Einen "Service" der die gewünschten Methoden bereitstellt. Dieser Service muss selbstverständig auf die Liste mit allen Helden zugriff haben.

Die nächsten Schritte:

Jetzt musst du 1. und 2. umsetzen. Möchte dir die Lösung aber nicht vorweg nehmen. Überlegen wir uns mal ein paar Details zu 1):

Die Liste soll am Besten von überall (Datensicherheit mal vorweg) aus gelesen und bearbeitet werden können. Die Liste muss aber auch zu einem Zeitpunkt im Programm "erstellt" werden (initierung). Außerdem darf es nicht mehr als eine Liste geben, da man sonst durcheinander kommen könnte und man ja alle Helden an einen Ort "lagern" will. Schau dir hier mal das Lösungsmuster(Pattern) "Singleton" an.

Punkt 2. ist die Antwort von regex9 ein guter Ansatz.

Woher ich das weiß:Berufserfahrung

Für die Wartebank sollte ein Attribut eines Arrays der Klasse Held enthalten.

  1. Du brauchst eine get-Funktion, da die Attribute in Held private sind. (Einfach mal googlen)
  2. Das gleiche für Lebenspunkte
  3. Fürs sortieren nutze mal https://en.wikipedia.org/wiki/Bubble_sort
Woher ich das weiß:Berufserfahrung
deepthought  18.09.2018, 13:51

finde die Antwort etwas schwammig.
1) "Für die Wartebank sollte ein Attribut eines Arrays der Klasse Held enthalten." Was soll das überhaupt bedeuten? "Es muss ein Array des Typs "Held" existieren.." wäre schon etwas deutlicher.
3)Die Klasse "Held" hat schon getter.

0
LingVu  18.09.2018, 14:04
@deepthought
  1. Dann hab ich mich undeutlich ausgedrückt. In der Klasse Wartebank sollte ein Attribut eines Arrays der Klasse Held enhalten.
  2. Okay, übersehen.
0