我有以下代码:
/** 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方法的最开始初始化值。
感谢。
答案 0 :(得分:16)
看起来BRICK_WIDTH
是常量,因此BRICK_WIDTH/2
在编译时是已知的,eclipse知道将采用哪条路径,所以另一条路径是死代码。
答案 1 :(得分:4)
当您使用BRICK_WIDTH
的大写字母时,我假设您将其定义为常量(final
)?然后,除非BRICK_WIDTH == 0
(或1和-1,假设它是int
),BRICK_WIDTH / 2
将永远不会为0.因此永远不会达到if下的代码。
答案 2 :(得分:0)
BRICK_WIDTH
的价值是多少?如果它为零,那么总是执行,它永远不会进入else
。
答案 3 :(得分:0)
@oalsing你是对的但是在BRICK_WIDTH = 1的情况下,eclipse会说else block是死代码并且比较相同的表达式,因为值是硬编码的。
答案 4 :(得分:0)
当您为循环提供的条件永远不会成立时,IDE会调用代码死代码,因此程序永远不会使用条件块中的代码。
因此,编写一些在语法上正确但永远不会被使用的代码行是不合逻辑的。这就是为什么作为一种惯例,它被称为DEAD CODE。
您可能会遇到类似
的情况while(false){}
if(false){}
在你的情况下
private static final int BRICK_WIDTH = 11;
if (BRICK_WIDTH / 2 == 0){}
因为你的变量是最终定义的,所以编译器知道它永远不会改变它的值,因此条件永远不会成立。因此遵循惯例,它被称为死代码。
答案 5 :(得分:-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)));
}
答案 6 :(得分:-1)
如果,(我假设BRICK_WIDTH是一个积极整数)是BRICK_WIDTH = 1时,你唯一一次输入;
由于值/ 2从不为0,但在java 1/2 = 0中,由于它处理整数的方式。
编辑:我不知道为什么它说这是死代码,但这是一个普遍的想法。