我正在研究HashMap。我的代码会编译,但是当我运行它时,我得不到我应该期待的东西。我的printAllNeighbors
和getNeighbor
代码无效。谁能帮我。我想我明白我在做什么,这就是为什么我感到困惑。
import java.util.HashMap;
public class House
{
private int streetNumber;
private String streetName;
private String owners;
HashMap <String, House> myNeighbors;
public House (int streetNumber, String streetName, String lastName)
{
streetNumber = streetNumber;
streetName = streetName;
lastName = owners;
myNeighbors = new HashMap <String, House> ();
}
public int getStreetNumber()
{
return streetNumber;
}
public String getStreetName()
{
return streetName;
}
public String getLastName()
{
return owners;
}
public void setStreetNumber(int streetNumber)
{
streetNumber =this.streetNumber;
}
public void setStreetName(String streetName)
{
streetName = this.streetName;
}
public void setLastName(String lastName)
{
owners = lastName;
}
public void addNeighbor (String direction, House h)
{
myNeighbors = new HashMap <String, House> ();
}
public House getNeighbor (String direction)
{
if(direction.equals(direction)){
return getNeighbor(direction);
}
else{
return null;
}
}
public void printAllNeighbors()
{
for (String key : myNeighbors.keySet())
{
System.out.println( "\nkey: " + key + " value: " + myNeighbors.get(key));
}
}
public String toString()
{
return "Address: " + streetNumber + " " + streetName + "\nOwner: " + owners;
}
public static void main (String [] args)
{
House whiteHouse = new House (1600, "Pennsylvania Ave", "Obama");
House jerrysHouse = new House (1602, "Pennsylvania Ave", "Mabrito");
House guentersHouse = new House (1604, "Pennsylvania Ave", "Tusch");
House anasHouse = new House (1609, "Pennsylvania Ave", "Posada");
whiteHouse.addNeighbor("east", jerrysHouse);
whiteHouse.addNeighbor("south", guentersHouse);
whiteHouse.addNeighbor("north west", anasHouse);
System.out.println(whiteHouse);
whiteHouse.printAllNeighbors();
System.out.println("****************************** \n" + jerrysHouse);
jerrysHouse.printAllNeighbors();
System.out.println("****************************** \n" + guentersHouse);
guentersHouse.printAllNeighbors();
System.out.println("****************************** \n" + anasHouse);
anasHouse.printAllNeighbors();
}
}
答案 0 :(得分:2)
问题在于您的addNeighbor
方法,每次调用时都会创建一个新的HashMap对象,而不是向地图添加元素。
尝试使用HashMap put方法。类似的东西:
myNeighbors.put(direction,h);
答案 1 :(得分:0)
你想做什么?
public void addNeighbor (String direction, House h)
{
//myNeighbors = new HashMap <String, House> (); This is not correct
myNeighbors.put(direction,h); // use this
}
然后在下面开始初始化地图,
Map <String, House> myNeighbors= new HashMap<String, House>();
答案 2 :(得分:0)
我发现您的代码存在以下问题。首先在构造函数内部 如果你想引用对象字段,你应该使用这个引用,否则它只会更新局部变量。
public House (int streetNumber, String streetName, String lastName)
{
this.streetNumber = streetNumber;
this.streetName = streetName;
this.owners = lastName // Note this you were previously assigning value of owner to lastName
myNeighbors = new HashMap <String, House> ();
}
并使用
myNeighbors.put(direction,h);
而不是
myNeighbors = new HashMap <String, House> ();
答案 3 :(得分:0)
问题在于构造函数和setter方法。您正在进行无效的作业。例如
public House (int streetNumber, String streetName, String lastName)
{
streetNumber = streetNumber;
streetName = streetName;
lastName = owners;
myNeighbors = new HashMap <String, House> ();
}
从上面的构造函数中,您尚未正确初始化字段。 &#39; streetNumber&#39;和&#39; streetNames&#39;是构造函数中的参数,因此将覆盖阴影(隐藏)私有数据字段&#39; streetNumber&#39;和&#39; streetName&#39;,要访问此私人数据字段,您应该使用&#39; this&#39;关键词。而不是 lastName =所有者; 在你的构造函数中,它应该是 owners = lastName; 所以这是修改后的构造函数
public House (int streetNumber, String streetName, String lastName)
{
this.streetNumber = streetNumber;
this.streetName = streetName;
owners = lastName;
myNeighbors = new HashMap <String, House> ();
}
你的setter方法有同样的问题,所以对于setStreetNumber()方法, 改变
streetNumber = streetNumber; to
this.streetNumber = streetNumber;
并对setStreetName()方法执行相同的操作
答案 4 :(得分:0)
我已对您的代码进行了一些更改,以便在某些内容不符合您的期望的情况下运行回复
import java.util.HashMap;
public class House
{
private int streetNumber;
private String streetName;
private String owners;
HashMap <String, House> myNeighbors;
public House (int streetNumber, String streetName, String lastName)
{
this.streetNumber = streetNumber;
this.streetName = streetName;
this.owners = lastName;
this.myNeighbors = new HashMap <String, House> ();
}
public int getStreetNumber()
{
return streetNumber;
}
public String getStreetName()
{
return streetName;
}
public String getLastName()
{
return owners;
}
public void setStreetNumber(int streetNumber)
{
streetNumber =this.streetNumber;
}
public void setStreetName(String streetName)
{
streetName = this.streetName;
}
public void setLastName(String lastName)
{
owners = lastName;
}
public void addNeighbor (String direction, House h)
{
myNeighbors.put(direction,h);
}
public House getNeighbor (String direction)
{
return myNeighbors.get(direction);
}
public void printAllNeighbors()
{
for (String key : myNeighbors.keySet())
{
System.out.println( "\nkey: " + key + " value: " + myNeighbors.get(key));
}
}
public String toString()
{
return "Address: " + streetNumber + " " + streetName + "\nOwner: " + owners;
}
public static void main (String [] args)
{
House whiteHouse = new House (1600, "Pennsylvania Ave", "Obama");
House jerrysHouse = new House (1602, "Pennsylvania Ave", "Mabrito");
House guentersHouse = new House (1604, "Pennsylvania Ave", "Tusch");
House anasHouse = new House (1609, "Pennsylvania Ave", "Posada");
whiteHouse.addNeighbor("east", jerrysHouse);
whiteHouse.addNeighbor("south", guentersHouse);
whiteHouse.addNeighbor("north west", anasHouse);
System.out.println(whiteHouse);
whiteHouse.printAllNeighbors();
System.out.println("****************************** \n" + jerrysHouse);
jerrysHouse.printAllNeighbors();
System.out.println("****************************** \n" + guentersHouse);
guentersHouse.printAllNeighbors();
System.out.println("****************************** \n" + anasHouse);
anasHouse.printAllNeighbors();
}
}