Konstante in Objekt definieren

Ich hab leider ein Problem und weiß nicht wie ich das programmiertechnisch lösen kann. Vllt. hat ja jemand von euch eine Idee.

Ich habe eine Klasse für ein Spiel programmiert, und habe die Methode buyFacility(int facility), um neue Geräte zu kaufen.
Für Geräte habe ich eine eigene Klasse geschrieben, die beschreibt ob der Spieler dieses Gerät bereits besitzt oder nicht (boolean owned) und wieviel der Preis für dieses Gerät ist (float price).
Der buyFacility Methode übergebe ich eine Konstante die ich momentant noch manuell in der Klasse des Spiels definiert habe (fortlaufende Nummer). Dann bearbeite ich die einzelnen Geräte mit einer switch Anweisung.
Java:
public class spiel()
{
   Facility fishing_rod = new Facility(price, true/false);
   Facility hunting_rifle = new Facility(price, true/false);
   public final int FACILITY_FISHING_ROD = 1;
   public final int FACILITY_HUNTING_RIFLE = 2;

   public void buyFacility(int facility) { //Hier wird dann die Koonstante übergeben
   switch(facility) {
   case FACILITY_FISHING_ROD:
      //...
   case FACILITY_HUNTING_RIFLE:
      //... 
   }
}
Facility Class sieht so aus:
Java:
public class Facility {
   public Facility(float price, boolean owned) {
   //...
   }
   private float price;
   private boolean owned;
}

Wenn ich allerdings viele Facilities habe, wird das schnell unübersichtlich. Ich möchte also jeder Facility-Instanz eine ID im Konstruktor geben. Ich habe das schon versucht mit einer final int ID. Dann habe ich noch eine static int nextID gemacht und im Konstruktor den Wert der ID mit nextID gesetzt und dann nextID erhöht.
Leider zu früh gefreut, weil switch nimmt diese Konstante nicht weil die Instanz zu der die ID gehört ja nicht existieren muss.
Java:
case fishing_rod.ID
   //...
Wie kann man dieses Problem lösen?
Ich hab diesen Thread absichtlich nicht zu den Spielen gegeben, weil das Thema eher allgemein ist und auch Nicht-Spiele-Programmierer interessieren könnte. Wenn das falsch war dann bitte verschieben..

Ich hoffe es gibt jemanden der mir da helfen kann, weil ich weiß echt nicht weiter... ???:L
 
Zuletzt bearbeitet von einem Moderator:

Andi_CH

Top Contributor
Solche switch -case Konstrukte oder auch lange if then else if statements sind eine Zeichen dass OO mangelhaft umgesetzt wurde -

Ich würde Klasen FishingRod, HuntingRifle u.s.w. erstellen und denen nur das bisschen Code mitgeben das für diese Klasse relevant ist. Die alle müssen eine gemeinsame Vaterklasse haben (Facility) die abstrakt sein kann
 
Zuletzt bearbeitet:
Was sollte sich das bringen wenn ich eine extra Kindklasse von Facility mache? fishing_rod und hunting_rifle haben die selben Attribute und Methoden und müssen sich ja nicht unterscheiden?
Und was würde das an meinem Problem ändern?
Ich versteh leider nicht wie mir das helfen sollte :bahnhof:

EDIT: Ich hätte auch schon die Idee gehabt einfach in die Facility Klasse eine buy() Methode einzubauen, nur leider kann ich dann nicht auf die Variable money von der Klasse spiel zugreifen..
 
Zuletzt bearbeitet:

Andi_CH

Top Contributor
Aber der code in den Methoden ist ja anders sonst hättest du nicht so ein irres switch - case Konstrukt.

Wenn sich die nich tunterscheiden dann würde es das nicht brauchen.

Und wenn du meinst ich versuche dir nicht zu helfen .... na ja.
 
Sorry das war nicht böse gemeint, ich bin dankbar für deine Hilfe aber versteh wirklich nicht was du mir damit sagen willst. Die buyFacility() methode ist ja von der Klasse spiel.
Wie bereits im Edit oben gesagt, kann ich sie nicht in das Facility Objekt hineinnehmen, weil ich ja auf die money Variable von der Klasse spiel zugreifen muss. Vielleicht hast du auch eine Idee wie ich das Geld von spiel abziehen kann wenn ich eine buy() Methode in die Klasse Facility packe :)
 

Andi_CH

Top Contributor
Es ist nicht sicher ob das dahingehört - ich weiss ja wirklich nicht, was du genau willst - viielleicht ist buyFacility ein Factory die ein bestimmtes Objekt liefert - aber was in der realen Welt unterschieldich ist, wird wohl auch je eine eigene Klasse werden.

Ich kann nämlich nicht wirklich glauben, dass eine Fischerrute genau dasselbe ist wie ein Jagdgewehr ;-)

Statt von aussen buyFacilitiy(Jagddgewehr) aufzurufen, würde ich viel lieber einfach new Jagdgewehr(); machen - es brauche echt kein switch case.

Du weisst aussen was du willst, packst das in einen int und drinnen switcht du wieder auseinander ... das meine ich mit OO nicht umgesetzt.
 
Zuletzt bearbeitet:
Ok vllt war das ein Fall von zu wenig Info.

Also bei dem Spiel geht es um das Geld verdienen. Man kann dazu entweder fischen, jagen oder züchten. Das Spiel hat natürlich noch viel mehr Inhalt aber das zu erklären würde zu lange dauern.
Die "Facilities" (Angelrute, Jagdgewehr, Weide) benötigt man um diese Aktionen durchführen zu können. Man muss sie also vorher kaufen. Und festzustellen ob der Spieler diese Geräte besitzt, habe ich eine Klasse Facilities gemacht, von denen ich für jedes Gerät ein Objekt erstelle. Hier wird dann gespeichert wieviel das Objekt zu kaufen kostet, bzw. ob es schon im Besitz ist oder nicht.
Ich hab eine Klasse hunterGame (bis jetzt spiel genannt) gemacht, die alle Sachen für das Spiel übernimmt. Z.B gibt es da auch die Methode buyFacility(), um eines dieser Geräte zu kaufen, und nachher damit arbeiten zu können. Aber natürlich sell() um die Fische, etc. zu verkaufen oder work, etc.
Mit der Hauptklasse hunterGame kann ich also das Spiel auf verschiedenen Wegen umsetzten, z.B. nur im Terminal oder als GUI oder ähnliches. Ich programmiere also nur die Menüfunktionen, den Rest soll dann die fertige Klasse hunterGame übernehmen. Verstehst du jetzt besser was ich meine? ;)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
F Konstante an main - Argumenten initialisieren Allgemeine Java-Themen 1
E Konstante Zahl Threads parallel rechnen lassen Allgemeine Java-Themen 6
Tom299 eine Konstante in Spring definieren? Allgemeine Java-Themen 4
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
Maxi-JOO Klassen Dummy Objekt in anderen Constructor übergeben Allgemeine Java-Themen 5
el_niiinho13 Objekt auf der Konsole ausgeben lassen Allgemeine Java-Themen 8
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
A Objekt aus anderen Objekten machen Allgemeine Java-Themen 8
SaftigMelo In einem Winkel Objekt bewegen Allgemeine Java-Themen 2
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
J Objekt in Bytestream umwandeln Allgemeine Java-Themen 12
J Wie kann ich von Vornherrein einen Fokus auf ein Objekt entfernen? Allgemeine Java-Themen 3
J Information von getSource() Objekt auslesen Allgemeine Java-Themen 1
Drachenbauer Wie stelle ich fest, ob ein Objekt in meinem Array vorkommt? Allgemeine Java-Themen 5
S Variable als Objekt Name Allgemeine Java-Themen 3
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
T Objekt in Array packen Allgemeine Java-Themen 6
K Methodenaufruf mit String / String zu Objekt konvertieren Allgemeine Java-Themen 8
S Neues Objekt darstellen Allgemeine Java-Themen 4
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
D Objekt-Suche mit mehreren optionalen Parametern Allgemeine Java-Themen 6
M Klassen Objekt weiter geben Allgemeine Java-Themen 1
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
S Applet Überprüfen ob ein Objekt angeklickt wurde Allgemeine Java-Themen 2
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
G Neues Objekt aus List<JsonObject> mit Stream Allgemeine Java-Themen 4
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
K Textdatei als Objekt Allgemeine Java-Themen 4
Viktim Classenname zu Objekt Allgemeine Java-Themen 4
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
O Klassen Bruch im gleichen Objekt Speichern Allgemeine Java-Themen 1
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
K Best Practice JFrame Objekt allgemein zugänglich machen Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
D Java Objekt als Service in Runtime registrieren Allgemeine Java-Themen 1
S Interaktion mit einer website (website als Objekt?) Allgemeine Java-Themen 3
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
F Neues Objekt aus .CSV definition Allgemeine Java-Themen 3
K Methoden Objekt wird nicht erkannt Allgemeine Java-Themen 11
P Objekt mit verschiedenen Datentypen Allgemeine Java-Themen 5
T Objekt kontaktiert seinen "erzeuger" Allgemeine Java-Themen 5
S Objekt orientierte Programmierung Allgemeine Java-Themen 7
C Objekt Datenverlust nach Methodenaufruf Allgemeine Java-Themen 9
H JavaFX Von einer Methode auf stage-Objekt zugreifen Allgemeine Java-Themen 3
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
T Class-Objekt mit URLClassloader Allgemeine Java-Themen 7
P Konsoleneingabe übernehmen und Objekt instanzieren. Allgemeine Java-Themen 5
E Auf Java-Objekt aus anderer Instanz zugreifen Allgemeine Java-Themen 26
L Klassen Polymorphie:2 Attribute gleichen Namens in einem Objekt Allgemeine Java-Themen 6
P Objekt Array in Datei Speichern Allgemeine Java-Themen 3
F Dynamisch ein Objekt einer bestimmten Subklasse erstellen Allgemeine Java-Themen 7
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
V Objekt löschen Allgemeine Java-Themen 7
A OOP Wie auf Objekt der Superklasse zugreifen? Allgemeine Java-Themen 6
S Datei in File-Objekt mit UTF-8 einlesen Allgemeine Java-Themen 2
M neues Objekt speichern, nicht Referenz Allgemeine Java-Themen 10
B synchronisierter zugriff auf Objekt Allgemeine Java-Themen 6
F Objekt einer Datei verschieben, aber Verzeichnispfad fehlt Allgemeine Java-Themen 6
C Objekt Typ herausfinden Allgemeine Java-Themen 5
E Objekt beim Erzeugen in ArrayList Allgemeine Java-Themen 9
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
D Eigenen Objekt Pool Allgemeine Java-Themen 15
C blueJ: Objekt wird nicht in Objektleiste angezeigt Allgemeine Java-Themen 8
T Objekt 2x deserialisieren, aber nur 1x im Heap haben? Allgemeine Java-Themen 4
sambalmueslie Benachrichtigung bei neuer Objekt-Instanz Allgemeine Java-Themen 5
D this mit Objekt überschreiben Allgemeine Java-Themen 17
R Synchronized - auf welchem Objekt Allgemeine Java-Themen 16
E Objekt erstellen Allgemeine Java-Themen 7
M Timer von nicht existiertem Objekt stopen Allgemeine Java-Themen 5
M Swing-Frontend abhängig von ausgewähltem Objekt Allgemeine Java-Themen 4
J Lebt das Objekt noch?? Allgemeine Java-Themen 12
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
B Speicherverbrauch Objekt-Referenz Allgemeine Java-Themen 11
D Browser-Objekt erzeugen Allgemeine Java-Themen 8
B FileWriter / FileReader testen / Mock-Objekt für Unit Tests? Allgemeine Java-Themen 6
A Iterationen einer XML-Datei in einem Objekt sichern Allgemeine Java-Themen 5
R Objekt zur Laufzeit zerstören? Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben