相对新手在这里。
我正在尝试计算J2EE Web应用程序中对象的出现次数。非常简单。
我有一个Oracle数据库,有一个名为Warnings的表。每个警告可以具有以下三种状态之一:
我的表格中有一个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()仅返回活动警告的计数。
我只能假设我的逻辑中存在某种缺陷 - 我不知道是不是因为我有漫长的一天或什么,但这对我来说没有意义!
有时只需要一双新眼睛就能看出我做错了什么......
答案 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 {.....}
相应地更改您的代码并让我们知道结果。
[编辑] 您编写的代码......如果块是通行证,技术上程序控制可以进入两个。