我正在开发一个程序,在其中,从数据库中提取一个字段,根据其数值,将显示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");
}
}
答案 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条款中(你设置警告和严重的条款)。
使用if
和else if
成语将避免这种情况,因为后来的if子句仅在较早的if子句中执行,因此最后的else子句不会覆盖先前的设置。