JAVA: Почему Eclipse называет мое второе утверждение «if-if» «мертвым кодом»? - PullRequest
0 голосов
/ 21 марта 2019

Я пишу код в JAVA для Eclipse IDE, и у меня возникла проблема с моим оператором 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++;
        }
    }
}

1 Ответ

5 голосов
/ 21 марта 2019

Соответствующие проверки 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.CPUburstRemaining неявно означает, что currentRunning не может быть null (в противном случае было бы дано NullPointerException).

После этих двух проверок мы знаем, что currentRunning уже никогда не может быть null, потому что он либо вошел бы в первое if утверждение, либо дал бы NullPointerException в currentRunning.CPUburstRemaining в первый else if -блок.

Из-за этого ваша && currentRunning == null часть вашего else if (currentBlocked.IOburstRemaining != 0 && currentRunning == null) будет всегда быть фальшивой, поэтому IDE считает это мертвым кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...