Динамическое Условное Заявление

Я хочу создать динамический условный оператор в Java
Следующее мое выражение в файле, Есть сотни выражений, и они продолжают меняться

0001|((condition1 == 100) && ((condition2 == 1) || (condition2 == 2) || (condition2 == 3)) && (condition3 > 74))
0002|((condition1 == 100) && ((condition2 == 1) || (condition2 == 2) || (condition2 == 3)) && (condition3 > 59) && ((condition4 == 3) || (condition5 > 30)))

Эти выражения жестко закодированы в моем классе.

if(condition1==100 && ((condition2 == 1) || (condition2 == 2) || (condition2 == 3))){

if(condition3>74){
return "0001"
}
if(condition3>59 && ((condition4 == 3) || (condition5 > 30))){
return "0002"
}

}

я хочу создать динамическое условное выражение, как

Сначала у меня есть проверка для всех выражений, которые имеют условие1==100
тогда для ((условие 2 == 1) || (условие 2 == 2) || (условие 2 == 3))
затем вернуть значение в соответствии с конечным условием

это что-то вроде сначала DFS, а затем BFS

может какое-то тело может дать мне идею, как проверить сначала Глубину, а затем Bredth Сначала в Java

1 ответ

Решение

Ваш случай таков: вы хотите определить очень много условий и менять их непрерывно. Вам нужно иметь решение для динамического изменения выражения и определения нового условия.

Есть два решения для динамической ситуации, такой как ваш случай:

  1. С помощью Rule Engine, Это очень полезно, вы можете увидеть больше информации на http://java.sun.com/developer/technicalArticles/J2SE/JavaRule.html и увидеть его реализацию с открытым исходным кодом отсюда.
  2. С помощью Dynamic Language или же Script Language а также Script апи.

Во втором решении у вас есть несколько вариантов. Я написал несколько в следующем:

Есть более динамичный язык, такой как JRuby что вы можете увидеть это простым поиском в сети. Вы можете прочитать больше информации для Script API в Java отсюда.

Отредактировано:

Для образца вы можете использовать BeanShell Script Language как следует:

Сначала создайте файл с именем test.bsh содержание удара:

if(variable_1 == 100 )
{
   System.out.println("Sample condition checked and is true.");
}
else
{
   System.out.println("Sample condition checked and is false.");
}

Второй сет variable_1 из Явы:

import bsh.*;

Interpreter bsh = new Interpreter ();
bsh.set ("variable_1", 100);

и в последнем скрипте вызова следующим образом:

 bsh.source (script);

и результат будет следующим:

Sample condition checked and is true.

при таком подходе вы можете изменить test.bsh содержимое без перекомпиляции или перезапуска.

Другие вопросы по тегам