Ik heb een probleem met een Java-programma. Uitzondering in thread “main”
java.lang.NullPointerException
at twoten.TwoTenB.<init>(TwoTenB.java:29)
at javapractice.JavaPractice.main(JavaPractice.java:32)
Java Result: 1
is de foutmelding die ik krijg. Ik kan wel wat hulp gebruiken, aangezien ik hier uren vast zit…
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");
}
}
}
Antwoord 1, autoriteit 100%
Dit is het probleem
double a[] = null;
Aangezien a
null
is, zal NullPointerException
elke keer dat u het gebruikt, optreden totdat u het initialiseert. Dus dit:
a[i] = var;
zal mislukken.
Een mogelijke oplossing zou zijn om het te initialiseren bij het declareren:
double a[] = new double[PUT_A_LENGTH_HERE]; //seems like this constant should be 7
IMO belangrijker dan het oplossen van deze uitzondering, is het feit dat u de stacktrace moet leren lezen en begrijpen wat er staat, zodat u de problemen kunt detecteren en oplossen het.
java.lang.NullPointerException
Deze uitzondering betekent dat er een variabele met de waarde null
wordt gebruikt. Hoe op te lossen? Zorg ervoor dat de variabele niet null
is voordat u deze gebruikt.
om twoten.TwoTenB.(TwoTenB.java:29)
Deze regel bestaat uit twee delen:
- Toon eerst de klasse en methode waar de fout is opgetreden. In dit geval was het bij
<init>
methode in klasseTwoTenB
gedeclareerd in pakkettwoten
. Als u een foutmelding tegenkomt metSomeClassName.<init>
, betekent dit dat de fout is opgetreden tijdens het maken van een nieuwe instantie van de klasse, b.v. uitvoeren van de constructor (in dit geval lijkt dat het probleem te zijn). - Ten tweede toont het de locatie van het bestand en het regelnummer waar de fout wordt gegenereerd, die tussen haakjes staat. Op deze manier is het gemakkelijker om te zien waar de fout is ontstaan. Je moet dus kijken in bestand TwoTenB.java, regelnummer 29. Dit lijkt
a[i] = var;
te zijn.
Vanaf deze regel zullen andere regels vergelijkbaar zijn om u te vertellen waar de fout is opgetreden. Dus als je dit leest:
op javapractice.JavaPractice.main(JavaPractice.java:32)
Het betekent dat u een TwoTenB
objectreferentie probeerde te instantiëren binnen de main
methode van uw klasse JavaPractice
gedeclareerd in javapractice
pakket.