Логическая ошибка или непонимание потока данных?

Я разрабатываю программу, и в ней поле из базы данных вытягивается и, согласно ее числовому значению, отображает одну из трех вещей в графическом интерфейсе: "ПРЕДУПРЕЖДЕНИЕ", "СЕРЬЕЗНО" ИЛИ "КРИТИЧЕСКИЙ".

Если он находится между 0 и 100, он должен отображать "ПРЕДУПРЕЖДЕНИЕ". Если он находится между 100 и 200, он должен отображать "СЕВЕР". Если он превышает 200, он должен отображать "КРИТИЧЕСКИЙ",

Часть моего кода, которая определяет это, размещается ниже. Я получаю неблагоприятные результаты, для любого значения, которое составляет от 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 ответа

Решение вашей проблемы:

// 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 выполняется и перезаписывает ваши предыдущие значения.


Ваш последний оператор else применим только к if непосредственно над ним, поэтому этот оператор else всегда будет вызываться, когда значение threatLevelEnd меньше TEST3, переписывая любые значения, установленные в ваших первых предложениях 2 if (где вы устанавливаете предупреждение и суровое).

Использование if и else if id избежит этого, так как последующие предложения if выполняются только в том случае, если раньше, если не было, так что последнее предложение else не отменяет более ранние настройки.

licensed under cc by-sa 3.0 with attribution.