JAVA:为什么eclipse调用我的第二个elseif语句a";死代码;?
我正在EclipseIDE上用JAVA编写代码,我的if-else语句有问题。在我的第三个外部“if”中,我有两个“else-if”块,Eclipse正在调用我的第二个“else-if”死代码并跳过它——我使用Eclipse调试器检查了它,但我不知道为什么。Eclipse一直建议我删除第二条else if语句,这会显著更改我的代码 请让我知道,如果有任何其他信息,我可以添加,并提前感谢所有的帮助 代码如下:JAVA:为什么eclipse调用我的第二个elseif语句a";死代码;?,java,eclipse,if-statement,Java,Eclipse,If Statement,我正在EclipseIDE上用JAVA编写代码,我的if-else语句有问题。在我的第三个外部“if”中,我有两个“else-if”块,Eclipse正在调用我的第二个“else-if”死代码并跳过它——我使用Eclipse调试器检查了它,但我不知道为什么。Eclipse一直建议我删除第二条else if语句,这会显著更改我的代码 请让我知道,如果有任何其他信息,我可以添加,并提前感谢所有的帮助 代码如下: public static void eachCycleUni (Queue proce
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++;
}
}
}
public static void eachCycleUni(队列进程,int numProcesses,进程[]所有进程,进程[]原始){
Queue READYPROCESS=new LinkedList();//存储准备就绪的进程
for(int p=0;pNothing或Nothing-->当前正在运行
如果(currentRunning==null&¤tBlocked==null){
....
}
//currentRunning-->,或currentRunning-->currentBlocked,或currentRunning-->终止
else if(currentRunning.cpuburstreaming!=0&¤tBlocked==null){
...
}
//这是ELSE-IF
else if(currentBlocked.ioburstreaming!=0&¤tRunning==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检查将检查currentRunning
和currentBlocked
都是null
如果不是这种情况,您将检查currentBlocked
是否为null
,并使用currentRunning。cpuburstreaming
隐式表示currentRunning
不能为null
(否则将给出null点异常
)
因此,在这两次检查之后,我们知道currentRunning
再也不能是null
,因为它要么输入了第一个if
-语句,要么在第一个else if
-块中的currentRunning.CPUburstRemaining
处给出了一个NullPointerException
因此,您的
&¤tRunning==null
是的一部分,否则如果(currentBlocked.ioburstreaming!=0&¤tRunning==null)
将始终是错误的,因此IDE将其视为死代码。死代码意味着该条件永远不会执行。您是否可以在代码中添加一条注释,说明您的意思是什么?与您当前的问题无关:字符串是不可变的,因此将字符串上的=
检查更改为.equals
(即thisProcess.state.equals(“blocked”)
而不是thisProcess.state==“blocked”
)我注释了“//THIS-IF”-刚刚编辑。我试图通过删除不相关的信息来减少代码-刚刚编辑。这是非常难看的代码,请将其拆分为3-10个函数,也许您会很容易看到错误:P(提示:由于您使用的是eclipse,您可以使用重构工具:)