2017-04-23 104 views
-2

我们最近有点学习了面向对象编程,并且已经有了一个项目,因此我不太熟悉OOP。不过,我们被分配了一个创建战舰游戏的项目。战列舰卡在战斗板实施

我创造了一艘船,方形和战斗板类。我已经测试了所有三种测试,并且所有测试都通过了,除了在测试板上的一种测试方法。为了测试每个类,我使用了toString方法。这是我在战斗中板的toString方法:

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

我是否正确理解在**循环迭代之后'square'被分配了'new Square()** **?在第一次迭代之前它有什么价值?另外,“船”变量是什么? –

+0

平方和船是私人实例= null; 船舶返回其长度,撞击次数,开始列/行(左上角)和方向。 Square知道它是否有一艘船并且它是否被击中。 – Levy

+0

我怀疑'ship'是'null',否则这个'ship.getLength()'会抛出异常;而是附加'“1”'输出。无论如何,代码是不完整的;你能否显示所有相关的代码? –

回答

0

只是一对夫妇的,我发现问题,可以有更多的代码仍然是不完整的:

A.在

最开始
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++; 
      } 
     } 
    } 

那么这艘船被反复添加给不相关的板同一品牌的新广场。后来,那个广场不会被添加到任何地方,现在也无法使用。

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

C.下面的代码

 } 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()会更合乎逻辑。

我建议您使用调试器来查看代码中发生了什么。

+0

我很困惑你说C是什么意思?for循环不会照顾广场的位置吗?如果我添加square = squares [I] [j] – Levy

+0

在C'square = new Square();'创建一个全新的对象,它不知道当前迭代的任何内容,'i'和'j'。在C上:可能'square'数组不会被初始化。我建议在创建电路板时初始化电路板上的所有方块。 –

+0

我删除了所有'square = new Square();'并添加了正方形[I] [j] = new Square();初始化他们,但输出仍然是“1 1 1 1”而不是“ - - - - ”或“2 - - - ”而不是“2 2 - - ” – Levy