【发布时间】:2021-06-01 15:05:54
【问题描述】:
我正在学校应对课堂挑战。我们必须很棒的船班和海港班。我已经完成了所有测试,除了最后一次测试船停在港口的位置。 Harbor 构造函数包含一个 Harbor 数组。
我们必须运行的测试在下面,我编写的代码(用于 Harbor 类)在下面。 新鲜的眼睛很有帮助!
@Test
void testboatStock()
{
Boat boat1 = new Boat("BMC", Color.GREEN);
Boat boat2 = new Boat("BMX", Color.RED);
Boat boat3 = new Boat("UXB", Color.YELLOW);
Harbor stock = new Harbor(5);
assertEquals(null, stock.getBoatAt(0));
assertEquals(null, stock.getBoatAt(1));
assertEquals(null, stock.getBoatAt(2));
assertEquals(null, stock.getBoatAt(3));
assertEquals(null, stock.getBoatAt(4));
// Hint: parkBoatAt is not just a accessor, and not just a mutator
assertEquals(null, stock.parkBoatAt(boat1, 3));
Boat retrievedBoat = stock.parkBoatAt(boat2, 3);
assertEquals(boat1, retrievedBoat);
retrievedBoat = stock.parkBoatAt(boat3, 3);
assertEquals(boat2, retrievedBoat);
Boat[] inventory = stock.getInventory();
assertArrayEquals(new Boat[]{null, null, null, boat3, null}, inventory);
stock.parkBoatAt(boat2, 1);
assertArrayEquals(new Boat[]{null, null, null, boat3, null}, inventory); // this is correct!
assertArrayEquals(new Boat[]{null, boat2, null, boat3, null}, stock.getInventory());
}
public class Harbor
{
private int slipNumber = 0;
private Boat[] boats = new Boat[slipNumber];
public Boat parkBoatAt(Boat boat, int slipNumber)
{
boat = boats[slipNumber];
if(boats[slipNumber]== boat)
{
return boat;
}
else
{
return null;
}
}
public Boat getBoatAt(int slipNumber)
{
if(boats[slipNumber]==null)
{
return null;
}
return boats[slipNumber];
}
public Boat[] getInventory()
{
return boats;
}
public Harbor(int numberOfSlips)
{
boats = new Boat[numberOfSlips];
}
public Harbor()
{
}
}
【问题讨论】:
-
为什么你的
parkBoatAt没有真正停船?方法名称不是说它应该这样做吗? -
我以为我是用boat=boats[slipNumber];
-
这些测试让我很困惑,但基础是 Harbour 最初是空的。去停船时,如果该位置可用或被占用,它将返回。因此,船的初始停放返回该位置是空的。然后接下来的测试显示之前测试中停放的船在那儿等等。