Avatar billede kaydk Nybegynder
29. oktober 2005 - 23:20 Der er 7 kommentarer og
1 løsning

NullPointerException hjælp ønskes

Hey første gang jeg er herinde, håber i vil tage godt imod mig.

Jeg er igang med et JAVA-program, der benytter Dijkstra-shortest path algoritme til at finde korteste afstand mellem to knuder.

Disse to knuder hentes ind som args[] ved kørsel af programmet. Herunder ses del koden.

Som jeg har opbygget programmet, så vil variablen "start" ikke få tildelt nogen værdi, jeg startknuden, der angives i args[] ikke eksistere i grafen, således vil jeg få en NullPointerException fejlmeddelse.
Mit ønske er, at kunne ignorere NullPointerException meddelsen, og kunne indføre min egen fejl meddelse.

Jeg har bl.a. forsøgt med;

if(start == null)
throw new NullPointerException("Bla bla bla");

Fejlmeddelsen kommer stadig.

Så har jeg forsøgt med en try-catch funktion;

try {Vertex start = (Vertex) gr.vertex_Map.get("FIRST");)
catch {NullPointerException exception}{System.out.println("- Den angivne startstation eksisterer ikke i koereplanen.");
}

Men da vil den ikke compile, idet variablen "start" igen bliver benyttet efter try-catch funktion, og der kan riskeres, at den ikke får tildelt nogen værdi i try-catch.

Så mit spørgsmål er, har nogen en løsning til, hvordan jeg smider NullPointerException og kan indføre min egen fejlmeddelse i tilfældet af, at den ikke får tildelt nogen værdi?

--------------------------------------------------------
        Vertex start = (Vertex) gr.vertex_Map.get("FIRST");    // FIRST-knude
        if(start == null)
        {
            System.out.println("- Den angivne startstation eksisterer ikke i koereplanen.");
        }
       
        gr.clearAll();        // initialiserer variabler for alle knuder
       
        pq.insert(new Path(start,0));    // tilføjer FIRST-knude til prioritetskøen
        start.dist = 0;        // initialiserer distancen for FIRST-knuden   
        int blacked = 0;    // holder styr på hvor mange knuder der er besøgt (sorte)
Avatar billede kaydk Nybegynder
29. oktober 2005 - 23:22 #1
Som jeg har opbygget programmet, så vil variablen "start" ikke få tildelt nogen værdi, HVIS startknuden, der angives i args[] ikke eksistere i grafen, således vil jeg få en NullPointerException fejlmeddelse.
Avatar billede erikjacobsen Ekspert
29. oktober 2005 - 23:28 #2
Det skal du vel bare klare med lidt if-sætninger.

Problemet med din

try {Vertex start = (Vertex) gr.vertex_Map.get("FIRST");)
catch {NullPointerException exception}{System.out.println("- Den angivne startstation eksisterer ikke i koereplanen.");
}

er at du erklærer start inde i nogle { ... } og så findes den ikke udenfor. Du kunne

Vertex start;
try {start = (Vertex) gr.vertex_Map.get("FIRST");)
catch {NullPointerException exception}{System.out.println("- Den angivne startstation eksisterer ikke i koereplanen.");
}

men det er ikke en fejl at give en variabel værdien null, så du vil ikke få en exception. Det er først når du siger: start.enMetode().

Så lav en if, så du ikke kalder dit program, hvis den er null. Måske (jeg kan ikke gennemskue hele din kode):

        Vertex start = (Vertex) gr.vertex_Map.get("FIRST");    // FIRST-knude
        if(start == null)
        {
            System.out.println("- Den angivne startstation eksisterer ikke i koereplanen.");
     
        gr.clearAll();        // initialiserer variabler for alle knuder
     
        pq.insert(new Path(start,0));    // tilføjer FIRST-knude til prioritetskøen
        start.dist = 0;        // initialiserer distancen for FIRST-knuden 
        int blacked = 0;    // holder styr på hvor mange knuder der er besøgt (sorte)
  }
Avatar billede erikjacobsen Ekspert
29. oktober 2005 - 23:29 #3
Vrøvl.... Sådan

        Vertex start = (Vertex) gr.vertex_Map.get("FIRST");    // FIRST-knude
        if(start == null)
        {
            System.out.println("- Den angivne startstation eksisterer ikke i koereplanen.");
  } else { 
        gr.clearAll();        // initialiserer variabler for alle knuder
   
        pq.insert(new Path(start,0));    // tilføjer FIRST-knude til prioritetskøen
        start.dist = 0;        // initialiserer distancen for FIRST-knuden
        int blacked = 0;    // holder styr på hvor mange knuder der er besøgt (sorte)
  }
Avatar billede erikjacobsen Ekspert
29. oktober 2005 - 23:30 #4
Og helt generelt vil jeg sige at det er uholdbar programmering at fange null-pointer exceptions. Man skal kunne programmere så de ikke kommer, og hvis de så kommer alligevel, så ved man der er en fejl.
Avatar billede kaydk Nybegynder
29. oktober 2005 - 23:37 #5
Hej erikjacobsen. Det var bare simpelthen den "else" jeg manglede. Jeg har siddet og skrevet JAVA næsten hele dagen, så er blevet lidt tosset i hovedet. Tusind tak for hjælpen. Giv et svar, og du får pointerne.
Avatar billede erikjacobsen Ekspert
29. oktober 2005 - 23:37 #6
;) Nej tak, jeg samler slet ikke på point. Svar selv, accepter eget svar.
Avatar billede kaydk Nybegynder
29. oktober 2005 - 23:41 #7
Oh hehe tak :). Men tak igen, det er nemlig en eksamensopgave jeg er igang med, og det var det sidste jeg manglede inden jeg vil hoppe i seng, du har reddet min dag. TAK TAK.
Avatar billede erikjacobsen Ekspert
29. oktober 2005 - 23:43 #8
Ok, da, men så fortæller jeg din lærer at du har fået hjælp *g*
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester