2

我目前正在编写一个命令行程序,它应该从文本文件中获取行并将数据添加到 HashMaps 数组中。我目前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]));

所以我的问题是:当我声明了 with 数组时HashMaps<String, Stasjon>Stasjon 是我的 Stasjon 类的对象,获取有关某些气象站的信息),为什么我在该行中出现错误?中的对象stasjonsmap.get(linje[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

You have created an array of Hashmaps of size 6, but all items in that array are still initialized to null.

You could instead do it like this (which also gets rid of the ugly cast):

  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 回答