我正在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++;
}
}
}
答案 0 :(得分:5)
相关的if和else-if检查是:
if (currentRunning == null && currentBlocked == null) {
...
}
else if (currentRunning.CPUburstRemaining != 0 && currentBlocked == null) {
...
}
else if (currentBlocked.IOburstRemaining != 0 && currentRunning == null) {
...
}
您的第一个if-check将检查currentRunning
和currentBlocked
都是null
。
如果不是这种情况,则将检查currentBlocked
是否为null
,并隐式使用currentRunning.CPUburstRemaining
意味着currentRunning
不能为null
(否则,{ {1}}会被给出)。
因此,经过这两次检查,我们知道NullPointerException
再也不能成为currentRunning
了,因为它要么进入了第一个null
语句,要么给出了{{1 }}在第一个if
块的NullPointerException
处。
因此,您currentRunning.CPUburstRemaining
中的else if
部分将 总是 为假,因此IDE将此视为无效代码。< / p>