Ale*_*ang -3 java eclipse if-statement
我正在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++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
相关的if和else-if检查为:
if (currentRunning == null && currentBlocked == null) {
...
}
else if (currentRunning.CPUburstRemaining != 0 && currentBlocked == null) {
...
}
else if (currentBlocked.IOburstRemaining != 0 && currentRunning == null) {
...
}
Run Code Online (Sandbox Code Playgroud)
您的第一个if-check将同时检查currentRunning和currentBlocked两者null。
如果不是这种情况,则将检查是否currentBlocked为,null并且使用currentRunning.CPUburstRemaining隐式表示currentRunning不能为null(否则NullPointerException将给出a)。
这两项检查后,我们因此知道currentRunning永远不可能null了,因为它要么已经进入了第一个if语句来,或将给予一个NullPointerException在currentRunning.CPUburstRemaining第一else if嵌段。
因此,您的&& currentRunning == null部分else if (currentBlocked.IOburstRemaining != 0 && currentRunning == null)将始终是错误的,因此IDE将此视为无效代码。