Не могу найти исключение нулевого указателя - PullRequest
0 голосов
/ 19 октября 2018

Ошибка возникает в последней строке этого класса, где я пытаюсь напечатать номер первой карты в колоде, и я не совсем уверен, почему.

    public class CardTricks {
    public static void main (String[] args){

        Deck newdeck = new Deck();
        newdeck.construct();
        newdeck.shuffle();
        System.out.println(newdeck.deck[0].Number);

    }
}

Этокласс для карты с основным назначением для карты атрибута набора и числового атрибута.

public class Card {
    String Suite;
    int Number;
}

Это класс колоды, функции этого класса используются для создания колоды и ее перемешивания.

public class Deck {
    Card[] deck;

    public void construct(){

        deck = new Card[52];

        String[] possuite = new String[4];
        possuite[0] = "Hearts";
        possuite[1] = "Diamonds";
        possuite[2] = "Clubs";
        possuite[3] = "Spades";

        int x = 0;

        while (x < 4){
            String suite = possuite[x];
            x++;
            int number = 1;
            System.out.println(suite);

            while (number < 14){
                deck[number-1] = new Card();

                deck[number-1].Suite = suite;
                deck[number-1].Number = number;
                number++;
           }
        }
    }

    public void shuffle(){
        int x;
        int y;
        int z = 0;

        while (z < 10000){
            x = (int)(Math.random()*52);
            y = (int)(Math.random()*52);
            Card a = deck[y];
            Card b = deck[x];
            deck[x] = a;
            deck[y] = b;
            z++;
        }

    }
}

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Вы только заполняете первые 13 мест в колоде и переопределяете их каждый раз, когда создаете новый набор.

что вы должны сделать: (обратите внимание, что я переместил x++ в нижнюю часть)

    while (x < 4){
        String suite = possuite[x];
        int number = 1;
        System.out.println(suite);

        while (number < 14){
            int cardPos = (number-1) + (13*x);
            deck[cardPos] = new Card();


            deck[cardPos].Suite = suite;
            deck[cardPos].Number = number;
            number++;
       }
       x++;
0 голосов
/ 19 октября 2018

newdeck.deck[0] равно null, потому что вы перетасовываете все 52 элемента поля, в то время как инициализируете только элементы от 0 до 12.

Перемешивание помещает элемент null в положение deck[0].

// this creates a new array with elements 0 to 51 == null
deck = new Card[52];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...