计算J2EE应用程序中对象的出现次数

时间:2015-06-18 12:42:09

标签: java java-ee servlets for-loop increment

相对新手在这里。

我正在尝试计算J2EE Web应用程序中对象的出现次数。非常简单。

我有一个Oracle数据库,有一个名为Warnings的表。每个警告可以具有以下三种状态之一:

  • ACTIVE
  • 自动清除
  • CLEARED

我的表格中有一个WARNING_SUPPRESSED和一个WARNING_SUPERSEDED列。然后使用这些列保存的值来确定警告的状态。 没有warning_status列,因此警告的状态计算如下:

注意 - 我想指出我目前有5个警告对象,其中一个被清除。所以,我有4个有效和1个已清除的警告。

我在servlet中有一些逻辑:

  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,将sortedCount设为3,将autoclearedCount设为1。 我不明白为什么会这样,因为就我而言,我只有5个警告对象,4个有效,1个被清除。

我正在做什么,只是为了检查我是否有我认为有的警告数量:

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

返回4 - 方法getWarningCount()仅返回活动警告的计数。

我只能假设我的逻辑中存在某种缺陷 - 我不知道是不是因为我有漫长的一天或什么,但这对我来说没有意义!

有时只需要一双新眼睛就能看出我做错了什么......

2 个答案:

答案 0 :(得分: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()..);

在ifs靠近计数器++。的位置,就在循环之后。 有时,越简单越好。 值错的原因可能不在您显示的代码示例中。

答案 1 :(得分:0)

添加到gvo的答案:Tom,你应该在if块中使用continue运算符,或者你可以正确使用if-else-elseif。 即:

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

相应地更改您的代码并让我们知道结果。

[编辑] 您编写的代码......如果块是通行证,技术上程序控制可以进入两个。