12

我在 Java 程序中遇到问题。线程“主”中的异常

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

1 回答 1

34

这就是问题

double a[] = null;

因为ais nullNullPointerException每次你使用它时都会出现,直到你初始化它。所以这:

a[i] = var;

将失败。

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

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

IMO 比解决这个异常更重要的是,你应该学会阅读堆栈跟踪并理解它所说的内容,这样你就可以检测到问题并解决它。

java.lang.NullPointerException

此异常意味着有一个null正在使用值的变量。怎么解决?只需确保该变量null在使用之前不存在。

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

这条线有两个部分:

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

从这一行开始,其他行将类似地告诉您错误出现的位置。因此,当阅读本文时:

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

这意味着您试图在 package.json中声明的类的方法TwoTenB内实例化对象引用。mainJavaPracticejavapractice

于 2013-10-19T14:40:03.567 回答