JAVA:为什么 eclipse 称我的第二个 else-if 语句为"dead code"?



我在Eclipse IDE上写了一个代码,我对我的if-else语句有问题。从我的第三个外部"如果"中,我有两个" else-if"块,而Eclipse正在调用我的第二个" else-if"否则"代码并跳过它 - 我使用Eclipse调试器对其进行了检查,但我不知道为什么。Eclipse一直建议我删除第二个语句,这大大改变了我的代码。

请让我知道是否还有其他我可以添加的信息,并提前感谢您的所有帮助!

这是代码:

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++;
        }
    }
}

相关的if和else-if检查是:

if (currentRunning == null && currentBlocked == null) {
   ...
}
else if (currentRunning.CPUburstRemaining != 0 && currentBlocked == null) {
   ...
}
else if (currentBlocked.IOburstRemaining != 0 && currentRunning == null) {
   ...
}

您的第一个IF-Checks将检查currentRunningcurrentBlocked均为null

如果不是这种情况,您将检查currentBlocked是否为null,并且使用currentRunning.CPUburstRemaining隐式表示currentRunning不能为null(否则会给NullPointerException)。

在这两次检查之后,我们知道currentRunning永远不再是null,因为它要么输入第一个if统计,要么在第一个else if -Block中在currentRunning.CPUburstRemaining上给出了NullPointerException

因此,您的&& currentRunning == null else if (currentBlocked.IOburstRemaining != 0 && currentRunning == null)的一部分将始终是假的,因此IDE将其视为死亡代码。

最新更新