0

我想在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的表达式,
然后检查 ((condition2 == 1) || (condition2 == 2) || (condition2 == 3))
然后根据最终条件返回值

它类似于第一个 DFS,然后是 BFS

有人可以告诉我如何在java中首先检查深度然后是Bredth First

4

1 回答 1

1

您的情况是:您想要定义很多条件并连续更改它。您需要有一个解决方案来动态更改表达式并定义新条件。

对于动态情况,例如您的情况,有两种解决方案:

  1. 使用Rule Engine. 这很有好处,你可以从http://java.sun.com/developer/technicalArticles/J2SE/JavaRule.html看到更多信息,你可以从这里 看到它的开源实现。
  2. 使用Dynamic LanguageorScript LanguageScriptapi。

在第二个解决方案中,您有几个选择。我在下面写了一些:

还有更多动态语言,例如JRuby您可以通过在网络中简单搜索来查看它。您可以从此处Script阅读有关java 中 api 的更多信息。

编辑:

对于示例,您可以使用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来自java的第二组:

import bsh.*;

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

并在最终调用脚本中如下:

 bsh.source (script);

结果如下:

Sample condition checked and is true.

通过这种方法,您无需重新编译或重新启动即可更改test.bsh内容。

于 2012-05-14T06:38:56.670 回答