Jeg har et problem med et Java-program. Unntak i tråden "main"
java.lang.NullPointerException
at twoten.TwoTenB.<init>(TwoTenB.java:29)
at javapractice.JavaPractice.main(JavaPractice.java:32)
Java Result: 1
er feilen jeg får. Jeg kunne virkelig trenge litt hjelp, siden jeg sitter fast timer på dette stedet ...
package twoten;
import java.util.Scanner;
public class TwoTenB {
public TwoTenB() {
double percentage;
double a[] = null;
double total = 0;
double var;
System.out.print("\tRESULT\n\n");
Scanner scan = new Scanner(System.in);
//double[] mark = new double[7];
for (int i = 0; i < 7; i++) {
System.out.print("\nMarks in subject " + (i + 1) + "\t:\t");
var = scan.nextDouble();
a[i] = var;
total = total + a[i];
//percentage = first * second * third * fourth * fifth * sixth * seventh * 100 / 700;
}
percentage = total * 100 / 700;
if (a[0] > 35 && a[1] > 35 && a[2] > 35 && a[3] > 35 && a[4] > 35 && a[5] > 35 && a[6] > 35 && percentage > 35) {
if (percentage >= 60) {
System.out.print("\nCongratulation!!! you've got FIRST dividion\n");
} else if (percentage >= 45 && percentage < 60) {
System.out.print("\nCongratulation!!! you've got SECOND dividion\n");
} else if (percentage >= 35 && percentage < 45) {
System.out.print("\nCongratulation!!! you've got THIRD dividion\n");
}
} else {
System.out.print("\nSORRY!!! you've FAILED\n");
}
}
}
Dette er problemet
double a[] = null;
Siden a
er null
, vil NullPointerException
oppstå hver gang du bruker den inntil du initialiserer den. Så dette:
a[i] = var;
vil mislykkes.
En mulig løsning kan være å initialisere den når du deklarerer den:
double a[] = new double[PUT_A_LENGTH_HERE]; //seems like this constant should be 7
IMO er det viktigere enn å løse dette unntaket at du lærer deg å lese stacktrace og forstå hva den sier, slik at du kan oppdage problemene og løse dem.
java.lang.NullPointerException
Dette unntaket betyr at det brukes en variabel med null
verdi. Hvordan løser man dette? Bare sørg for at variabelen ikke er null
før den brukes.
at twoten.TwoTenB.
Denne linjen har to deler:
<init>
metode i klassen TwoTenB
deklarert i pakken twoten
. Når du støter på en feilmelding med SomeClassName.<init>
, betyr det at feilen ble kastet mens du opprettet en ny forekomst av klassen, f.eks. ved å utføre konstruktøren (i dette tilfellet ser det ut til å være problemet).a[i] = var;
.Fra denne linjen vil andre linjer være like for å fortelle deg hvor feilen oppsto. Så når du leser dette:
at javapractice.JavaPractice.main(JavaPractice.java:32)
Det betyr at du prøvde å instansiere en TwoTenB
-objektreferanse i main
-metoden i klassen JavaPractice
som er deklarert i javapractice
-pakken.