3 Stimmen

Nullpunkt-Ausnahmefehler bei einfacher Kartenklasse

Ich bin ein Anfänger in Java, und ich habe Testcode erstellt, um einige der Konzepte anzuwenden, über die ich gelesen habe. Ich wollte also eine Klasse erstellen, die Spielkarten beschreibt. Die Kartenklasse enthält Felder, die sowohl die Suite als auch den Wert beschreiben (1 - 13 für alle 4 Suites). Diese Klasse war sehr einfach zu erstellen, wie Sie sehen können --

public class Card {
    private String suite; 
    private int cardValue;

    Card(String s, int cV){
    this.suite = s;
    this.cardValue = cV;
    }

    public String getSuite(){
    return this.suite;
    }

    public int getCardValue(){
    return this.cardValue;
    }
}

Ich habe eine andere Klasse erstellt, um diese Klasse zu testen und um 52 Karten zu einem Array hinzuzufügen (ich habe eine andere Klasse, die mit einem 52-Karten-Deck umgehen kann, aber das ist im Zusammenhang mit meiner Frage hier nicht wichtig). Diese Klasse, genannt CardTest enthält die Hauptmethode. Ich habe eine for-Schleife erstellt, die alles an das Deck-Array anhängt, aber meine Probleme treten auf, wenn ich eine Schleife durch das Deck machen und Kartenwerte ausdrucken möchte (Suite und Wert). Ich erhalte einen NullPointException-Fehler. Hier ist die cardTest-Klasse:

public class CardTest {
    public static void main(String[] args){
        Card[] temp = new Card[52];
        for (int i = 0; i <12; i++){
            temp[i] = new Card("Spade", i + 1);
            temp[i+13] = new Card("Club", i + 1);
            temp[i+26] = new Card("Diamond", i + 1);
            temp[i +39] = new Card("Heart", i + 1);
        }
        for (int i = 0; i < 52; i++){
            System.out.println(temp[i].getSuite());
        }
    }
}

Ich habe versucht, nach Problemen mit dieser Art von Fehler zu suchen, aber das Einzige, was ich herausgefunden habe, ist, dass es ein Problem mit den Kartenobjekten gibt, die auf einen Standardwert "null" gesetzt werden, was zu dem Fehler beim Methodenaufruf führt.

3voto

Musa Punkte 94628

Ihre for-Schleife für die Erstellung von Karten ist falsch, Sie erstellen nur 12*4=48 Karten und lassen temp[12], temp[25], temp[38] und temp[51] leer, versuchen Sie

    for (int i = 0; i <13; i++){
        temp[i] = new Card("Spade", i + 1);
        temp[i+13] = new Card("Club", i + 1);
        temp[i+26] = new Card("Diamond", i + 1);
        temp[i +39] = new Card("Heart", i + 1);
    }

3voto

arshajii Punkte 125945

Offensichtlich addieren Sie nicht 52 Card Instanzen zu Ihrem Array (Sie fügen 4 für jede der 12 Iterationen hinzu, 12 * 4 = 48 != 52). Wenn Sie also eine Schleife über das gesamte Array ziehen, werden einige der Werte unweigerlich null (zur Erinnerung: Arrays von Objekten enthalten zunächst nur null s). Schleife bis i < 13 sollte dies beheben.

1voto

jontro Punkte 9646

Hier liegt das Problem:

        temp[i+13] = new Card("Club", i + 1);

Es wird nie 12 sein, weshalb Sie Ihre Nullpointer-Ausnahme erhalten.

0voto

Ismail Badawi Punkte 33928

Das Problem ist, dass Sie nur die temp Array bis zum Index 50 (11 + 39), und die zweite Schleife versucht, auf den Index 51 zuzugreifen. Die obere Grenze der ersten Schleife sollte 13 und nicht 12 sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X