3

このコードで NullPointerException が発生するのはなぜですか?

public static void main(String args[]) throws FileNotFoundException {

    int i = 0;
    Job[] job = new Job[100];
    File f = new File("Jobs.txt");
    Scanner input = new Scanner(f);

    while (input.hasNextInt()) {
        job[i].start = input.nextInt();
        job[i].end = input.nextInt();
        job[i].weight = input.nextInt();
        i++;
    }
}

最初の実行時に while ループの最初の行でエラーが発生します。別のクラスもあります:

public class Job {
    public int start, end, weight;
}

およびテキスト ファイル:

0 3 3
1 4 2
0 5 4
3 6 1
4 7 2
3 9 5
5 10 2
8 10 1

ありがとうございました。

4

3 に答える 3

8

NullPointerException

オブジェクトが必要な場合に、アプリケーションが null を使用しようとするとスローされます。これらには以下が含まれます:

  • null オブジェクトのインスタンス メソッドの呼び出し。
  • null オブジェクトのフィールドへのアクセスまたは変更。
  • null の長さを配列であるかのように取得します。
  • 配列であるかのように null のスロットにアクセスまたは変更します。
  • Throwable 値であるかのように null をスローします。

    ジョブ[] ジョブ = 新しいジョブ[100];

現在、配列内のすべての値はnull. 内部に Job オブジェクトを挿入していないためです。

  job[i].start = input.nextInt(); // job[i]  is null.

あなたがしなければならないことは、新しいJobオブジェクトを初期化し、現在のindex.

となり、

while (input.hasNextInt()) {
        Job job = new Job(); 
        job.start = input.nextInt();
        job.end = input.nextInt();
        job.weight = input.nextInt();
        job[i] =job;
        i++;
    }
于 2013-10-29T14:09:14.777 に答える
5

4.12.5を参照。変数の初期値:

すべての参照型(§4.3)について、デフォルト値はnullです。

job配列にアクセスする前に配列を初期化する必要がありnull.startますNullPointerException

于 2013-10-29T14:11:59.240 に答える
4

タイプの配列を初期化したばかりJobで、配列内の各要素を初期化していないため、例外です。

 while (input.hasNextInt()) {
        job[i] = new Job(); // initialize here
        job[i].start = input.nextInt();
        job[i].end = input.nextInt();
        job[i].weight = input.nextInt();
        i++;
    }
于 2013-10-29T14:09:23.123 に答える