NullPointerException w java.util.random Jak zmienić funkcję?

0

Dostaję:
Exception in thread "main" java.lang.NullPointerException at Ships.Ship.getRandomNum(Ship.java:60) at Ships.Ship.setShip(Ship.java:45) at Ships.Player.setShipNames(Player.java:83) at Ships.Main.main(Main.java:46)

Jak zmienić funkcję getRandomNum? Ma ona za zadanie wylosować dowolne pole z z tablicy i sprawdzić czy już nie jest zajęte.

    private int getRandomNum() {
        Random rand = new Random();
        do {
        randomNum = rand.nextInt(100 - length - 1);
         } // - length cause every ship takes x random fields -length fields before end of a floor
        while (!takenFields.contains(randomNum));
        return randomNum;
    }

Kod źródłowy: https://github.com/phoeeenix/ShipsGame

P.S. Gdy ominę funkcję i usunę blok do-while z funkcji to dostaję następny:
Exception in thread "main" java.lang.NullPointerException at Ships.Player.setShipNames(Player.java:85) at Ships.Main.main(Main.java:46)
Nie wiem dlaczego on bierze wartość null w 85 wierszu przy dodawaniu obiektu do listy: shipsGroup.add(ship);

1

Sprawdzasz czy takenFIelds zawiera randomNumber w momencie gdy takenFields jest nullem.

0

OK błąd naprawiony. Teraz próbowałem dojść dlaczego program zatrzymuje mi się do skanowania i nie może przejść do dalszej instrukcji wykonując pętle w Ships.Player.setShipNames(Player.java:73).
Program wykonuje w Ships.Player wiersz 82: System.out.println("ship created"); i zatrzymuje się na funkcji w wierszu 83: ship.setShip();
Myślę, że w Ships.Ship.setShip(Ship.java: 107) ciągle szuka losowej liczby, nie mogąc przejść dalej?
Wie ktoś gdzie tutaj tkwi błąd?

0

No ale jak chcesz wyjść z getRandomNum? Przecież masz pusty set.

1

Zajrzałem do kodu w https://github.com/phoeeenix/ShipsGame/blob/master/Ship.java w private Set<Integer> takenFields "tworzysz" własny Set z pustą implementacją. Zamień to na private Set<Integer> takenFields = new HashSet();

Według mnie warto byłoby gdybyś zamiast brać się za bądź co bądź duży projekt jakim są statki takie podstawy jak losowanie albo korzystanie z Set'u zrealizował w projekcie ~Playground. Według mnie z aktualnym podejściem będziesz się uczyć dłużej (problem XY). Rozrysuje może jedną gre na kartce - powinno być Ci prościej przenieść to później jako kod.

Powodzenia!

1 użytkowników online, w tym zalogowanych: 0, gości: 1