我试图编写一个函数来接收一个对象及其包含的ArrayList。已传递的对象应该使其relationship
值增加10并且每个ArrayList中的其他对象的relationship
值应增加3.我已经多次重写了我的代码,但我还是无法输出我想要的值。下面,我已经包含了我的函数,我正在使用的测试方法以及输出值。任何人都可以指出我哪里错了吗? (编辑:测试方法旁边的注释中的预期值。)
@BeforeEach
public void setUp() throws Exception {
baratheons = new ArrayList<Lord>();
baratheons.add( new Lord("Robert", 15));
baratheons.add( new Lord("Renly", -5));
baratheons.add( new Lord("Stannis", 30));
starks = new ArrayList<Lord>();
starks.add( new Lord("Robb", -60));
starks.add( new Lord("Eddard", 0));
starks.add( new Lord("Jon", 90));
}
@AfterEach
public void tearDown() throws Exception {
baratheons = null;
starks = null;
}
public void testGratefulLord() {
int x = baratheons.get(0).getRelationship();
System.out.println("\n This marks the start of testGratefulLord -");
baratheons.get(0).giveFief(baratheons, baratheons.get(0));
assertEquals(baratheons.get(0).getRelationship(), (x+=10));
//expected value for Robert.getRelationship is 25
}
@Test
public void testAlliesApprove() {
int x = starks.get(1).getRelationship();
System.out.println("\n This marks the start of testAlliesApprove -");
starks.get(0).giveFief(starks, starks.get(0));
assertEquals(starks.get(1).getRelationship(), x+3);
//expected value for Eddard.getRelationship is 3
}
来自Lord.java的
public void giveFief(ArrayList<Lord> arrayListLord, Lord lordGivenFief) {
lordGivenFief.relationship += 10;
ArrayList<Lord> temp = new ArrayList<Lord>();
temp.add(lordGivenFief);
arrayListLord.remove(lordGivenFief);
for (Lord l : arrayListLord) {
l.setRelationship(relationship+=3);
System.out.printf("%s has a relationship of %d. \n", l.lordName, l.relationship);
}
}
输出值
这标志着testGratefulLord的开始 -
Renly的关系为28.
斯坦尼斯的关系为31.
这标志着testAlliesApprove的开始 -
爱德华的关系是-47。Jon的关系为-44。
答案 0 :(得分:1)
ArrayList中的每个其他对象的关系值应增加3
但那并不是你在做什么。当你打电话
baratheons.get(0).giveFief(baratheons, baratheons.get(0))
this
和lordGivenFief
都指Lord("Robert", 15)
。
您的列表以
开头arrayListLord: Lord("Robert", 15)
Lord("Renly", -5)
Lord("Stannis", 30)
然后将“Robert”递增10并将其从列表中删除:
temp: Lord("Robert", 25)
arrayListLord: Lord("Renly", -5)
Lord("Stannis", 30)
在循环中,然后执行l.setRelationship(relationship+=3)
,这在逻辑上与
this.relationship = this.relationship + 3
l.setRelationship( this.relationship )
因此,在第一次迭代后,值为
temp: Lord("Robert", 28)
arrayListLord: Lord("Renly", 28)
Lord("Stannis", 30)
因此,在第二次迭代后,值为
temp: Lord("Robert", 31)
arrayListLord: Lord("Renly", 28)
Lord("Stannis", 31)
为您提供您看到的输出:
This marks the start of testGratefulLord -
Renly has a relationship of 28.
Stannis has a relationship of 31.
如果你想将每个对象的值增加3,你应该已经完成了
l.setRelationship(l.getRelationship() + 3)
那样,结果就是
temp: Lord("Robert", 25)
arrayListLord: Lord("Renly", -2)
Lord("Stannis", 33)