Java program nullpointerexception

0

Cześć,

Mam program który nie wykonuje się poprawnie z powodu źle zdefiniowanego wyjątku.

Pomoże ktoś albo zaproponuje lepsze rozwiązanie ?


package parkiet;

class ZaDuzoObrotowException extends Exception{
public void ZaDuzoObrotowException(){
System.out.println("za duzo obrowĂłw");
}
}

interface Obrot{
public void wykonaj();
}

class WPrawo implements Obrot{
public void wykonaj(){
System.out.println("obrot w prawo");
}
}

class WLewo implements Obrot{
public void wykonaj(){
System.out.println("obrot w lewo");
}
}

class Baletnica{
int wymiar = 5;
int obrot = 0;
Obrot[] obroty;

public  Baletnica(){
    this.wymiar = 2;
}

public  Baletnica(int wymiar){
    this.wymiar = wymiar;
    obroty = new Obrot[wymiar];
}

public void obrot(Obrot obrot) throws ZaDuzoObrotowException{
    this.obroty[this.obrot] = obrot;
    this.obrot++;
}

public void zatancz(){
    for(int i=0; i<=wymiar; i++){
        obroty[i].wykonaj();
    }
}

}

class main {
public static void main(String[] args) {
Baletnica baletnica = new Baletnica();
try{
baletnica.obrot(new WLewo());
baletnica.obrot(new WPrawo());
}
catch(ZaDuzoObrotowException e) {
System.out.println(e);
}
baletnica.zatancz();
}
}

Wyskakuje mi Exception in thread "main" java.lang.NullPointerException

1

No nic dziwnego że leci null. Deklarujesz tablicę 5 elementów
new Obrot[wymiar]
ale tylko 2 z nich ustawiasz na

baletnica.obrot(new WLewo());
baletnica.obrot(new WPrawo());

więc reszta tablicy to nulle
i w metodzie zatańcz

public void zatancz(){
    for(int i=0; i<=wymiar; i++){
        obroty[i].wykonaj();
    }
}

wywoujesz .wykonaj() na nullu (już przy i = 2)

0

Dzięki za info poprawiłem to tylko cały czas mi się czepia wyjątków.

0

class ZaDuzoObrotowException extends Exception{
public void ZaDuzoObrotowException(){
System.out.println("za duzo obrowĂłw");
}

Robisz z konstruktora metodę.

0
  1. Czemu w klasie baletnica najpierw wymiar = 5, a później w konstruktorze przypisujesz 2?
  2. Wywołujesz konstruktor Baletnica w którym tablica obrotów jest cały czas nullem. Popraw to albo wywołaj drugi konstruktor z parametrem wymiar.
class Baletnica {
    int wymiar;
    int obrot;
    Obrot[] obroty;

    public Baletnica(int wymiar) {
        this.wymiar = wymiar;
        obroty = new Obrot[wymiar];
    }

    public void obrot(Obrot obrot) throws ZaDuzoObrotowException {
        this.obroty[this.obrot] = obrot;
        this.obrot++;
    }

    public void zatancz() {
        for (int i = 0; i < wymiar; i++) {
            obroty[i].wykonaj();
        }
    }
}

Usunąłem bezparametrowy konstruktor oraz zmieniłem metodę zatańcz gdyż miałeś taki warunek i <= wymiar, który wywalał Ci kolejny wyjątek.
Dodatkowo jak wspomniał kolega wcześniej klasa wyjątku jest źle zdeklarowana.

class ZaDuzoObrotowException extends Exception {
    public ZaDuzoObrotowException() {
        super("Za dużo obrotów");
    }
}
class main {
    public static void main(String[] args) {
        Baletnica baletnica = new Baletnica(2);
        try {
            baletnica.obrot(new WLewo());
            baletnica.obrot(new WPrawo());
        } catch (ZaDuzoObrotowException e) {
            System.out.println(e);
        }
        baletnica.zatancz();
    }
}

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