hashmap remove函数返回null,即使其中存在键

6jjcrrmo  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(249)

**结案。**此问题不可复制或由打字错误引起。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

5天前关门了。
改进这个问题
这段代码应该将窗口上的所有可用空间放入带有字符串键的hashmap中。然后,应该从hashmap中删除snake占用的所有空间,但是remove函数返回null。当跳出hashmap时,snake的位置键会显示它。这里有什么问题?

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
fjaof16o

fjaof16o1#

事实上,你正在铸造 s.getX() 以及 s.getY()int 表明他们不是 int . 因此,您要删除的密钥实际上不在 Map .
为了移除正确的键,您还应该 s.getX() 以及 s.getY()int 在召唤中 remove() .
哦,还要把“-”改成“,”以便键匹配。

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

相关问题