Von einer Methode zurückgegebenes Objekt in einer ArrayList ansprechen

Thodryth

Neues Mitglied
Hallo Leute,

ich habe ein kleines Problem und hoffe, dass ihr mir vielleicht weiterhelfen könnt.

Ich bastel gerade an einem kleinen Spielchen bzw. einem Grundgerüst und im speziellen gerade an einem Inventarsystem. Ich habe es so aufgebaut, dass das Inventar aus ArrayListen besteht.
Drei Listen, Item, Waffen und Ruestung. Für diese drei Arten habe ich Klassen geschrieben um entsprechende Objekte zu erzeugen. Dann schrieb ich eine weitere Klasse mit dem Namen
ItemInitialer in welcher verschiedene Objekte erzeugt werden, wenn die entsprechenden Methoden aufgerufen werden. Das klappt in soweit auch, ich kann diese dann mit z.b. Inventar.add oder Waffen.add auch hinzufügen. Das Problem ist aber, dass ich auf diese Objekte nur mit ihrem Index zugreifen kann, per contains findet mein Programm sie leider nicht. Das Problem wird darin bestehen, dass die Objekte von den Methoden einer Klasse übergeben werden, denn mit anderen Objekte funktioniert contains und remove ohne Probleme.
Ich vermute, ich finde einfach nicht den richtigen Weg, die von den Methoden in die Listen eingefügten Objekte richtig anzusprechen.

Ich hoffe, ich habe mein Problem einigermaßen verständlich erklärt und es findet sich jemand, der mir sagen kann, wo mein Fehler ist.

Hier der Quellcode:

Konstruktor Item

Java:
package zombcraft;

public class Item {
    
    String itemName;
    int index;
    int heal;
    
}


Konstruktor Spieler

Java:
package zombcraft;
import java.util.*;

class Spieler 
{
    
//Objektvariablen
    String vName;
    String nName;
    int alter;
    float posx, posy;
    int gesund, schaden, block;
    List<Item> Inventar = new ArrayList<Item>();
    List<Waffen> Waffen = new ArrayList<Waffen>();
    List<Ruestung> Ruestung = new ArrayList<Ruestung>();
//Schaden austeilen und einstecken
    
    public int getGesund() {
        return gesund;
    }
    
    public void treffer(int schaden) {
        gesund = gesund - schaden;
    }
    
    public void heilung(int heil) {
        gesund = gesund + heil;
    }
    
    public int angriff(int waffendmg) {
        schaden = schaden + waffendmg; 
        return schaden;
    }
    
    public int blocken(int schildblock) {
        block = block + schildblock;
        return block;
    }
        
}

Objekt Initialisierer

Java:
package zombcraft;

public class ItemInitialer {
//ITEM        
       public static Item Trank() {
           Item Trank = new Item();
           Trank.itemName = "Heiltrank";
           Trank.heal = 50;
           return Trank;
       }
       
       public static Item Bier() {
           Item Bier = new Item();
           Bier.itemName = "Bier";
           
           return Bier;
       }

       public static Item Wasser() {
           Item Wasser = new Item();
           Wasser.itemName = "Wasser";
           
           return Wasser;
       }
//WAFFEN
       
       public static Waffen Axt() {
           Waffen Axt = new Waffen();
           Axt.itemName = "Axt";
           Axt.dmg = 15;
           return Axt; 
       }
       
      
       public static Waffen Ast() {
           Waffen Ast = new Waffen();
           Ast.itemName = "Ast";
           Ast.dmg = 5;
           
           return Ast;
       }
//RUESTUNG
       public static Ruestung Weste() {
           Ruestung Weste = new Ruestung();
           Weste.itemName = "Weste";
           Weste.block = 15;
           
           return Weste;
       }
       
}

Main
Java:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package zombcraft;
import java.util.*;

/**
 *
 * @author Reaper
 */
public class ZombCraft {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
        Spieler player = new Spieler();
        player.nName = "Mueller";
        player.vName = "Peter";
        player.alter = 25;
        player.gesund = 100;
 
        player.Inventar.add(ItemInitialer.Bier());
        player.Inventar.add(ItemInitialer.Trank());
        player.Waffen.add(ItemInitialer.Axt());
        player.Waffen.add(ItemInitialer.Ast());
        

        System.out.println(player.Inventar.contains(Axt));

        
        
    }
    
    
}


System.out.println(player.Inventar.contains(Axt));

Um diese Zeile geht es primär. Wenn in der Main ein Object der Klasse Waffen erzeuge, dann kann ich diese mit
.contains finden und es wird true ausgegeben. Wenn ich aber über die Methode der Klasse ItemInitialer ein Object des
Typs Waffen erzeuge, dann gibts contains false zurückt.

Ich sage jetzt schon mal danke, wenn mir jemand sagen kann, wo mein Gedankenfehler ist und für eure Mühe. :)



Grüße Thodryth
 
Zuletzt bearbeitet:

Saheeda

Top Contributor
Beim Vergleich von Objekten wird geschaut, ob die Referenzen gleich sind, d.h. ob auf dieselbe Stelle im Speicher verwiesen wird. Das ist aber der Fall, wenn es das exakt gleiche Objekt ist.
Um das zu umgehen, musst du sagen, anhand welcher Kriterien stattdessen Gleichheit erkannt werden soll. Umd dafür musst du, wie stg schon sagte equals und getHashcode überschreiben.
 

kaoZ

Top Contributor
Zudem würde ich dein Design überarbeiten und aus deinem ItemInitialiser eine ItemFactory machen welche dir dann solche Methoden bietet :

Java:
public class ItemFactory{

  public static Beer createBeer(){
      return new Beer("Bier");
  }
}

....

Zudem solltest du in der abstrakten Superklasse Item einen Konstruktor anbieten der z.B den Namen schon vorab initialisiert:

Java:
public abstract class Item{

	private String name;
	
	public Item(String n){
		name = n;
	}
	
	public String getName()	{return name;}
}

welchen du dann in den Subklassen so effizient nutzen kannst :

Java:
class Beer extends Item{
	
	public Beer(){
		super("Beer");
	}
}

Unabhängig dessen, könnte man zudem auch dazu übergehen und ein Interface definieren welche dann auch alle öffentlichen Zugriffspunkte definiert.

Zudem werden Methodennamen lowerCamelCase geschrieben ;)
 
Zuletzt bearbeitet:

Thodryth

Neues Mitglied
Vielen Dank für die Tipps und Verbesserungsvorschläge. Ich werde sie gleich mal in mein Programm einfließen lassen und hoffe, dass ich das funktionsfähig umgesetzt bekomme. :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
A Ein Array bearbeiten und in einer anderen Methode nutzen Java Basics - Anfänger-Themen 6
A Ergebnis einer Methode bei einer anderen verwenden Java Basics - Anfänger-Themen 13
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
M Wie verknüpfe ich eine Bedingung mit einer Methode ohne if-Verzweigung & Bedingungsoperator? Java Basics - Anfänger-Themen 2
D mehrere Berechnungen in einer Methode Java Basics - Anfänger-Themen 9
I Array einer Methode wiedergeben Java Basics - Anfänger-Themen 2
I Argumente einer Java Methode Java Basics - Anfänger-Themen 14
D Methoden Plathhalter für Integer in einer Methode Java Basics - Anfänger-Themen 19
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
C Auf die Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 1
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
T getAttribut in einer Methode aufrufen Java Basics - Anfänger-Themen 8
BorussiaMG1900 Implementation einer Methode Java Basics - Anfänger-Themen 1
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
LetsSebi Methode, die einen arry von objekten speichert in einer datei Java Basics - Anfänger-Themen 6
A Methode in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 1
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
O BiPredicate in einer forEach Methode Java Basics - Anfänger-Themen 10
L Wie greife ich in der Subklasse auf die Parameter einer Methode der Superklasse zu ? Java Basics - Anfänger-Themen 15
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
L Variable von einer Methode zu einer anderen Methode inkl. einer "Zwischenmethode" Java Basics - Anfänger-Themen 1
B Hilfe bei einer rekursiven Methode Java Basics - Anfänger-Themen 3
S Auf Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 3
M Implementierung einer getNextId Methode Java Basics - Anfänger-Themen 5
R Signatur einer Methode in JAVA Java Basics - Anfänger-Themen 4
N Methode mit einer Arraylist Java Basics - Anfänger-Themen 106
I ArrayList - Methode zum Speichern eines Eintrags in einer Datei Java Basics - Anfänger-Themen 17
H Arraydaten aus einer anderen Methode ausgeben Java Basics - Anfänger-Themen 4
H Auf Objekte bzw Variabeln aus einer anderen Methode zugreifen Java Basics - Anfänger-Themen 7
T Return einer anderen Methode herausfinden Java Basics - Anfänger-Themen 9
J Fragen zu einer Methode Java Basics - Anfänger-Themen 3
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
A Mit einer Methode den Konstruktor aufrufen? Java Basics - Anfänger-Themen 2
K Boolean in einer Methode um 2 Objekte zu vergleichen Java Basics - Anfänger-Themen 12
M kann man return in nur einer Methode einsetzen? Java Basics - Anfänger-Themen 7
J NullPointerException beim Klonnen eines Arayys und beim aufrufen einer Methode Java Basics - Anfänger-Themen 2
H Frage zu Parameter einer Methode Java Basics - Anfänger-Themen 2
H Frage zu Parameter einer Methode Java Basics - Anfänger-Themen 3
scratchy1 Kann man in einer Methode eine andere aufrufen? Java Basics - Anfänger-Themen 2
G Die richtige Methode aus einer DTO auszurufen Java Basics - Anfänger-Themen 27
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
M BlueJ - Array als Paramter einer Methode eingeben Java Basics - Anfänger-Themen 12
O Arrays sortieren in einer Methode Java Basics - Anfänger-Themen 2
D Zugriff auf Methode einer anderen Klasse Java Basics - Anfänger-Themen 5
A OOP Variable in anderer Klasse durch Methode aufrufen und einer anderen Variable gleichsetzen Java Basics - Anfänger-Themen 2
D Compiler-Fehler Aufrufen einer Methode von Main Java Basics - Anfänger-Themen 4
R Methoden NPE beim Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 4
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
E Threads Methode einer Wartenden Klasse aufrufen Java Basics - Anfänger-Themen 3
P Methode soll Variable einer anderen Klasse ändern. Wie? Java Basics - Anfänger-Themen 1
J Rekursive Methode - Ziffern einer Zahl ausgeben Java Basics - Anfänger-Themen 2
D Methoden JButton und JLabel in einer Methode erstellen Java Basics - Anfänger-Themen 5
C In einer Methode einen Array zurückgeben Java Basics - Anfänger-Themen 2
S Wie erstelle ich eine Vorbedingung für eine Variable einer Methode ? Java Basics - Anfänger-Themen 5
geekex Double zu String umwandeln in einer Methode Java Basics - Anfänger-Themen 28
J String splitten und weiter einarbeiten in einer Methode? Java Basics - Anfänger-Themen 11
D Anfänger-Fragen(Parameter einer Methode) Java Basics - Anfänger-Themen 7
D Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 39
B Wie kann ich eine Methode einer selbst erstellten Klasse statisch importieren? Java Basics - Anfänger-Themen 5
M Methoden Int einer Methode an eine andere Methode übergeben Java Basics - Anfänger-Themen 4
S BufferedWriter innerhalb einer Methode Java Basics - Anfänger-Themen 2
H Innerhalb einer Methode eine Variable der aufrufenden Methode ändern? Java Basics - Anfänger-Themen 2
V Methode eines Objekts einer ArrayList ausführen Java Basics - Anfänger-Themen 3
TomatenBrot447 Mit toString eine Ausgabe liefern wie in einer schon implementierten Methode ? Java Basics - Anfänger-Themen 13
TomatenBrot447 Mit toString eine Ausgabe liefern wie in einer schon implementierten Methode ? Java Basics - Anfänger-Themen 1
V for-Schleife in einer void Methode Java Basics - Anfänger-Themen 3
P Instanz mit .add Methode von einer Klasse zur anderen? Java Basics - Anfänger-Themen 6
C Bestimmtes Objekt einer ArrayList in einer Methode selektieren Java Basics - Anfänger-Themen 8
BobbGott Klassen 2 "Objekte" in einer Methode - wie? Java Basics - Anfänger-Themen 7
B Wie speicher ich die Outputs einer Methode in ein Array ein? Java Basics - Anfänger-Themen 1
N Objekt in Methode einer anderen Klasse erzeugen Java Basics - Anfänger-Themen 9
K Compiler-Fehler Objektmethode aus einer statischen Methode heraus aufrufen Java Basics - Anfänger-Themen 34
shiroX Methoden JUnit-Test einer void-Methode Java Basics - Anfänger-Themen 4
S Methoden Methode einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 5
N Methoden Wohin mit einer Methode die in unterschiedlichen Klassen verwendet wird? Java Basics - Anfänger-Themen 5
L Anonyme Methode in einer ForEach-Schleife Java Basics - Anfänger-Themen 2
M Klassen Main Methode in einer anderen Klasse aufrufen Java Basics - Anfänger-Themen 13
D Methoden Definition einer Methode Java Basics - Anfänger-Themen 3
J Verständnisproblem einer Methode Java Basics - Anfänger-Themen 20
T Signatur einer Methode Java Basics - Anfänger-Themen 10
G Methoden Zugriff auf Methode.. aus einer anderen Klasse Java Basics - Anfänger-Themen 6
P Variablen einer Methode in andere Method übergeben Java Basics - Anfänger-Themen 6
Tacofan Variabel in einer anderen Methode Java Basics - Anfänger-Themen 2
V Problem Aufruf einer Methode in einer Methode Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben