如何在线程" main"中解决异常? java.lang.NullPointerException错误

时间:2013-10-19 14:37:53

标签: java

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

1 个答案:

答案 0 :(得分:29)

这是问题

double a[] = null;

由于anull,因此每次使用NullPointerException时都会出现a[i] = var; ,直到您初始化它为止。所以这个:

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

会失败。

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

null

IMO比解决这个例外更重要的是,您应该学会阅读堆栈跟踪并理解它所说的内容,这样您就可以发现问题并解决问题它

  

显示java.lang.NullPointerException

此异常表示存在使用null值的变量。怎么解决?在使用之前,请确保变量不是<init>

  

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

这一行包含两部分:

  • 首先,显示抛出错误的类和方法。在这种情况下,它位于包TwoTenB中声明的类twoten中的SomeClassName.<init> 方法。当您遇到带有a[i] = var;的错误消息时,表示在创建类的新实例时抛出了错误,例如执行构造函数(在这种情况下似乎是问题)。
  • 其次,显示引发错误的文件和行号位置,即括号之间。这种方式更容易发现错误出现的位置。所以你必须查看文件TwoTenB.java,第29行。这似乎是TwoTenB

从这一行开始,其他行将类似于告诉您错误发生的位置。所以在阅读本文时:

  

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

这意味着您尝试在main包中声明的类JavaPractice的{​​{1}}方法中实例化javapractice对象引用。