2015-07-10 73 views
0

我正在使用HashMap。我的代码会编译,但是当我运行它时,我没有得到我应该期待的。我的代码为printAllNeighborsgetNeighbor不起作用。谁能帮我。我想我明白我在做什么,这就是为什么我很困惑。HashMap问题,打印邻居

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

我想你需要告诉我们你得到了什么,以及你的期望。 – ThisClark

+0

我得到空0,业主0,我期待得到白宫,jerrysHouse,guentersHouse等的邻居。 –

+0

嗨@Deborah_Watson如果任何答案已解决您的问题,请点击复选标记考虑[接受它](http://meta.stackexchange.com/q/5234/179419)。这向更广泛的社区表明,您已经找到了解决方案,并为答复者和您自己提供了一些声誉。没有义务这样做。 – gastonmancini

回答

2

问题是与你的addNeighbor方法,您要创建一个新的HashMap对象每次调用它,而不是将元素添加到地图的时间。

尝试使用HashMap put方法。例如:

myNeighbors.put(direction,h); 
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>(); 
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>(); 
0

问题是与你的构造和setter方法。你正在做没有任何作用的作业。例如,

public House (int streetNumber, String streetName, String lastName) 
{ 
    streetNumber = streetNumber; 
    streetName = streetName; 
    lastName = owners; 
    myNeighbors = new HashMap <String, House>(); 
} 

从上面的构造函数,你还没有正确地初始化字段。 'streetNumber'和'streetNames'是你的构造函数中的参数,所以在影子上隐藏(隐藏)私有数据字段'streetNumber'和'streetName',要访问这个私有数据字段,你应该使用'this'关键字。而不是 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做同样的()方法

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(); 
    } 
}