逻辑错误,还是对数据流的误解?

时间:2013-07-03 23:35:51

标签: java user-interface if-statement logic dataflow

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

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

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

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");
    }

}

2 个答案:

答案 0 :(得分: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被执行并覆盖你以前的价值。

答案 1 :(得分:1)

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

使用ifelse if成语将避免这种情况,因为后来的if子句仅在较早的if子句中执行,因此最后的else子句不会覆盖先前的设置。