0

我正在开发一个程序,在其中,从数据库中提取一个字段,并根据其数值,将在 GUI 中显示三件事之一:“警告”、“严重”或“关键”。

如果介于 0 和 100 之间,则应显示“WARNING” 如果介于 100 和 200 之间,则应显示“SEVERE” 如果超过 200,则应显示“CRITICAL”

我的代码中确定这一点的部分发布在下面。我得到了不利的结果,对于 100 到 200 之间的任何值,都会显示“错误”。我的逻辑是错误的,还是这里有更深层次的事情?

public class ThreatPanel {

...

final int TEST = 0;
final int TEST2 = 100;
final int TEST3 = 200;
...
}



public void ShowThreats(){

    String targetEnd = MainDisplay.getTargetIpHolder();     
    TargetServerData.setText(targetEnd);

    String attackerEnd = MainDisplay.getAttackerIpHolder();
    AttackerData.setText(attackerEnd);

    int threatLevelEnd = MainDisplay.getThreatLevelHolder();
    System.out.println(threatLevelEnd);
    if ((threatLevelEnd > TEST ) && (threatLevelEnd < TEST2)){
        ThreatLevelData.setText("WARNING");
    }
    if ((threatLevelEnd > TEST2 ) && (threatLevelEnd < TEST3)){
        ThreatLevelData.setText("SEVERE");
    }
    if (threatLevelEnd > TEST3){
        ThreatLevelData.setText("CRITICAL");
    }
    else{
        ThreatLevelData.setText("ERROR");
    }

}
4

2 回答 2

2

解决您的问题:

// checks for value in between 0 to 100 excluding 0 and 100
if (threatLevelEnd  > 0 && i<100) 
    System.out.println("WARNING");
// checks for value in between 100 to 200 excluding 200
else if (threatLevelEnd >= 100 && threatLevelEnd < 200) 
    System.out.println("SEVERE");
// checks for value greater than 200
else if (threatLevelEnd >= 200)
    System.out.println("CRITICAL");
else 
// this is default if value is negative or zero
     System.out.println("ERROR");

目前你在做什么。

// checks for value in between 0 to 100 excluding 0 and 100
if (threatLevelEnd  > 0 && i<100) 
    System.out.println("WARNING");
// checks for value in between 100 to 200 excluding 100 and 200
if (threatLevelEnd > 100 && threatLevelEnd < 200) 
    System.out.println("SEVERE");
// checks for value greater than 200
if (threatLevelEnd > 200)
    System.out.println("CRITICAL");
else 
// if value is not grether than 200
     System.out.println("ERROR");

所以无论如何你的最后一个if-else被执行并覆盖你以前的值。

于 2013-07-04T00:02:11.597 回答
1

您的最后一条else语句仅适用于if它的正上方,因此当threatLevelEnd小于时,此 else 语句将始终触发TEST3,覆盖在前 2 个 if 子句中设置的任何值(您在其中设置警告和严重)。

使用ifandelse if成语可以避免这种情况,因为后面的 if 子句仅在前面的 if 没有执行时才执行,所以最后的 else 子句不会覆盖早期的设置。

于 2013-07-03T23:58:53.100 回答