2017-03-24 36 views
-3

我創建了一個簡單的程序,它使用HashMap在屏幕上輸出值。 這是我不明白的部分。當我在主類中創建一個「Person」對象,並使用Person的對象調用方法「addPerson」時,程序將打印Peter 10 points。 但是,當我嘗試從另一個班級調用方法時(在我的「幫助」中),我得到一個結果 Peter null points。 爲什麼「addPersonDifferentMethod」不會將任何參數傳遞給HashMap?有什麼辦法可以實現類似於我在這裏嘗試做的事情嗎?這意味着調用從另一個類中一個類中的方法?(不使用靜態)在另一個類中調用另一個類的方法。幫我理解邏輯

主要類

public static void main(String[] args) { 
    Person name = new Person(); 
    name.addPerson("Peter",10); 
    System.out.println("Peter " + name.getMap().get("Peter") + " points"); 

    Person name2 = new Person(); 
    Help help = new Help(); 
    help.addPersonDifferentMethod(); 
    System.out.println("Peter " + name2.getMap().get("Peter") + " points"); 
} 

類人

public class Person { 

    private HashMap<String, Integer> map = new HashMap<String, Integer>(); 

    public void addPerson(String name, int points){ 
     map.put(name, points); 
    } 

    public HashMap<String, Integer> getMap(){ 
     return this.map; 
    } 
} 

類幫助

public class Help { 
    Person name2 = new Person(); 

    public void addPersonDifferentMethod(){ 
     name2.addPerson("Peter", 10); 
    } 
} 
+5

只是因爲你叫'Person'在主類,而'你的'Help'類中的Person都是「name2」,並不意味着它是相同的'Person'。 – azurefrog

+0

換句話說,'Main'中的這個「name2」'name2.getMap()。get(「Peter」)'和name2不同。 '幫助' – csmckelvey

+0

因爲name和name2是不同的對象。 –

回答

0

addPersonDifferentMethod方法Help類對不同的起作用對象比您在main中定義的對象。如果要達到類似的結果,則需要將Person對象的引用傳遞給addPersonDifferentMethod方法,例如,修改Help類:

class Help { 

    public void addPersonDifferentMethod(Person name2){ 
     name2.addPerson("Peter", 10); 
     name2.addPerson("Martin", 15); 
    } 
} 

而且,請從main方法與您已創建Person對象:

Person name = new Person(); 
name.addPerson("Peter",10); 
System.out.println("Peter " + name.getMap().get("Peter") + " points"); 

Person name2 = new Person(); 
Help help = new Help(); 
help.addPersonDifferentMethod(name2); 
System.out.println("Peter " + name2.getMap().get("Peter") + " points"); 
+0

謝謝,我不知道我可以傳遞對象引用。 – user2491469