gpt4 book ai didi

java - .get(key) 不会给我 Hashmap 中的值

转载 作者:行者123 更新时间:2023-12-02 06:58:18 25 4
gpt4 key购买 nike

我对编程有点陌生,想尝试制作一个比我以前的游戏更难的盒子式 2d 游戏用于学习。唉,我还是个新手,所以如果可能的话请简化你的答案

我已经玩了几个小时的 HashMap 了,似乎无法弄清楚为什么向 java 提供我的 key 不会给我返回它的值。

package main;

public class Point {

private int x;
private int y;

public Point(int x, int y) {
this.x = x;
this.y = y;
}

public int getX() {
return this.x;
}
public int getY() {
return this.y;
}
}


public Map<Point, Integer> Blocks = new HashMap<Point, Integer>();

int x = 0;
int y = 0;

while (active == true) {

Point Apple = new Point(x, y);
Blocks.put(Apple, 1);

if (x <= 800) {
x += 32;
} else {
x = 0;
y += 32;
}

if (y > 600) {
active = false;
}
}

MouseX = (Mouse.getX() / 32) * 32;
MouseY = (Mouse.getY() / 32) * 32;
Point rawr = new Point(MouseX, MouseY);

if (Blocks.containsKey(rawr)) {
y = Blocks.get(rawr);
}

结果我得到 y = 0 而不是 y = 1。感谢您提供的任何帮助。

最佳答案

你没有遵守java最基本的契约:.equals()/.hashCode()契约(Contract)。

您需要在类 Point 中覆盖它们。一般来说,SO 和网上有很多例子。

现在,为什么这适用于这里是因为您尝试看看 blocks 是否有效。 map 包含Point你已经实例化了。但输入 HashMap ,您使用的,严重依赖 .equals().hashCode() 。它.contains(x)当且仅本地图有一个键 k这样k.equals(x) .

对于您的类(class):

@Override
public int hashCode()
{
return 31 * x + y;
// If using Java 7, this can be:
// returns Objects.hash(x, y);
}

@Override
public boolean equals(final Object o)
{
// No object instance is equal to null
if (o == null)
return false;
// If the object is the same, this is true
if (this == o)
return true;
// If not the same object class, false
if (getClass() != o.getClass())
return false;

final Point other = (Point) o; // safe to cast since getClass() == o.getClass()
return x == other.x && y == other.y; // test instance member equality
}

关于java - .get(key) 不会给我 Hashmap<Point, Integer> 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17015537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com