首页 > 解决方案 > JAVA:为什么 Eclipse 将我的第二个 else-if 语句称为“死代码”?

问题描述

我在 Eclipse IDE 上用 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++;
        }
    }
}

标签: javaeclipseif-statement

解决方案


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

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

您的第一个 if-checks 将检查 bothcurrentRunningcurrentBlockedare both null

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

因此,在这两个检查之后,我们知道它currentRunning永远不会再存在null了,因为它要么进入了第一个语句,要么在第一个块中if给出了 a 。NullPointerExceptioncurrentRunning.CPUburstRemainingelse if

正因为如此,你的&& currentRunning == null部分else if (currentBlocked.IOburstRemaining != 0 && currentRunning == null)永远是虚假的,所以 IDE 将其视为死代码。


推荐阅读