Hirdetés

Új hozzászólás Aktív témák

  • Karma
    félisten

    Sziasztok!

    Volna egy kis (elég nagy) problémám. Volna egy ehhez hasonló kódrészlet:

    public class Field{
    int diceCount, playerNumber;

    //get and set methods etc.
    }

    public class Board{
    public Field[] board = new Field[36];

    public void boardBuilder(){
    for(int i = 0; i < board.length; i++){
    board[i] = new Field();
    //give value to the Fields
    }
    }
    }

    public class IoMethods{
    public Board board = new Board();

    public void boardPrintOut(){
    int helper;
    for(int i = 0; i < 6; i++){
    for(int j = 0; j < 6; j++){
    //The next line is where it gets the Exception
    helper = board.board[i*6 + j].getPlayerNumber();

    //print part
    }
    }
    }
    }

    Már stack overflow-on is kétszer kétféleképpen rákérdeztem, de csak újra, és újra ugyan azt a választ kapom.
    A Board-ban létrehozom a tömbböt, majd incializálom az objektumokat. A Boardon belül kiiratom ott minden rendben van. Az össze objektumnak megvannak az értékei.
    Majd kaptam két különböző megoldást:

    -1- Készítsek egy konstruktort a Board-nak:
    Board() {
    this.boardBuilder();
    }

    -2- Nem hívtam meg a boardBuildert: (de meghívtam, mert különben a Boardon belül nem tudnék benne értéket tárolni...)

    Az első megoldásra a Boardon kívül minden meghívásnál elvesznek a tárolt értékek, és csak 0-val tér vissza.
    A második megoldára pedig a példakódon is jelölt módon a tömb végigléptetésekor NullPointerE.-t kapok.

    Nagyon megköszönném a segítséget, mert kezdek kifutni az időből, és még mindig ilyeneken vagyok fenn akadva. :(

    Pedig teljesen jók a válaszok. Alapvetően a boardBuilder metódus egy koncepcionális hiba, az egészet szüntesd meg, és tedd a konstruktorba a tömb elemeinek inicializálását. Ezzel NPE-d nem lesz több.

    Hogy miért veszik el adat, az ebből a kódrészletből nem derül ki. Mivel minden tagváltozód publikus, bárhol elronthatod. Jót tenne a játéknak, ha elkezdenél objektum-orientáltan hozzáállni: az osztályok belső állapota privát, kifelé csak egy interfészt mutatnak, amik az általuk támogatott műveletekből áll.

    Például a Board esetén a tömb privát, de van egy műveleted, ami egy X, Y koordinátapárhoz visszaadja az oda illő Fieldet.

Új hozzászólás Aktív témák