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()));
此代码应将 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()));