Methode aus verschiedenen Klassen aufrufen

Aphrim

Mitglied
Hallo zusammen,

ich bin Java Anfänger und versuche zurzeit ein kleines Kartenspiel zu programmieren.
Hierzu habe ich eine Klasse "Karten" mit der Methode "getCard"
Java:
    public int getCard(){
    	
    	if(!stapel.isEmpty()){
    		
    		cardIndex = getStapel().get(0);
    		card = (getColor(cardIndex) + " " + getValue(cardIndex));
    		stapel.remove(0);
    		System.out.println(card);
    		return cardIndex;
    	}
    	else
    		return 0;
    	
    }
Diese soll mir nun also den String der Karte anzeigen und die Nummer im Array zurückgeben.

Wenn ich diese Methode nun in meiner "KartenTest" Klasse (mit der main) aufrufe funktioniert das auch wunderbar.

Java:
System.out.println(karten.getCard());
Ausgabe:
Herz Sieben
18

Wenn ich nun aber in meiner "Spieler" Klasse die Methode aufrufe, will das nicht so ganz funktionieren.:noe:

Klasse: KlassenTest
Java:
spieler.ziehen();

Klasse: Spieler
Java:
public void ziehen(){
		System.out.println(karten.getCard());
          }

Dort bekomme ich dann eine NullPointerException...
Kann mir jemand sagen was ich falsch mache? ???:L
 
Offensichtlich ist die Variable
Code:
karten
nicht initialisiert. Den Code dazu hast du nicht gepostet, aber wenn eine NullPointerException auftritt, dann wolltest du eine Methode auf einer Variable aufrufen, die eben nicht initialisiert und deshalb
Code:
null
ist. Klingt also ganz danach. Du musst also schauen, dass du dem Spieler die Karten gibst. 😉
 
Also ich habe die Karten in meiner Spieler Klasse so angegeben:

Java:
private Karten karten = new Karten();
ebenso in meiner "KartenTest" Klasse
 
Vermutlich ist in deiner Spieler-Klasse die Variable
Code:
karten
zwar deklariert, also so:

Code:
private Karten karten;
<-- oder wie auch immer der Klassenname deines Kartenstapels ist...

Aber die Variable "zeigt" nicht auf die von dir anzusprechende Instanz des Stapels...beides sollte passieren:

Code:
private Karten karten;
und
Code:
karten = new Karten();
oder
Code:
karten = irgendeinObjekt.getKarten();
oder
Code:
karten = irgendeinObjekt.karten;

weiste? 😉

[EDIT]Wow... da waren alle gleichzeitig dran.[/EDIT]
 
Zuletzt bearbeitet:
Also ich habe die Karten in meiner Spieler Klasse so angegeben:

Java:
private Karten karten = new Karten();
ebenso in meiner "KartenTest" Klasse

Achso! Dann hat die KartenTest-Klasse aber eine andere Instanz der Klasse Karten, als die Spieler-Klasse! Beachte das! Wenn es sich um die SELBE Instanz, also das selbe Objekt handeln soll, dann musst du dieses an die Spieler-Klasse übergeben (wie letztes Beispiel in meiner vorherigen Post!).

Also in der Spieler-Klasse z.B.:
Java:
Karten karten = KartenTest.karten;
 
Zuletzt bearbeitet:
Ah ich hab eine Idee also hier ist mal der Code von der main den ich zum Testen benutzt hab:
Java:
private void run() {
		list = karten.getNewCards();
		System.out.println(list);
		
		for(int i = 0  ; i < 500 ; i++){
		list = karten.mix(list);
		}
		System.out.println(list);
		
//		for (int i = 0 ; i < 52 ; i++)
		System.out.println(karten.getCard());
		
		spieler.ziehen();

	}

Da sag ich ja karten.getNewCards().
Kann das dann sein das das für die Spieler Klasse nicht übernommen wird weil ich da wieder sage
Java:
karten = new Karten()
?
 

Zurück
Oben