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”)
放在它前面的行上?(建议者)明白。“如果”条件不能解决我的问题。我会设法找到另一种方法。谢谢,教授,我不知道你想得到什么。请解释你的答案。