繁体   English   中英

交换数组中的元素 Java

[英]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
}
  1. 您需要返回数组中元素的先前值。
  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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM