JAVA:为什么eclipse调用我的第二个elseif语句a";死代码;?

JAVA:为什么eclipse调用我的第二个elseif语句a";死代码;?,java,eclipse,if-statement,Java,Eclipse,If Statement,我正在EclipseIDE上用JAVA编写代码,我的if-else语句有问题。在我的第三个外部“if”中,我有两个“else-if”块,Eclipse正在调用我的第二个“else-if”死代码并跳过它——我使用Eclipse调试器检查了它,但我不知道为什么。Eclipse一直建议我删除第二条else if语句,这会显著更改我的代码 请让我知道,如果有任何其他信息,我可以添加,并提前感谢所有的帮助 代码如下: public static void eachCycleUni (Queue proce

我正在EclipseIDE上用JAVA编写代码,我的if-else语句有问题。在我的第三个外部“if”中,我有两个“else-if”块,Eclipse正在调用我的第二个“else-if”死代码并跳过它——我使用Eclipse调试器检查了它,但我不知道为什么。Eclipse一直建议我删除第二条else if语句,这会显著更改我的代码

请让我知道,如果有任何其他信息,我可以添加,并提前感谢所有的帮助

代码如下:

public static void eachCycleUni (Queue processes, int numProcesses, Process[] allProcesses, Process[] original) {   
    Queue<Process> readyProcesses = new LinkedList<Process>();      //Stores processes that are ready

    for (int p = 0; p < allProcesses.length; p++) {
        Process currentProcess = allProcesses[p];
        while (terminatedProcesses != numProcesses) {
            //Nothing --> Nothing or Nothing --> currentRunning
            if (currentRunning == null && currentBlocked == null) {
                ....
            }
            //currentRunning --> --, or currentRunning --> currentBlocked, or currentRunning --> terminated
            else if (currentRunning.CPUburstRemaining != 0 && currentBlocked == null) {
                ...
            }
            //THIS ELSE-IF
            else if (currentBlocked.IOburstRemaining != 0 && currentRunning == null) {
                ...
            }
            cycleNumber++;
        }
    }
}
public static void eachCycleUni(队列进程,int numProcesses,进程[]所有进程,进程[]原始){
Queue READYPROCESS=new LinkedList();//存储准备就绪的进程
for(int p=0;pNothing或Nothing-->当前正在运行
如果(currentRunning==null&¤tBlocked==null){
....
}
//currentRunning-->,或currentRunning-->currentBlocked,或currentRunning-->终止
else if(currentRunning.cpuburstreaming!=0&¤tBlocked==null){
...
}
//这是ELSE-IF
else if(currentBlocked.ioburstreaming!=0&¤tRunning==null){
...
}
cycleNumber++;
}
}
}

相关的if和else if检查包括:

if (currentRunning == null && currentBlocked == null) {
   ...
}
else if (currentRunning.CPUburstRemaining != 0 && currentBlocked == null) {
   ...
}
else if (currentBlocked.IOburstRemaining != 0 && currentRunning == null) {
   ...
}
您的第一个if检查将检查
currentRunning
currentBlocked
都是
null

如果不是这种情况,您将检查
currentBlocked
是否为
null
,并使用
currentRunning。cpuburstreaming
隐式表示
currentRunning
不能为
null
(否则将给出
null点异常

因此,在这两次检查之后,我们知道
currentRunning
再也不能是
null
,因为它要么输入了第一个
if
-语句,要么在第一个
else if
-块中的
currentRunning.CPUburstRemaining
处给出了一个
NullPointerException


因此,您的
&¤tRunning==null
的一部分,否则如果(currentBlocked.ioburstreaming!=0&¤tRunning==null)
始终是错误的,因此IDE将其视为死代码。

死代码意味着该条件永远不会执行。您是否可以在代码中添加一条注释,说明您的意思是什么?与您当前的问题无关:字符串是不可变的,因此将字符串上的
=
检查更改为
.equals
(即
thisProcess.state.equals(“blocked”)
而不是
thisProcess.state==“blocked”
)我注释了“//THIS-IF”-刚刚编辑。我试图通过删除不相关的信息来减少代码-刚刚编辑。这是非常难看的代码,请将其拆分为3-10个函数,也许您会很容易看到错误:P(提示:由于您使用的是eclipse,您可以使用重构工具:)