1. ホーム
  2. java

[解決済み] スレッド "main "でのExceptionを解決するにはどうすればよいですか java.lang.NullPointerException エラー [duplicate].

2022-03-12 07:55:56

質問

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

解決方法は?

これは問題です

double a[] = null;

以降 anull , NullPointerException は、初期化するまでは使うたびに発生します。だから、これ。

a[i] = var;

は失敗します。

解決策として考えられるのは、宣言時に初期化することです。

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


この例外を解決することよりも重要なのは、IMOが学ぶべき事実である。 読む スタックトレースと 理解する そうすれば、問題を発見し、解決することができます。

<ブロッククオート

java.lang.NullPointerException

この例外は、変数に null の値が使用されています。解決方法は?ただ、その変数が null を使用します。

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

この行は2つの部分に分かれています。

  • まず、エラーが発生したクラスとメソッドを表示します。この場合、エラーが発生したのは <init> メソッド クラス内 TwoTenB パッケージで宣言 twoten . でエラーメッセージが発生した場合 SomeClassName.<init> これは、コンストラクタの実行など、クラスの新しいインスタンスを作成する際にエラーが発生したことを意味します (この場合は、それが問題だったようです)。
  • 次に、エラーが発生したファイルと行番号を( )で囲んで表示します。こうすることで、エラーが発生した場所を特定しやすくなります。つまり、ファイルTwoTenB.javaの行番号29を調べる必要があります。これはどうやら a[i] = var; .

この行から、他の行も同様にして、どこでエラーが発生したかを教えてくれます。ですから、これを読むと

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

をインスタンス化しようとしたということです。 TwoTenB オブジェクトの参照を main メソッドを作成します。 JavaPractice で宣言されている javapractice パッケージに格納されます。