HashMap的简单方法似乎是正确的,但它不起作用

时间:2014-10-22 21:47:55

标签: java class oop methods hashmap

当我的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();
}

2 个答案:

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