-1

我有以下代码:

/** Width of each brick in pixels */
    private static final int BRICK_WIDTH = 11; 

/** Width of each brick in pixels */
    private static final int BRICK_HEIGHT = 12;

/** Number of bricks in the base of the pyramid */
    private static final int BRICKS_IN_BASE = 14;

public void run () {

    int LowerLeftSide;
    if (BRICK_WIDTH / 2 == 0)
    {
         LowerLeftSide = ((getWidth()/2) - (BRICK_WIDTH*(BRICKS_IN_BASE/2)));
    }else 
         LowerLeftSide = ((getWidth()/2) - (BRICK_WIDTH*(BRICKS_IN_BASE/2-1)));

eclipse 将整个标记if为死代码。我在 run 方法的最开始初始化值。

谢谢。

4

7 回答 7

16

看起来BRICK_WIDTH是一个常量,因此BRICK_WIDTH/2在编译时就知道了,eclipse 知道将采用哪条路径,所以另一个是死代码。

于 2013-02-14T08:11:01.520 回答
4

当您使用大写字母时,BRICK_WIDTH我假设您将其定义为常数(final)?然后,除非BRICK_WIDTH == 0(或 1 并且可能 -1 假设它是一个int),BRICK_WIDTH / 2永远不会是 0。因此永远不会到达 if 下的代码。

于 2013-02-14T08:11:57.053 回答
0

编辑:我的回答完全错误。

的价值是BRICK_WIDTH多少?如果它为零,那么那个井总是执行,它永远不会进入else.

于 2013-02-14T08:10:27.430 回答
0

@oalsing 你是对的,但是在 BRICK_WIDTH = 1 的情况下,eclipse 会说 else 块是死代码并比较相同的表达式,因为值是硬编码的。

于 2013-02-14T08:54:03.777 回答
0

当您为循环提供的条件永远不会为真时,您的 IDE 会调用代码死代码,因此程序永远不会使用条件块中的代码。

因此,编写一些语法正确但永远不会使用的代码行是不合逻辑的。这就是为什么按照惯例将其称为 DEAD CODE 。

你可能会遇到类似的情况

while(false){}
if(false){}

在你的情况下

private static final int BRICK_WIDTH = 11;
if (BRICK_WIDTH / 2 == 0){}

因为你的变量是最终定义的,所以编译器知道它永远不会改变它的值,因此条件永远不会是真的。所以按照惯例,它被称为死代码。

于 2013-02-14T09:46:13.687 回答
-1
{   
int LowerLeftSide;
if ((BRICK_WIDTH / 2) == 0) {
     LowerLeftSide = ((getWidth()/2) - (BRICK_WIDTH*(BRICKS_IN_BASE/2)));
} else {
     LowerLeftSide = ((getWidth()/2) - (BRICK_WIDTH*(BRICKS_IN_BASE/2-1)));
}
于 2013-02-14T08:09:52.513 回答
-1

如果(我假设 BRICK_WIDTH 是一个正整数)您将输入的唯一时间是 BRICK_WIDTH = 1;

由于值 / 2 从不为 0,但在 java 中 1/2 = 0,因为它是处理整数的方式。

编辑:我不知道为什么它说它是死代码,但这是一个普遍的想法。

于 2013-02-14T08:13:49.867 回答