战舰坚持战斗板实施

时间:2017-04-23 17:00:06

标签: java oop

我们最近有点学习面向对象编程,并且很快就会有一个项目,所以我对OOP不太熟悉。但是,我们被分配了一个创建战舰游戏的项目。

我创建了一个船,广场和战斗板类。我测试了所有这三个,除了在Battleboard类上的一个方法之外,所有测试都已通过。为了测试每个类,我使用了toString方法。这是我的战斗板toString方法:

for (int i = 0; i < squares.length; i++) {

1 个答案:

答案 0 :(得分:0)

我发现了几个问题,因为代码仍然不完整可能会有更多问题:

一个。在

的最开始
public boolean addShip(int length, boolean isHorizontal, int startRow, int startCol) { 

square = new Square();

检查船只是否存在于您添加它的广场上似乎合乎逻辑,而是检查它是否存在于全新的广场中。我们没有Square代码,但我认为它最初没有发货。

B中。在同一方法中,有以下代码:

    if (isHorizontal == true) {
        ship = new Ship(length, isHorizontal, startRow, startCol);
        for (int i = 0; i < ship.getLength(); i++) {
            if (startCol > numberOfColumns) {
                return false;
            } else {
                square.addShip(ship);
                startCol++;
            }
        }
    }

因此,船舶被重复添加到与董事会无关的同一个全新广场。之后,该广场不会被添加到任何地方,现在无论如何都会被使用。

我不知道如何解决这个问题,但可能在调用此方法之前,所有方块都应该被初始化,在此方法中不应该创建方块;相反,你需要找到一个对应于当前迭代的方块

℃。以下代码

        } else if (!square.hasBeenHit() && square.hasShip()) { 
        //Returns length of ship if there is a ship that hasn't been hit
            if (ship.getLength() == 1) {
                toString += "1 ";
            } else if (ship.getLength() == 2) {
                toString += "2 ";
            } else if (ship.getLength() == 3) {
                toString += "3 ";
            } else if (ship.getLength() == 4) {
                toString += "4 ";
            }
        }

在所有迭代中使用相同的ship,因此它在所有迭代中的行为方式相同(追加1)。 正确的做法是找到属于当前广场(i,j)的船只,如果它存在,并使用它

d。每个循环都会创建一个全新的正方形,尽管你正在迭代正方形! square = squares[i][j]而不是square = new Square() 更合乎逻辑。

我建议您使用调试器来查看代码中发生的情况。