对于学校我必须制作一个程序,它将从文件中获取值,然后将其打印出来。我正在使用HashMap
,因为它最适合存储我的数据。我遇到的问题是,当我尝试添加它时,我得到一个空指针。也许这是因为整数没有实例化,但我该怎么办呢?
这是我的代码:
public class Driver {
static ArrayList<Event> myEvents = new ArrayList<Event>();
static String[][][] counts = new String[50][1000][2];
//static ArrayList<int>[] myCounts = new ArrayList[];
//static ArrayList<String>[] myCountProfile = new ArrayList[];
@SuppressWarnings("unchecked")
static HashMap<String, Integer>[] count = new HashMap[50];
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
File input = new File("./src/Problem1/stormdata_2013.csv");
Scanner fileRead = new Scanner(input);
while (fileRead.hasNextLine()) {
String currentLine = fileRead.nextLine();
Scanner lineScan = new Scanner(currentLine).useDelimiter(",");
// Dealing with unnecessary information
for (int i = 0; i < 8; i++) {
lineScan.next();
}
String state = lineScan.next().trim();
int stateNum = Integer.parseInt(lineScan.next());
lineScan.next();
String month = lineScan.next().trim();
String type = lineScan.next().trim();
myEvents.add(new Event(type, month, state, stateNum));
count[stateNum].put(type,count[stateNum].get(type)+1);
}
}
}
答案 0 :(得分:2)
您已经创建了一个HashMap
s数组:
@SuppressWarnings("unchecked")
static HashMap<String, Integer>[] count = new HashMap[50];
...但该数组中的地图未初始化。您的数组只包含50个null
引用。您需要先使用map
对其进行初始化,然后再将其添加到其中。
if (count[stateNum] == null) {
countNum[stateNum] = new HashMap<String, Integer();
}
count[stateNum].put(type,count[stateNum].get(type)+1);
另外,我建议你创建一个List<Map<String, Integer>>
,而不是创建原始类型的数组。正如编译器所指出的那样,这确实不是类型安全的。
此外,你要使用String[][][]
的事实清楚地表明你可能没有选择最好的数据结构,这可能对你有所帮助。我猜,你几乎肯定需要一个单独的课程。
答案 1 :(得分:0)
您甚至不创建单个HashMap。您为50个HashMaps创建一个数组。默认情况下,它包含50个空值,它必须包含50个新的HashMap对象。
此外,写String[2][50][1000]
而不是String[50][1000][2]
不浪费内存。 Explanation
答案 2 :(得分:0)
您已声明HashMap
的数组,但尚未对其进行初始化。
static HashMap<String, Integer>[] count = new HashMap[50];
在使用之前,您需要初始化HashMap的所有元素
答案 3 :(得分:0)
要使用HashMap,您可以执行以下操作,并且永远不应该获得nullpointer异常:
static HashMap<String, Object[]> hm = new HashMap<String, Object[]>();
public static void main( String[] args ) throws FileNotFoundException {
File input = new File("./src/Problem1/stormdata_2013.csv");
Scanner fileRead = new Scanner(input);
while (fileRead.hasNextLine()) {
String currentLine = fileRead.nextLine();
Scanner lineScan = new Scanner(currentLine).useDelimiter(",");
// Dealing with unnecessary information
for (int i = 0; i < 8; i++) {
lineScan.next();
}
String state = lineScan.next().trim();
int stateNum = Integer.parseInt(lineScan.next());
lineScan.next();
String month = lineScan.next().trim();
String type = lineScan.next().trim();
Object[] obj = { stateNum, state, month };
hm.put(type, obj);
}