Błąd przy utworzeniu obiektu, którego pole jest typu tego obiektu.

0

Mam program który korzysta z obiektów wierzchołka. Jedno z jego pól to public Wierzcholek WierzcholekPoprzedni, jest ono typu obiektu który tworzę.
W trakcie wykonania uzyskuję błąd w lini tworzenia zmiennej która jest typu obiektu Wierzcholek.

Komunikat błędu to : Listening on 48594
User program running
Not able to submit breakpoint FieldBreakpoint najkrotszedrogi.Wierzcholek.WierzcholekKolejny, reason: Field 'WierzcholekKolejny' does not exist in class najkrotszedrogi.Wierzcholek.
Thread main stopped at NajkrotszeDrogi.java:54.

Jak poprawić ten błąd ?

Kod projektu utworzony w Netbeans kod jest na etapie testowania, może logika nie działać.

package najkrotszedrogi;

public class NajkrotszeDrogi {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        Wierzcholek WierzcholekNr0 = new Wierzcholek("Pierwszy");
        Wierzcholek WierzcholekNr1 = new Wierzcholek("Drugi");
        Wierzcholek WierzcholekNr2 = new Wierzcholek("Trzeci");
        Wierzcholek WierzcholekNr3 = new Wierzcholek("Czwarty");
        Wierzcholek WierzcholekNr4 = new Wierzcholek("Piąty");

        WierzcholekNr0.WierzcholkiOdleglosc = new WierzolekOdleglosc[]{new WierzolekOdleglosc(WierzcholekNr1, 4),
            new WierzolekOdleglosc(WierzcholekNr2, 3),
            new WierzolekOdleglosc(WierzcholekNr3, 8),
            new WierzolekOdleglosc(WierzcholekNr4, 10)
        };
        WierzcholekNr1.WierzcholkiOdleglosc = new WierzolekOdleglosc[]{new WierzolekOdleglosc(WierzcholekNr0, 4),
            new WierzolekOdleglosc(WierzcholekNr2, 1),
            new WierzolekOdleglosc(WierzcholekNr3, 2),
            new WierzolekOdleglosc(WierzcholekNr4, 6)};
        WierzcholekNr2.WierzcholkiOdleglosc = new WierzolekOdleglosc[]{new WierzolekOdleglosc(WierzcholekNr0, 3),
            new WierzolekOdleglosc(WierzcholekNr1, 1),
            new WierzolekOdleglosc(WierzcholekNr3, 2),
            new WierzolekOdleglosc(WierzcholekNr4, 3)};
        WierzcholekNr3.WierzcholkiOdleglosc = new WierzolekOdleglosc[]{new WierzolekOdleglosc(WierzcholekNr0, 8),
            new WierzolekOdleglosc(WierzcholekNr1, 2),
            new WierzolekOdleglosc(WierzcholekNr2, 2),
            new WierzolekOdleglosc(WierzcholekNr4, 1)};
        /*WierzcholekNr4.WierzcholkiOdleglosc = new WierzolekOdleglosc[]{ new WierzolekOdleglosc(WierzcholekNr0, 10),
         new WierzolekOdleglosc(WierzcholekNr1, 6),
         new WierzolekOdleglosc(WierzcholekNr2, 3),
         new WierzolekOdleglosc(WierzcholekNr3, 1) }; */

        Wierzcholek[] Wierzcholki = {WierzcholekNr0, WierzcholekNr1, WierzcholekNr2, WierzcholekNr3, WierzcholekNr4};

        PoliczNajbizszeDrogi policz = new PoliczNajbizszeDrogi(Wierzcholki);

    }





package najkrotszedrogi;

class WierzolekOdleglosc {

    public Wierzcholek WierzcholekKolejny;
    public Integer Odleglosc = 0;

    public WierzolekOdleglosc(Wierzcholek WierzcholekKolejny, Integer Odleglosc) {
        this.WierzcholekKolejny = WierzcholekKolejny;
        this.Odleglosc = Odleglosc;
    }
}

class Wierzcholek {

    public String NazaWierzcholka;
    public Wierzcholek WierzcholekPoprzedni = null;
    public Integer MinimalnaOdleglosc = 0;
    public WierzolekOdleglosc[] WierzcholkiOdleglosc;
    public Boolean UzytyJakoGlowny;

    public Wierzcholek(String mNazaWierzcholka) {
        NazaWierzcholka = mNazaWierzcholka;
    }

}

public class PoliczNajbizszeDrogi {

    public PoliczNajbizszeDrogi(Wierzcholek[] TablicaWierzcholkow) {

        Wierzcholek ZacznijOdWierzcholka = TablicaWierzcholkow[0];

        while (ZacznijOdWierzcholka != null) {

            ZacznijOdWierzcholka = UstalOdleglosciDoSasiadow(ZacznijOdWierzcholka, TablicaWierzcholkow);

        }

    }

    private Boolean CzyUzytoWszystkie(Wierzcholek[] TablicaWierzcholkow) {

        return false;
    }

    private Wierzcholek UstalOdleglosciDoSasiadow(Wierzcholek WierzcholekGlowny, Wierzcholek[] TablicaWierzcholkow) {

        WierzcholekGlowny.UzytyJakoGlowny = true;
        Integer NajmniejszaOdlegloscDoSasiada = Integer.MAX_VALUE;
        Wierzcholek NajblizszyWierzcholek = null;
        Integer MaksymalnaWartoscOdleglosci = Integer.MAX_VALUE;

        for (int i = 0; i < WierzcholekGlowny.WierzcholkiOdleglosc.length; i++) {

            if (NajmniejszaOdlegloscDoSasiada > WierzcholekGlowny.WierzcholkiOdleglosc[i].Odleglosc) {

                NajmniejszaOdlegloscDoSasiada = WierzcholekGlowny.WierzcholkiOdleglosc[i].Odleglosc;
                NajblizszyWierzcholek = WierzcholekGlowny.WierzcholkiOdleglosc[i].WierzcholekKolejny;

            }

            if (WierzcholekGlowny.WierzcholkiOdleglosc[i].WierzcholekKolejny.MinimalnaOdleglosc > WierzcholekGlowny.MinimalnaOdleglosc + WierzcholekGlowny.WierzcholkiOdleglosc[i].Odleglosc) {

                WierzcholekGlowny.WierzcholkiOdleglosc[i].WierzcholekKolejny.MinimalnaOdleglosc = WierzcholekGlowny.MinimalnaOdleglosc + WierzcholekGlowny.WierzcholkiOdleglosc[i].Odleglosc;

                WierzcholekGlowny.WierzcholkiOdleglosc[i].WierzcholekKolejny.WierzcholekPoprzedni = WierzcholekGlowny;
            }

        }

        if (NajmniejszaOdlegloscDoSasiada < MaksymalnaWartoscOdleglosci && NajblizszyWierzcholek != null) {
            return NajblizszyWierzcholek;
        } else {
            return UstalKolejnyWierzcholek(TablicaWierzcholkow);
        }

    }

    private Wierzcholek UstalKolejnyWierzcholek(Wierzcholek[] TablicaWierzcholkow) {

        Integer MinimalnaDrogaOdPierwszego = -1;
        Wierzcholek KolejnyWierzcholek = null;

        for (int i = 0; i < TablicaWierzcholkow.length; i++) {

            if (MinimalnaDrogaOdPierwszego > TablicaWierzcholkow[i].MinimalnaOdleglosc && !TablicaWierzcholkow[i].UzytyJakoGlowny) {
                MinimalnaDrogaOdPierwszego = TablicaWierzcholkow[i].MinimalnaOdleglosc;
                KolejnyWierzcholek = TablicaWierzcholkow[i];

            }
        }

        return KolejnyWierzcholek;
    }

}
}

0

No bo nie masz WierzkolekKolejny w klasie Wierzcholek tylko w innej ;). Przejdz do zakladki breakpointow i wyczysc, pewnie pomoze.

0

Skopiowałem, skompilowałem,uruchomiłem i czekam (już około 15 minut). Musisz przemyśleć algorytm - ten jest błędny.

0

dzięki pomogło trochę pracy było różnej na zaliczenia więc dopiero

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package najkrotszedrogi;

/**
 *
 * @author oracle
 */
public class NajkrotszeDrogi {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        Wierzcholek WierzcholekNr0 = new Wierzcholek("Pierwszy");
        Wierzcholek WierzcholekNr1 = new Wierzcholek("Drugi");
        Wierzcholek WierzcholekNr2 = new Wierzcholek("Trzeci");
        Wierzcholek WierzcholekNr3 = new Wierzcholek("Czwarty");
        Wierzcholek WierzcholekNr4 = new Wierzcholek("Piąty");
        Wierzcholek WierzcholekNr5 = new Wierzcholek("Szusty");
        Wierzcholek WierzcholekNr6 = new Wierzcholek("Siudmy");
        Wierzcholek WierzcholekNr7 = new Wierzcholek("Ósmy");
        Wierzcholek WierzcholekNr8 = new Wierzcholek("Dziewiąty");
        Wierzcholek WierzcholekNr9 = new Wierzcholek("Dziesiąty");
        Wierzcholek WierzcholekNr10 = new Wierzcholek("Jedenasty");
        Wierzcholek WierzcholekNr11 = new Wierzcholek("Dwunasty");

        WierzcholekNr0.WierzcholkiOdleglosc = new WierzolekOdleglosc[]{new WierzolekOdleglosc(WierzcholekNr1, 17),
            new WierzolekOdleglosc(WierzcholekNr2, 21),
            new WierzolekOdleglosc(WierzcholekNr3, 13)
        };
        WierzcholekNr1.WierzcholkiOdleglosc = new WierzolekOdleglosc[]{new WierzolekOdleglosc(WierzcholekNr2, 25),
            new WierzolekOdleglosc(WierzcholekNr4, 16),
            new WierzolekOdleglosc(WierzcholekNr6, 10)
        };
        WierzcholekNr2.WierzcholkiOdleglosc = new WierzolekOdleglosc[]{new WierzolekOdleglosc(WierzcholekNr5, 20),
            new WierzolekOdleglosc(WierzcholekNr7, 10),};
        WierzcholekNr3.WierzcholkiOdleglosc = new WierzolekOdleglosc[]{new WierzolekOdleglosc(WierzcholekNr1, 15),
            new WierzolekOdleglosc(WierzcholekNr2, 12),
            new WierzolekOdleglosc(WierzcholekNr5, 19),
            new WierzolekOdleglosc(WierzcholekNr8, 10)};
        WierzcholekNr4.WierzcholkiOdleglosc = new WierzolekOdleglosc[]{new WierzolekOdleglosc(WierzcholekNr6, 9),
            new WierzolekOdleglosc(WierzcholekNr7, 18),};
        WierzcholekNr5.WierzcholkiOdleglosc = new WierzolekOdleglosc[]{new WierzolekOdleglosc(WierzcholekNr7, 17),
            new WierzolekOdleglosc(WierzcholekNr8, 21)};

        WierzcholekNr6.WierzcholkiOdleglosc = new WierzolekOdleglosc[]{new WierzolekOdleglosc(WierzcholekNr7, 14),
            new WierzolekOdleglosc(WierzcholekNr10, 15)};
        WierzcholekNr7.WierzcholkiOdleglosc = new WierzolekOdleglosc[]{new WierzolekOdleglosc(WierzcholekNr8, 8),
            new WierzolekOdleglosc(WierzcholekNr10, 10),
            new WierzolekOdleglosc(WierzcholekNr11, 11)};
        WierzcholekNr8.WierzcholkiOdleglosc = new WierzolekOdleglosc[]{new WierzolekOdleglosc(WierzcholekNr9, 20),
            new WierzolekOdleglosc(WierzcholekNr11, 13)};
        WierzcholekNr9.WierzcholkiOdleglosc = new WierzolekOdleglosc[]{new WierzolekOdleglosc(WierzcholekNr11, 9)
        };
        WierzcholekNr10.WierzcholkiOdleglosc = new WierzolekOdleglosc[]{new WierzolekOdleglosc(WierzcholekNr11, 9)
        };
        WierzcholekNr11.WierzcholkiOdleglosc = new WierzolekOdleglosc[]{new WierzolekOdleglosc(WierzcholekNr8, 13),
            new WierzolekOdleglosc(WierzcholekNr9, 9),
            new WierzolekOdleglosc(WierzcholekNr10, 9)
        };

        Wierzcholek[] Wierzcholki = {WierzcholekNr0, WierzcholekNr1, WierzcholekNr2, WierzcholekNr3, WierzcholekNr4, WierzcholekNr5, WierzcholekNr6, WierzcholekNr7, WierzcholekNr8, WierzcholekNr9, WierzcholekNr10, WierzcholekNr11};

        PoliczNajbizszeDrogi policz = new PoliczNajbizszeDrogi(Wierzcholki);
        //   policz.PoliczNajbizszeDrogi(Wierzcholki);

    }

}


/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package najkrotszedrogi;


class WierzolekOdleglosc {

    public Wierzcholek WierzcholekKolejny;
    public Integer Odleglosc = 0;

    public WierzolekOdleglosc(Wierzcholek WierzcholekKolejny, Integer Odleglosc) {
        this.WierzcholekKolejny = WierzcholekKolejny;
        this.Odleglosc = Odleglosc;
    }
}

class Wierzcholek {

    public String NazaWierzcholka;
    public Wierzcholek WierzcholekPoprzedni = null;
    public Integer MinimalnaOdleglosc = Integer.MAX_VALUE;
    public WierzolekOdleglosc[] WierzcholkiOdleglosc;
    public Boolean UzytyJakoGlowny= false;
    
    

    public Wierzcholek(String mNazaWierzcholka) {
        NazaWierzcholka = mNazaWierzcholka;
    }

}

public class PoliczNajbizszeDrogi {

    public PoliczNajbizszeDrogi(Wierzcholek[] TablicaWierzcholkow) {

        Wierzcholek ZacznijOdWierzcholka = TablicaWierzcholkow[0];
        Wierzcholek WierzcholekPoprzedniNaDrodze = null;
        Wierzcholek KolejnyWierzcholek;
        
        while (ZacznijOdWierzcholka != null) {

            KolejnyWierzcholek = UstalOdleglosciDoSasiadow(ZacznijOdWierzcholka, WierzcholekPoprzedniNaDrodze, TablicaWierzcholkow);
            if ( KolejnyWierzcholek != null) {
               WierzcholekPoprzedniNaDrodze = ZacznijOdWierzcholka;
               ZacznijOdWierzcholka = KolejnyWierzcholek;
               
            } else {
                
               WierzcholekPoprzedniNaDrodze = null;        
               ZacznijOdWierzcholka = UstalKolejnyWierzcholek(TablicaWierzcholkow);
            }

        }
        
         DrukujDrogi(TablicaWierzcholkow);

    }

    private Boolean CzyUzytoWszystkie(Wierzcholek[] TablicaWierzcholkow) {

        return false;
    }

    private Wierzcholek UstalOdleglosciDoSasiadow(Wierzcholek WierzcholekGlowny, Wierzcholek WierzcholekPoprzedniNaDrodze, Wierzcholek[] TablicaWierzcholkow) {

        WierzcholekGlowny.UzytyJakoGlowny = true;
        Integer NajmniejszaOdlegloscDoSasiada = Integer.MAX_VALUE;
        Wierzcholek NajblizszyWierzcholek = null;
        Integer MaksymalnaWartoscOdleglosci = Integer.MAX_VALUE;
  

        //Integer OdleglosOdPierwszego = UstalOdlegloscOdPierwszego(WierzcholekGlowny);
        for (int i = 0; i < WierzcholekGlowny.WierzcholkiOdleglosc.length; i++) {

            if (WierzcholekPoprzedniNaDrodze != WierzcholekGlowny.WierzcholkiOdleglosc[i].WierzcholekKolejny) {

                if (NajmniejszaOdlegloscDoSasiada > WierzcholekGlowny.WierzcholkiOdleglosc[i].Odleglosc) {

                    NajmniejszaOdlegloscDoSasiada = WierzcholekGlowny.WierzcholkiOdleglosc[i].Odleglosc;
                    NajblizszyWierzcholek = WierzcholekGlowny.WierzcholkiOdleglosc[i].WierzcholekKolejny;

                }

                if (WierzcholekGlowny.WierzcholkiOdleglosc[i].WierzcholekKolejny.MinimalnaOdleglosc > WierzcholekGlowny.MinimalnaOdleglosc + WierzcholekGlowny.WierzcholkiOdleglosc[i].Odleglosc) {

                    if (WierzcholekGlowny.MinimalnaOdleglosc < Integer.MAX_VALUE) {
                        WierzcholekGlowny.WierzcholkiOdleglosc[i].WierzcholekKolejny.MinimalnaOdleglosc = WierzcholekGlowny.MinimalnaOdleglosc + WierzcholekGlowny.WierzcholkiOdleglosc[i].Odleglosc;
                    } else {
                        WierzcholekGlowny.WierzcholkiOdleglosc[i].WierzcholekKolejny.MinimalnaOdleglosc = WierzcholekGlowny.WierzcholkiOdleglosc[i].Odleglosc;
                    }

                    WierzcholekGlowny.WierzcholkiOdleglosc[i].WierzcholekKolejny.WierzcholekPoprzedni = WierzcholekGlowny;
                }
            }

        }

        if (NajmniejszaOdlegloscDoSasiada < MaksymalnaWartoscOdleglosci && NajblizszyWierzcholek != null && NajmniejszaOdlegloscDoSasiada + WierzcholekGlowny.MinimalnaOdleglosc < NajblizszyWierzcholek.MinimalnaOdleglosc) {
           // WierzcholekPoprzedniNaDrodze = WierzcholekGlowny;
            
           
            return NajblizszyWierzcholek;
        } else {
         //   WierzcholekPoprzedniNaDrodze = null;
          //  return UstalKolejnyWierzcholek(TablicaWierzcholkow);
            return null;
        }

    }

    private Wierzcholek UstalKolejnyWierzcholek(Wierzcholek[] TablicaWierzcholkow) {

        Integer MinimalnaDrogaOdPierwszego = Integer.MAX_VALUE;
        Wierzcholek KolejnyWierzcholek = null;

        for (int i = 0; i < TablicaWierzcholkow.length; i++) {

            if (MinimalnaDrogaOdPierwszego > TablicaWierzcholkow[i].MinimalnaOdleglosc && !TablicaWierzcholkow[i].UzytyJakoGlowny) {
                MinimalnaDrogaOdPierwszego = TablicaWierzcholkow[i].MinimalnaOdleglosc;
                KolejnyWierzcholek = TablicaWierzcholkow[i];

            }
        }

        return KolejnyWierzcholek;
    }
    
    private void DrukujDrogi(Wierzcholek[] TablicaWierzcholkow) {

        String NajkrotszaDroga="";
        String Sciezka= "";

        for (int i = 1; i < TablicaWierzcholkow.length; i++) {

           
              
            System.out.println("Wierzcholek nr: " + Integer.toString(i+1) + " sciezka :" + OdtworzSciezke( TablicaWierzcholkow[i],  Sciezka, TablicaWierzcholkow[0]  ) + "  odleglosc min :" + Integer.toString(TablicaWierzcholkow[i].MinimalnaOdleglosc));

        }

        
    }
    
    private String OdtworzSciezke(Wierzcholek Wierzcholek,  String Sciezka, Wierzcholek WierzcholekPierwszy ) {
       
        if ( Wierzcholek != WierzcholekPierwszy) {
         Sciezka += OdtworzSciezke( Wierzcholek.WierzcholekPoprzedni, Sciezka, WierzcholekPierwszy );
        } 
         
        Sciezka += Wierzcholek.NazaWierzcholka + ", ";
        
        
        return Sciezka;
        
    }

}

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