我必须写下这个方法:
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:<{}>
我无法理解为什么。有人可以帮帮我吗?
答案 0 :(得分:1)
此消息:
java.lang.AssertionError:expected:&lt; {null = 1}&gt;但是:&lt; {}&gt;
表示您希望拥有一个地图,其中一个元素拥有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);
}
但是地图是空的,它永远不会发生:所以你永远不会填充地图。
您可能在代码中遇到了其他问题,但我希望它能帮助您重新修改逻辑。