2017-05-28 41 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

相关问题