如何解决“Exception in thread 'main' java.lang.NullPointerException”错误

13

我在一个Java程序中遇到了问题。主线程中出现了异常:"main"

java.lang.NullPointerException
at twoten.TwoTenB.<init>(TwoTenB.java:29)
at javapractice.JavaPractice.main(JavaPractice.java:32)
Java Result: 1 

我遇到了这个错误。由于我卡在这里已经好几个小时了,所以真的需要帮助……

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");
    }
    }
}

你没有初始化 a,在这里 double a[] = null; - Suresh Atta
1个回答

36

这是问题。

double a[] = null;

由于anull,在初始化之前每次使用它都会引发NullPointerException异常。因此,这样做:

a[i] = var;

将会失败。

一个可能的解决方案是在声明时初始化它:

double a[] = new double[PUT_A_LENGTH_HERE]; //seems like this constant should be 7

重要的不是解决这个异常,而是你应该学会阅读堆栈跟踪并理解其含义,以便能够检测问题并解决它。

java.lang.NullPointerException

这个异常表示正在使用一个null值变量。如何解决?只需确保在使用之前将该变量设置为非null

at twoten.TwoTenB.(TwoTenB.java:29)

这一行有两部分:

  • 第一个部分显示了发生错误的类和方法。在此例中,它位于 twoten 包中声明的 TwoTenB 类中的 <init> 方法处。当你遇到带有 SomeClassName.<init> 的错误消息时,意味着在创建该类的新实例(例如执行构造函数)时抛出了错误(在这种情况下似乎是问题所在)。
  • 第二个部分显示了抛出错误的文件和代码行号位置,括号包含代码行信息。这使得更容易找到错误发生的地方。因此,你需要查看文件 TwoTenB.java,代码行号为29,这似乎是 a[i] = var;

从这一行开始,其他行将类似地告诉你错误发生的位置。因此,当读到以下内容时:

at javapractice.JavaPractice.main(JavaPractice.java:32)

这意味着你正在尝试在位于 javapractice 包中声明的 JavaPractice 类的 main 方法中实例化一个 TwoTenB 对象引用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接