Je rencontre un problème dans un programme Java. Exception dans le thread "main" ;
java.lang.NullPointerException
at twoten.TwoTenB.<init>(TwoTenB.java:29)
at javapractice.JavaPractice.main(JavaPractice.java:32)
Java Result: 1
est l'erreur que je reçois. J'aurais vraiment besoin d'aide, car je suis coincé depuis des heures à cet endroit...
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");
}
}
}
C'est le problème
double a[] = null;
Puisque a
est null
, une NullPointerException
se produira chaque fois que vous l'utiliserez jusqu'à ce que vous l'initialisiez. Donc ceci :
a[i] = var;
échouera.
Une solution possible serait de l'initialiser lors de sa déclaration :
double a[] = new double[PUT_A_LENGTH_HERE]; //seems like this constant should be 7
IMO plus important que la résolution de cette exception, est le fait que vous devriez apprendre à lire le stacktrace et comprendre ce qu'il dit, afin de pouvoir détecter les problèmes et les résoudre.
java.lang.NullPointerException
Cette exception signifie qu’une variable dont la valeur est nulle est utilisée. Comment résoudre ce problème ? Assurez-vous simplement que la variable n'est pas nulle
avant d'être utilisée.
at twoten.TwoTenB.
(TwoTenB.java:29)
Cette ligne a deux parties :
<init>
de la classe TwoTenB
déclarée dans le paquet twoten
. Lorsque vous rencontrez un message d'erreur avec SomeClassName.<init>
, cela signifie que l'erreur est survenue lors de la création d'une nouvelle instance de la classe, par exemple en exécutant le constructeur (dans ce cas, cela semble être le problème).a[i] = var;
.À partir de cette ligne, d'autres lignes seront similaires pour vous dire où l'erreur s'est produite. Donc en lisant ceci :
at javapractice.JavaPractice.main(JavaPractice.java:32)
Cela signifie que vous avez essayé d'instancier une référence d'objet TwoTenB
dans la méthode main
de votre classe JavaPractice
déclarée dans le paquet javapractice
.