我在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将检查currentRunning
和currentBlocked
均为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将其视为死亡代码。