2017-05-28 53 views
0

我必須寫方法:填補HashMap中與作爲參數傳遞的組的元素

public Map<Robot, Integer> PickedUpForEachRobot(Set<Stuff> pickedUp) 

其具有通過該組作爲參數傳遞給迭代並具有計數的東西量拾取由每個機器人並將其與其實例相關聯。

我做了什麼是這樣的:

public Map<Robot, Integer> PickedUpForEachRobot(Set<Stuff> pickedUp) { 
    final Map<Robot,Integer> map = new HashMap<>(); 
    for(Stuff stuff : pickedUp){ 
     Integer quantity = map.get(stuff.getPicker()); 
     if(quantity!=null){ 
      map.put(stuff.getPicker(), quantity); 
     } 
    } 
    return map; 

} 

我也有其他類:

public class Stuff { 

private Robot picker; 

public Robot getPicker() { 
    return this.picker; 
} 

}

和:

public class Robot { 

private Set<Stuff> bunchOfStuff; 

public Set<Stuff> getBunchOfStuff() { 
    return this.bunchOfStuff; 
} 

}

爲此我試圖合成,所以我希望我可以清楚無論如何。

所以我的問題是,當我做這個方法測試:

@Test 
public void testRaccoltoPerMezzo() { 
    Statistics stats = new Statistics(); 
    Stuff stuff1 = new ball(); 
    Stuff stuff2 = new legoPiece(); 
    Set<Stuff> set = new HashSet<>(); 
    set.add(stuff1); 
    assertEquals(1,set.size()); 
    Map<Robot,Integer> map = new HashMap<>(); 
    map.put(stuff1.getPicker(),1); 

    assertEquals(map, stats.PickedUpForEachRobot(set)); 

} 

失敗,它給我說:​​

java.lang.AssertionError: expected:<{null=1}> but was:<{}> 

,我不明白爲什麼。有人能幫助我嗎?

回答

1

此消息:

java.lang.AssertionError: expected:<{null=1}> but was:<{}>

意味着你期望有一個地圖有一家擁有一null關鍵的一個元素和相關價值1但你有一個空的地圖。

根據您的要求和實際地圖,您創建的預期地圖似乎不夠充足。 關於在實現中填充地圖,我注意到至少這一點根本不合邏輯。

這裏:

final Map<Robot,Integer> map = new HashMap<>(); 
for(Stuff stuff : pickedUp){ 
    Integer quantity = map.get(stuff.getPicker()); 
    if(quantity!=null){ 
     map.put(stuff.getPicker(), quantity); 
    } 
} 

Integer quantity = map.get(stuff.getPicker());將一如既往值量null當你從一個空映射得到它:map = new HashMap<>();,你填充地圖僅當數量不null

if(quantity!=null){ 
     map.put(stuff.getPicker(), quantity); 
} 

但它不會發生,因爲地圖是空的:所以你永遠不會填充地圖。

您可能在代碼中存在其他問題,但我希望它能幫助您重新修改您的邏輯。

+0

首先感謝您的回答。你對如何解決這種情況有任何想法嗎?我問這是因爲我已經知道那條線總是返回null,但是我一直試圖用這種方法試圖解決這個問題太久了 – Flavio

+0

不客氣。我不確定要了解您的需求。我認爲在PickedUpForEachRobot()中,這個想法是在Set of Stuff上迭代並獲取picker的數量。然後用這個數量更新地圖。但問題是我沒有看到模型中的數量。 – davidxxx

+0

你認爲有可能問題是我必須填寫通過Stuff元素參數傳遞的集合嗎?因爲當我做stuff.getPicker()它總是讓我空。 – Flavio

相關問題