Hashmap remove function returns null 即使密钥存在于其中

Hashmap remove function returns null even thou the key is present in it

此代码应将 window 上的所有可用 space 放入具有字符串键的哈希映射中。那么所有被蛇占用的space都应该从hashmap中移除,但是remove函数returns为null。当 spring 出散列图时,蛇的位置键就会显示出来。这里有什么问题?

HashMap<String, Integer> cells = new HashMap<>();
for (int i = 0; i <= WINDOW_WIDTH - UNIT_SIZE; i += UNIT_SIZE) {
    for (int j = 0; j <= WINDOW_HEIGHT - UNIT_SIZE; j += UNIT_SIZE)
        cells.put(i + " " + j, 1);

    }
    System.out.println("map"+cells);
    for (Rectangle s : snake){
        System.out.println((int)s.getX() + " " + (int)s.getY());
        System.out.println(cells.remove(s.getX() + "-" + s.getY()));
    }

这是控制台输出

map{0 0=1, 80 160=1, 80 120=1, 0 160=1, 80 200=1, 80 80=1, 0 120=1, 80 40=1, 160 120=1, 80 0=1, 200 120=1, 40 40=1, 40 0=1, 200 0=1, 120 200=1, 160 200=1, 200 200=1, 160 160=1, 40 200=1, 160 80=1, 40 120=1, 200 40=1, 40 160=1, 120 120=1, 200 80=1, 120 160=1, 200 160=1, 40 80=1, 160 0=1, 0 200=1, 120 0=1, 120 40=1, 0 40=1, 120 80=1, 160 40=1, 0 80=1}
0 0
null
0 40
null
0 80
null
0 120
null

您将 s.getX()s.getY() 转换为 int 这一事实表明它们不是 int。因此,您尝试删除的密钥实际上并不在 Map.

为了删除正确的键,您还应该在对 remove().

的调用中将 s.getX()s.getY() 转换为 int

哦,还要把“-”改成“ ”,这样按键才能匹配。

System.out.println(cells.remove((int)s.getX() + " " + (int)s.getY()));