当我的NullPointerException
方法调用submittedAnswers()
方法时,我收到了countAnswers()
,但我检查了HashMap
并且包含了正确的信息。我做错了什么?
if (database.get(i).equals('A'))
错误从^^
开始private int countA, countB, countC, countD; // counters for the different answers
HashMap<Integer, Character> database = new HashMap<Integer, Character>();
public void countAnswers()
{
while(!database.isEmpty())
{
for(int i = 0; i < database.size(); i++)
{
if (database.get(i).equals('A'))
{
countA++;
}
if (database.get(i).equals('B'))
{
countB++;
}
if (database.get(i).equals('C'))
{
countC++;
}
if(database.get(i).equals('D'))
{
countD++;
}
}
}
}
/*
* checks if the student has submitted or not, if the student
* has then it removes the student and submits the new submittion,
* if not than just submits the student. then calls to counts the submitted answers
*/
public void sumbittedAnswers(int studentID, char answer)
{
if(database.containsKey(studentID))
{
database.remove(studentID);
database.put(studentID, answer);
}
else
database.put(studentID, answer);
countAnswers();
}
答案 0 :(得分:2)
散列图上的get不像数组那样工作。
database.get(i)
不是索引i,而是获取Object键。
所以,除非你的学生名字是0,1,2,3,4到1号,否则它不会起作用。
如果你想迭代一个hashmap,你需要做这样的事情。
Iterator it = mp.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
System.out.println(pairs.getKey() + " = " + pairs.getValue());
}
答案 1 :(得分:2)
java.util.Map get(V)
中的方法不返回位置i处的元素(如列表中),但返回具有键== i的值,如果存在则返回null没有钥匙== i。
因此,如果您的地图的大小== 10并且您从0到9编写迭代,那么如果您没有插入任何具有该密钥数的键值,则get方法将返回null。
实施例
map.put(12, 'A');
map.put(22, 'B');
for (int i = 0; i < map.size(); i++)
if(map.get(i).equals('A'))
get将返回null,因为你没有在地图中放入任何带键== 0
的k-v