我在战舰游戏中收到“死码”警告。我正在测试是否可以放置一艘船,并且如果可以放置该船,我将看到该船将面对的不同方向。
然后我使用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;
}
}
答案 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中的新增内容)并检查意外的参数。