gpt4 book ai didi

java - HashMap 无论如何都返回 Null

转载 作者:行者123 更新时间:2023-12-01 11:27:50 24 4
gpt4 key购买 nike

我在概念化这个问题时遇到了一些困难,因此如果它含糊不清或已在其他地方解决,我提前道歉。

无论如何,我有一个名为 Board 的大类。板上是ArrayList<Space> sList ,板上的空间列表。每个空间是 bList ,一个 HashMap,表示哪些空间与该特定空间接壤。 init()方法Board例如,创建所有空间并赋予它们边界

sList.add(new Location(7, true, "Police Station"));
sList.get(3).addToBList(sList.get(7)); //adds "Police Station" to the bList at sList index 3

但是,如果在 Board 中,我尝试查看 bList对于某个 Space,它总是返回 null,就像我从未向 bList 添加任何内容一样。然而,如果我查看 Space 本身,bList 总是充满了项目。所以,基本上,我试图从另一个类中的类调用变量,并且如果我在另一个类本身中,它只显示非空值 - 有什么想法(或澄清问题)吗?

编辑:我想我要澄清我自己的问题。

如果 Space 有一个返回 bList(这是一个 hashMap)的 getBList() getter,并且在 Board 中我向该 bList 添加了某些值,为什么当我在 Board 中调用 getBList() 时 bList 返回“{}”?

此外,这就是 Arrow 的全部内容(见底部)。

代码本身:

public class Board {

ArrayList<Space> sList;
ArrayList<Player> pList;
int moveCount = 0;
ArrayList<Space> visited = new ArrayList<Space>();

public Board(int p, int oldGod){ //num of players, Old God
sList=new ArrayList<Space>();
pList=new ArrayList<Player>();
init();

move(sList.get(0), sList.get(34));

}

public Space move(Space start, Space end){
visited.add(start);
Iterator it = start.bList.entrySet().iterator();//this is where the trouble starts. bList returns only {}
if(start.equals(end)){
System.out.println("Here! You've arrived at " + start);
}
else{System.out.println("Time to debug. You're at " + start);
while(it.hasNext()){
Map.Entry pair = (Map.Entry)it.next();
for(Space s : visited){
if(pair.getValue().equals(s)){
}
else{

return move((Space)pair.getValue(), end);
}

}
}
}
return start;
}

private void init() {
sList.add(new Location(1, true, "Ma's Boarding House"));
sList.add(new Location(2, true, "South Church"));
sList.get(1).addToBList(sList.get(2));
//etc...
}
}


public abstract class Space {
int district;
String name;
HashMap<Arrow, Space> bList = new HashMap<Arrow, Space>();
ArrayList<Creep> cList = new ArrayList<Creep>();
ArrayList<Player> pList = new ArrayList<Player>();

public String toString() {
return name;
}

public void addToBList(Space s, Arrow a){
bList.put(a, s);
}

public void borderList(){ //in here it always sees bList as full of variables
Iterator it = bList.entrySet().iterator();
while(it.hasNext()){
Map.Entry pair = (Map.Entry)it.next();
System.out.println(this + ": " + pair.getKey() + "-> " + pair.getValue()); //arrow towards
it.remove();
}
}



}


public class Arrow {

int color;

public Arrow(int c){
color=c;
}

public String toString(){
if(color==0)
return "Black";
else if(color==1)
return "White";
else if(color==2)
return "Both";
else
return "None";
}

}

最佳答案

我建议您阅读 Object.hashCode() 的 Javadoc

Returns a hash code value for the object. This method is supported for the benefit of hash tables such as those provided by HashMap.

Object.equals()

除非您覆盖它们,否则两个对象都不相同,除非它们是同一对象,无论您在其中设置什么值。

对于键,您必须实现这两种方法。对于 map 的值,您可能只实现 equals(Object),如果您不使用它,则不实现它。

顺便说一句:我建议您阅读 java.langjava.util 中所有类的 Javadoc

关于java - HashMap 无论如何都返回 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30673622/

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