1

オブジェクトの一部である配列にアクセスしようとしています。

「Main.main(Main.java:24) の OrderedStringList.add(OrderedStringList.java:21) でスレッド "main" java.lang.NullPointerException で例外が発生しました」というエラーが表示されます。

出力に干渉する可能性のあるものをすべて削除して、プログラムを必要最小限に切り詰めました。

public class Main {

public static void main(String[] args) {

    int x = 5;

    OrderedStringList myList = new OrderedStringList();

    myList.add(x);
    }
} //end class

このコードは、クラス OrderedStringList を参照します。

public class OrderedStringList {

public int values[];

OrderedStringList(){
    int values[] = new int[5];
}

public void add(int y) {
    values[0] = y;
    System.out.print(values[0]);
}

エラーの 21 と 24 は行番号だと思います。元のコードでコメントアウトされているものがあるため、投稿したコードには通常、途中にいくつかのコンテンツがあります。メインの 24 行目は次のとおりmyList.add(x);です。OrderedStringList の 21 行目は次のとおりvalues[0] = y;です。

私が見逃している本当に単純なものがあると思います。何でも大歓迎です。

ありがとう。

4

4 に答える 4

5

ここ

OrderedStringList(){
    int values[] = new int[5];
}

クラス メンバーをシャドウしvaluesます。

これを次のように変更します。

OrderedStringList(){
    values = new int[5];
}
于 2013-09-27T00:40:50.597 に答える
2

2回も宣言してるvalues

public int values[];

OrderedStringList(){
    int values[] = new int[5];
}

これは一般にシャドウイングとして知られています。

コンストラクターでの配列の初期化を次のように変更します...

public int values[];

OrderedStringList(){
    value = new int[5];
}

その代わり...

于 2013-09-27T00:40:58.767 に答える
2

values[]これにより、メソッドのスコープ内で配列が宣言されます。

OrderedStringList(){
    int values[] = new int[5];
}

Classスコープを参照したい場合

OrderedStringList(){
    values = new int[5];
}
于 2013-09-27T00:40:58.813 に答える
1

行では、コンストラクターにのみ存在するint values[] = new int[5];まったく新しいを宣言しています。int[]に変更しvalues = new int[5];ます。

于 2013-09-27T00:41:19.197 に答える