HashMap问题,打印邻居

时间:2015-07-10 03:29:42

标签: java hashmap

我正在研究HashMap。我的代码会编译,但是当我运行它时,我得不到我应该期待的东西。我的printAllNeighborsgetNeighbor代码无效。谁能帮我。我想我明白我在做什么,这就是为什么我感到困惑。

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

5 个答案:

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