Java 这是为什么;如果;a「;死代码;?

Java 这是为什么;如果;a「;死代码;?,java,Java,我有以下代码: /** 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

我有以下代码:

/** 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方法的最开始初始化该值


谢谢。

编辑:我的答案完全错了

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

BRICK\u WIDTH
的值是多少?如果它为零,那么该well将始终执行,并且它将永远不会进入
中,否则

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

当你用大写字母表示砖的宽度时,我假设你把它定义为一个常量(
final
)?然后,除非
BRICK\u WIDTH==0
(或者假设它是
int
),否则
BRICK\u WIDTH/2
永远不会是0。因此,将永远无法访问if下的代码。

您将输入if的唯一时间(我假设BRICK\u WIDTH是一个正整数)为BRICK\u WIDTH=1

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


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

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

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

因此,编写一些语法正确但永远不会使用的代码行是不合逻辑的。这就是为什么作为一种惯例,它被称为死代码

您可能会遇到以下情况:

while(false){}
if(false){}
就你而言

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

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

请包括
BRICK\u WIDTH
的声明和初始化,我认为,您应该给出更广泛的上下文。更多代码。第一个大括号是打字错误吗?因为如果不是,我打赌这就是原因。你应该把
BRICK\u WIDTH/2
放在括号里。或者完全松开
/2
,您不需要它。询问解决方案并发布不清楚和不完整的问题-编辑不正确的问题。如果[BRICK_WIDTH]为零,则在[if]部分中输入,而不会在else部分中输入。否则就是死代码。
BRICK\u WIDTH
不一定非得是
0
才能使
BRICK\u WIDTH/2==0
1/2
也被计算为
0
1/2==0
不是特定于Java的,并且。。。这并不能回答问题。是的,的确如此。因为程序必须独立于砖块宽度的特定值,所以有没有规避的方法。规避什么<代码>砖块宽度
在执行过程中永远不会更改。如果您希望在运行时对
BRICK_WIDTH
进行评估,则不得将其声明为
static final
@MindaugasBernatavičius如果您只想抑制警告,请尝试将
@SuppressWarnings(“deadCode”)
放在它前面的行上?(建议者)明白。“如果”条件不能解决我的问题。我会设法找到另一种方法。谢谢,教授,我不知道你想得到什么。请解释你的答案。