だけのカップルが、それ以上が存在することができます::これは私の戦いボードのtoStringメソッドである
の冒頭で
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 = new Square()
の代わりにsquare = squares[i][j]
と書く方が論理的です。
コードで何が起こっているかを確認するには、デバッガを使用することをおすすめします。
**ループ反復後に 'square 'に' new Square() 'が割り当てられていることを正しく理解していますか?最初の反復の前にはどのような価値がありますか?また、 'ship'変数には何が入っていますか? –
squareとshipはprivateインスタンス= nullです。 Shipは、長さ、ヒット回数、開始行/列(左上隅)、方向を返します。スクエアはそれが船を持っているかどうか、それがヒットしたかどうかを知っています。 – Levy
私は 'ship'が' null'であるとは思っていません。そうでなければ 'ship.getLength()'は例外をスローします。代わりに '' 1 ''を出力に追加します。とにかく、コードは不完全です。関連するすべてのコードを表示してください。 –