Java 带数组的死代码?

Java 带数组的死代码?,java,arrays,multidimensional-array,eclipse-plugin,drjava,Java,Arrays,Multidimensional Array,Eclipse Plugin,Drjava,我在战舰游戏中收到“死亡密码”警告。我正在测试一艘船是否可以被放置,并且我看到如果它可以被放置,它将面对不同的方向 然后,我使用并在检查是否可以使用布尔值放置输入(检查放置方向时设置为true/false),然后使用int的2D数组将所有位置设置为1(开始位置然后+指定方向上的长度(作为参数给定)) 我的.java文件在这里 如果可能的话,请将答案保持在初学者的技能水平(基本i/o和数组,我对逻辑很在行) 编辑 我把它修好了,现在它可以正常工作了 只需将返回放入循环中的if/else for(i

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

然后,我使用并在检查是否可以使用布尔值放置输入(检查放置方向时设置为true/false),然后使用int的2D数组将所有位置设置为1(开始位置然后+指定方向上的长度(作为参数给定))

我的.java文件在这里

如果可能的话,请将答案保持在初学者的技能水平(基本i/o和数组,我对逻辑很在行)

编辑 我把它修好了,现在它可以正常工作了

只需将返回放入循环中的if/else

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

您的循环都会在第一次迭代中返回。例如

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

您的循环都会在第一次迭代中返回。例如

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

在您的代码中

    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;
    }
希望有帮助。

在您的代码中

    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;
    }

希望有帮助。

我想您应该将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;

请注意,我正在使用字符串开关大小写(java 7中新增)并检查意外参数。

我认为您希望将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;

请注意,我正在使用字符串开关大小写(java 7中新增)并检查意外参数。

什么是“死代码”?在你的代码中添加一些注释,否则没有人会读到。只发布给你警告的部分。顺便说一下,你的for循环中有返回。这不会完成对数组的检查。可以使用java.util.Arrays.fill()填充。什么是“死代码”?在你的代码中添加一些注释,否则没有人会读到。只发布给你警告的部分。顺便说一下,你的for循环中有返回。这不会完成对数组的检查。可以使用java.util.Arrays.fill()填充。所以我假设我将递减并将数组索引设置为1,然后返回值?所以我假设我将递减并将数组索引设置为1,然后返回值?