2014-10-09 96 views
0

只顯示最後一項HashMap正在顯示。 我的哈希映射由僱員類型的鍵和類型愛好的值組成,但只顯示最後一個條目正在顯示。HashMap只顯示最後一項

請幫我在此代碼刪除錯誤:

public void addEmployees(int a, HashMap<Employee,Hobby> hMap) 
{ 
    Employee emp = new Employee(); 
    Hobby hob = new Hobby(); 
    Scanner obj = new Scanner(System.in); 
    Scanner obj1 = new Scanner(System.in); 

    for(int i =0; i<a ; i++) 
    { 
     System.out.println("Enter id of employee:"); 
     int num = obj.nextInt(); 
     emp.setEmployeeId(num); 

     System.out.println("Enter name of employee:"); 
     String str = obj1. nextLine(); 
     emp.setName(str); 

     hob.enterHobby(); 
     hMap.put(emp,hob); 
    }  
} 


public static void main(String [] args) 
{ 
    HashMap <Employee,Hobby> employeeName = new HashMap <Employee,Hobby>(); 
    System.out.println("Enter the number of employees you want to add"); 
    Scanner obj = new Scanner(System.in); 
    Scanner obj1 = new Scanner(System.in); 
    int num = obj.nextInt(); 
    EmployeeManag emg = new EmployeeManag(); 
    emg.addEmployees(num,employeeName); 
} 


class Hobby 
{ 
    ArrayList<String> arr = new ArrayList<String>(); 

    public void enterHobby() 
    { 
     Scanner obj1 = new Scanner(System.in); 
     System.out.println("Add Hobbie"); 
     String str = obj1.nextLine(); 
     arr.add(str); 
    } 

    public void displayHobbie() 
    { 
     for(String str : arr) 
     { 
      System.out.println(str); 
     } 
    } 
} 

class Employee 
{ 

    private int employeeId; 
    private String name; 

    public int getEmployeeId() 
    { 
     return employeeId; 
    } 
    public String getName() 
    { 
     return name; 
    } 
    public void setName(String name) 
    { 
     this.name = name; 
    } 

    public void setEmployeeId(int employeeId) 
    { 
     this.employeeId = employeeId; 
    } 
} 
+0

好像你不加入聘用過的員工向您傳遞給你的函數HashMap的,但其他一些哈希表 – Simon 2014-10-09 09:10:38

+0

你有沒有被覆蓋的'equals'和'hashCode'?如果沒有,請了解他們的工作以及HashMap使用它們的方式。 – hyde 2014-10-09 09:10:59

+0

[Java HashMap「put」方法在for循環中可能重複](http://stackoverflow.com/questions/14671164/java-hashmap-put-method-in-a-for-loop) – Niroshan 2014-10-09 09:11:31

回答

3

創建內部for循環每次迭代EMP對象。

public void addEmployees(int a, HashMap<Employee,Hobby> aList) 
     { 
      Scanner obj = new Scanner(System.in); 
      Scanner obj1 = new Scanner(System.in); 

      for(int i =0; i<a ; i++) 
      { 
       Hobby hob = new Hobby(); 
       Employee emp = new Employee(); 
       System.out.println("Enter id of employee:"); 
       int num = obj.nextInt(); 
       emp.setEmployeeId(num); 

       System.out.println("Enter name of employee:"); 
       String str = obj1. nextLine(); 
       emp.setName(str); 

       hob.enterHobby(); 
       hMap.put(emp,hob); 
       }  
      } 
+0

你需要在循環中創建'Hobby',或者修改一個員工的愛好將會改變他們。 – Holloway 2014-10-09 09:14:22

+0

對不起,我錯過了@Trengot – 2014-10-09 09:15:12