[英]Swapping elements in an array Java
我正在学校应对班级挑战。 我们必须有一艘很棒的船 class 和 Harbour class。 我已经完成了所有测试,除了最后一次测试船停在港口的位置。 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()
{
}
}
public Boat parkBoatAt(Boat newBoat, int slipNumber) { // 1
Boat oldBoat = boats[slipNumber];
boats[slipNumber] = newBoat;
return oldBoat;
}
public Boat[] getInventory() {
return Arrays.copyOf(this.boats, this.boats.length); // 2
}
在您的问题中,它是作为testboatStock()
方法的代码中的注释编写的。 即...
提示:parkBoatAt 不仅仅是一个访问器,也不仅仅是一个突变器
这些要求对我来说并不完全清楚,但我认为方法parkBoat
应该检查索引slipNumber
处的数组boats
中的元素是否为 null。 如果是,则将boat
放入该索引处的数组中并返回boat
,从而表明boat
成功停放。 否则,即如果数组索引已经包含一个boat
,这意味着该位置已被占用,您不能将两艘船停在同一个位置。
public Boat parkBoatAt(Boat boat, int slipNumber)
{
if(boats[slipNumber]== null) // Change here.
{
boats[slipNumber] = boat; // Added this line.
return boat;
}
else
{
return null;
}
}
基本上我只是在您的代码中添加了一行并更改了if
条件。 另请注意,首先检查方法 arguments 可能是一个好主意,即boat
不是 null 并且该slipNumber
介于 0(零)和数组boats
的大小之间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.