2015-06-18 2 views
2

Относительный новичок здесь.Подсчет объектов в приложении J2EE

Я пытаюсь подсчитать вхождения объектов в веб-приложение J2EE. Очень просто.

У меня есть база данных Oracle со таблицей «Предупреждения». Каждое предупреждение может иметь один из трех статусов:

  • ACTIVE
  • AUTOCLEARED
  • CLEARED

У меня есть WARNING_SUPPRESSED и столбец WARNING_SUPERSEDED в моей таблице. Значения, используемые этими столбцами, затем используются для определения состояния предупреждения. Столбец warning_status отсутствует, поэтому состояние предупреждения выдается следующим образом:

NB - Я хотел бы указать, что в настоящее время у меня есть 5 предупреждающих объектов, один из которых очищается. Итак, у меня есть 4 активных и 1 очищенного предупреждения.

У меня есть какая-то логика в сервлет:

for (Warning warning : warnings) 
    { 
    // logic to check and count occurrences of each type of warning 
    int activeCount  = 0; 
    int clearedCount  = 0; 
    int autoclearedCount = 0; 

    // warning is active if it is not superseded and not suppressed 
    if(((warning.getWarningSuperseded() != null && warning.getWarningSuperseded().equals("N")) 
      && ((warning.getWarningSuppressed() != null && warning.getWarningSuppressed().equals("N"))))) 
    { 
     activeCount++; 
    } 
    // warning is cleared if it is superseded 
    if(warning.getWarningSuperseded() != null && warning.getWarningSuperseded().equals("Y")) 
    { 
     clearedCount++; 
    } 
    // warning is autocleared if it is suppressed 
    else if (warning.getWarningSuppressed() != null && warning.getWarningSuppressed().equals("Y")) 
    { 
     autoclearedCount++; 
    } 

    }  

Итак, что я думаю, что я пытаюсь сделать здесь, в псевдокоде:

if warning not superseded and warning not suppressed 
    then increment activeCount; 
if warning is superseded 
    then increment clearedCount; 
if warning is suppressed 
    then increment autoclearedCount; 

При отладке это в Eclipse, я получить activeCount, чтобы быть 8, clearedCount быть 3 и autoclearedCount быть 1. Я не совсем понимаю, почему это так, потому что, насколько мне известно, у меня есть только 5 предупреждающих объектов, 4 активных и 1 очищенных.

То, что я тогда делал, просто чтобы проверить, что у меня есть количество предупреждений, я думаю, у меня есть:

warningCount = warningServices.getWarningCount(MyServletHelper.getCurrentSchema(request)); 

Это возвращает 4 - метод getWarningCount() возвращает только количество предупреждений, которые являются активными ,

Я могу только предположить, что в моей логике есть какой-то недостаток - я не знаю, было ли это просто потому, что у меня был длинный день или что-то, но это не имеет смысла для меня!

Иногда все, что нужно для свежей пары глаз, чтобы увидеть, что я делаю неправильно ...

ответ

0

Вы уверены, что у вас есть только объекты 5 предупреждений? Как вы получили упомянутые вами ценности?

Вы должны попытаться отладить (System.out.println), чтобы понять, как работает ваш код.

Но первое, что меня действительно удивляет, это то, что вы повторно инициализируете свои значения в цикле.

for (Warning warning : warnings) 
    { 
    // logic to check and count occurrences of each type of warning 
    int activeCount  = 0; 
    int clearedCount  = 0; 
    int autoclearedCount = 0; 

    [..] counters ++; 
    } 

Каждый раз, когда вы будете идти в новое предупреждение, вы потеряли прежнее значение .. Так что я даже не понимаю, как значения могут быть больше, что один в конце вашего цикла.

После редактирования в вопросе: попробуйте использовать более простые вещи при отладке.Я не знаю,

WarningServices.getWarningCount(MyServletHelper.getCurrentSchema(request)); 

, но я доверяю

warnings.size() 

system.out.println ('Hello, I incremented activeCount, here the warning doing that' + warning.info()..); 

в МФС только возле прилавка ++., И только после цикла. Иногда, чем проще, тем лучше. Причина, по которой значения неверны, вероятно, не в примере кода, который вы показываете.

+0

Я инициализировал переменные на уровне метода - почему я помещаю их в цикл, я понятия не имею. Тем не менее, он по-прежнему возвращает абсолютную бессмыслицу ... –

0

добавление в ответ gvo: Том, вы должны использовать оператор продолжения, если блок или вы можете использовать if-else-elseif правильно. т.е.

if(){.....} 
    else if(){.....} 
    else {.....} 

изменить код соответственно, и дайте нам знать результат.

[отредактировано] Код, который вы написали ... Технически программный контроль может входить в два, если блок - это проход.

+0

Отсортировано сейчас. Ошибка if-else-elseif не была моей: P Я просто сорвал логику с объекта Warning. Спасибо, что нашли время ответить! –

+0

Что вызывало проблемы? – barun

Смежные вопросы