数组的死代码?

时间:2014-01-23 15:07:39

标签: java arrays multidimensional-array eclipse-plugin drjava

我在战舰游戏中收到“死码”警告。我正在测试是否可以放置一艘船,并且如果可以放置该船,我将看到该船将面对的不同方向。

然后我使用In.class获取输入并在检查它是否可以放置布尔值(在检查放置方向时设置为true / false)我使用一个二维的int数组并将所有位置设置为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;
 }
}

3 个答案:

答案 0 :(得分:4)

在您的代码中,

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

循环中的递减永远不会执行,因为在循环的第一次迭代中,您的方法返回一个值,所以永远不要进行第二次迭代。实际上你的代码与:

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

希望它有所帮助。

答案 1 :(得分:1)

你的循环都在第一次迭代中返回。 E.g。

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--,永远不会被执行。

答案 2 :(得分:1)

我认为您希望将return语句从for循环内部移动到if(canPlace == true)子句的末尾。我还建议你对代码进行去杂乱以使其更具可读性:

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中的新增内容)并检查意外的参数。