29. oktober 2005 - 23:20Der 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)
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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.
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) }
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) }
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.
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.
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.
Ok, da, men så fortæller jeg din lærer at du har fået hjælp *g*
Synes godt om
Ny brugerNybegynder
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.