0

戦艦ゲームで「デッド コード」警告が表示されます。船を配置できるかどうかをテストしており、配置できる場合に船が向く方向が異なることを確認しています。

次に、 In.classを使用して入力を取得し、ブール値 (配置の方向を確認するときに true/false に設定) で配置できるかどうかを確認した後、int の 2D 配列を使用し、すべての場所を 1 に設定します (開始場所、 + 指定された方向の長さ (パラメーターとして指定)

私の.javaファイルはここにありますShipProperties.java

可能であれば、初心者のスキル レベルへの回答を維持してください (基本的な I/O と配列、ロジックはかなり得意です)。

編集

修正したところ、意図したとおりに動作するようになりました。

リターンをループ内の if/else に入れるだけです

for(int i = length; i > 0; i--)
{
 grid[startLocX][startLocY + i] = 1;
 if(i == 0)
 {
   return grid;
 }
}
4

3 に答える 3

4

あなたのコードでは、

    for(int i = length; i > 0; i--)                               //Dead Code
    {
      grid[startLocX - i][startLocY] = 1;
      return grid;
    }

ループの最初の反復でメソッドが値を返すため、ループ内のデクリメントは実行されないため、2 回目の反復を実行しないでください。実際、あなたのコードは次と同じです:

    if(length > 0)                              
    {
      grid[startLocX - length][startLocY] = 1;
      return grid;
    }

それが役に立てば幸い。

于 2014-01-23T15:25:53.777 に答える
1

if(canPlace == true)return ステートメントを for ループ内から句の最後に移動したいと思います。コードを少し整理して読みやすくすることもお勧めします。

if(canPlace == true)
{
    for(int i = length; i > 0; i--)                            
    { // a little less efficient perhaps (will be optimized by JIT if it's critical), but a lot more readable for sure.
        switch (ans) {
        case "Left":
            grid[startLocX - i][startLocY] = 1;
            break;
        case "Down":
            grid[startLocX][startLocY - i] = 1;
            break;
        case "Right":
            grid[startLocX + i][startLocY] = 1;
            break;
        case "Up":
            grid[startLocX][startLocY + i] = 1;
            break;
        default:
            throw new IllegalArgumentException("huh? " + ans);
        }
    }
}
// no need for an else clause since you return the grid anyway
return grid;

string switch-case (Java 7 の新機能) を使用していることに注意して、予期しない引数をチェックしてください。

于 2014-01-23T16:13:49.127 に答える
1

ループはすべて最初の反復で返されます。例えば

for(int i = length; i > 0; i--)
{
    grid[startLocX - i][startLocY] = 1;
    return grid;
}

と同じことをします

int i = length
if(i > 0)
{
    grid[startLocX - i][startLocY] = 1;
    return grid;
}

あなたのループは不要です。実際のデッド コードはi--、決して実行されません。

于 2014-01-23T15:25:10.457 に答える