2012-02-10 4 views
2

У нас есть приложение на Java 6, работающее на сервере приложений Weblogic 11. Я пытаюсь отладить проблему. Мой кодповедение отладчика в if, else if, else

if(a==0){ 
    //Do A 
} 
else if(a==1){ 
    // Do B 
} 
else{ 
    // do C 
} 

Моя проблема заключается в том, что даже если мой если блок верно и строка 2 выполняется еще отладчик будет перейти к строке 8 в еще блоке. Код на моей машине и на сервере синхронизирован, поэтому никакого несоответствия. Пожалуйста, помогите мне найти, что может быть неправильно с моим кодом.

+1

Не получаете ли вы ошибку компилятора при использовании назначения 'int' в качестве условия? –

+0

Этот новый код также прекрасен. Используйте копию. –

ответ

1

Мы должны знать, что делает // Do C.

Если есть уступка:

if (a == 0) { 
     b = 1; 
} else if (a == 1) { 
     b = 0; 
} 
else { 
     b = null; 
} 

типичная оптимизация, что некоторые компиляторы будут:

b = null; 
if (a == 0) { 
    b = 1; 
} else if (a == 1) { 
    b = 0; 
} 

И это байткод выполняется. Не говоря уже, если код скомпилирован в native компилятором JIT. Итак, в зависимости от вашего клиента отладки и jdk вы можете видеть сумасшедшие текущие строки команд. Но это нормально, пока ожидается состояние в конце блока.

Иногда исполнение должно быть закрыто. Так оно и заканчивается.

Убедитесь, что значения static присвоены a, и если да, то это перекомпилировано. Присвоения статики связаны во время компиляции.

+0

+1 хорошие мысли. – Gangnus

+0

double value == 0; if (a == 0) { значение = 3; } else if (a == 1) { value = 2; } else {значение = 0; } Я думаю, что это то, что может произойти. Благодарю. Цените свою помощь – Vivek

+0

, что 'else {}' empty генерирует команду закрытия. Почему бы вам просто не удалить его и посмотреть, не исправлены ли это? – ssedano

0

Если это не будет:

if(a==0) 
... 
else if(a==1) 
... 
else 
... 
0

не забывайте, что = является назначение и == сравнение - в вашем случае, вы присваиваете значение, а затем проверить результат выполнения задания , Не выполняя сравнения.

Просто измените

if(a=0){ 
    //Do A 
} 
else if(a=1){ 
    // Do B 

в

if(a==0){ 
    //Do A 
} 
else if(a==1){ 
    // Do B 
+0

Прошу прощения. Это была опечатка, когда я написал о помощи. В моем фактическом коде условия разные. Я уже редактировал свой первоначальный пост. Эта проблема по-прежнему сохраняется. Спасибо – Vivek

+0

@Wowward downvoted - почему именно? Это был правильный ответ на поставленный вопрос ... – Basic