2

現在、テキスト ファイルから行を取り込み、HashMap の配列にデータを追加するコマンド ライン プログラムを作成しています。私は現在、NullPointerExceptionこのメソッドを実行すると取得します。

Public class Vaerdata {
String[] linje;
String line;
String line2;
HashMap<String, Stasjon> stasjonsmap = new HashMap<String, Stasjon>();
HashMap<String, Stasjon>[] regionmap = (HashMap<String, Stasjon>[]) new HashMap<?, ?>[6];


void init() throws IOException{
    BufferedReader br = new BufferedReader(new FileReader("stasjoner_norge.txt"));
    BufferedReader brData = new BufferedReader(new FileReader("klimadata2012.txt"));
    for(int i = 0; i < 10; i++){
        brData.readLine();
    }
    br.readLine();
    while((line = br.readLine()) != null){
        linje = line.split("\\s+");
        stasjonsmap.put(linje[1], new Stasjon(Integer.parseInt(linje[1]), linje[2], Integer.parseInt(linje[3]), linje[4], linje[5], linje[6]));
        }
        if(linje[6].equals("AGDER")){
            System.out.println(stasjonsmap.get(linje[1])); //DEBUG
            regionmap[1].put(stasjonsmap.get(linje[1]).navn, stasjonsmap.get(linje[1]));
            System.out.println(regionmap[1].get(stasjonsmap.get(linje[1]).navn)); //DEBUG
        }
    }  
}

NullPointerExceptionはこの行で起こります:

regionmap[1].put(stasjonsmap.get(linje[1]).navn, stasjonsmap.get(linje[1]));

私の質問は次のとおりです: HashMapswithの配列を宣言したとき<String, Stasjon>(Stasjon は Stasjon クラスのオブジェクトであり、特定の気象観測所に関する情報を取得します)、なぜその行でエラーが発生するのですか? のオブジェクトstasjonsmap.get(linje[1])が宣言されていますが、2 番目のハッシュマップでこのオブジェクトを参照できない理由がわかりません。

テキスト ファイルのすべての行は、1 行目以降 (私のプログラムではスキップします) は次のようになります。
36200 TORUNGEN_FYR 12 ARENDAL AUST-AGDER AGDER

あらかじめ; ご協力いただきありがとうございます。

4

3 に答える 3

5

When you initialize your array of HashMap here

HashMap<String, Stasjon>[] regionmap = (HashMap<String, Stasjon>[]) new HashMap<?, ?>[6];

all values in the array are null.

You then try to call the put method of HashMap on a null-reference.

First you have to initialize your HashMaps somehow:

for (int i = 0; i < regionmap.length; i++) {
    regionmap[i] = new HashMap<String, Stasjon>();
}
于 2012-11-01T09:08:09.953 に答える
0

- I think you have not initialized the HashMap, and you called put() method.

- As HashMap is an Object its default value is null, so you need to initialize it.

于 2012-11-01T09:11:45.013 に答える
0

サイズ 6 の Hashmap の配列を作成しましたが、その配列内のすべてのアイテムはまだ null に初期化されています。

代わりに、次のようにすることもできます (これにより、醜いキャストも取り除かれます)。

  private static HashMap<String, Stasjun>[] initRegionMap(HashMap<String, Stasjun>... items) {
    return items;
  }

  HashMap<String, Stasjun>[] regionmap = initRegionMap ( 
      new HashMap<String, Stasjun>(),
      new HashMap<String, Stasjun>(),
      new HashMap<String, Stasjun>(),
      new HashMap<String, Stasjun>(),
      new HashMap<String, Stasjun>(),
      new HashMap<String, Stasjun>()
    );
于 2012-11-01T09:13:29.033 に答える