【发布时间】:2017-02-09 12:23:24
【问题描述】:
我正在寻找一种已知的方法(如果有的话)将长条件表达式拆分为独立的语句。
例如,我有这么长的表达式:
*IF (
( *VALUE K01_PROCESS_COUNTS.Process_Name *EQ 'python'
*OR *VALUE K02_PROCESS_COUNTS.Process_Name *EQ 'java' )
*AND
( *VALUE K01_PROCESS_COUNTS.Process_Count *LT 1
*OR *VALUE K02_PROCESS_COUNTS.Process_Count *LT 2 )
)
我想得到所有可能的组合来使这个陈述成立。手动我可以第一次迭代并得到这个:
*IF (
( *VALUE K01_PROCESS_COUNTS.Process_Name *EQ 'python' )
*AND ( *VALUE K01_PROCESS_COUNTS.Process_Count *LT 1
*OR *VALUE K02_PROCESS_COUNTS.Process_Count *LT 2) )
*IF (
( *VALUE K02_PROCESS_COUNTS.Process_Name *EQ 'java' )
*AND ( *VALUE K01_PROCESS_COUNTS.Process_Count *LT 1
*OR *VALUE K02_PROCESS_COUNTS.Process_Count *LT 2) )
第二次我将拥有全套组合:
*IF ( ( *VALUE K01_PROCESS_COUNTS.Process_Name *EQ 'python' )
*AND ( *VALUE K01_PROCESS_COUNTS.Process_Count *LT 1 ) )
*IF ( ( *VALUE K01_PROCESS_COUNTS.Process_Name *EQ 'python' )
*AND ( *VALUE K02_PROCESS_COUNTS.Process_Count *LT 2 ) )
*IF ( ( *VALUE K02_PROCESS_COUNTS.Process_Name *EQ 'java' )
*AND ( *VALUE K01_PROCESS_COUNTS.Process_Count *LT 1 ) )
*IF ( ( *VALUE K02_PROCESS_COUNTS.Process_Name *EQ 'java' )
*AND ( *VALUE K02_PROCESS_COUNTS.Process_Count *LT 2 ) )
我想从头开始做这个,但我想知道,有没有任何算法可用于这种类型的操作?我一直在寻找一段时间,但我无法找到它。我正在使用 Java,但任何其他语言也可以。
谢谢!
【问题讨论】:
-
我想知道您是否可能不是在寻找设计模式而不是算法。也许属于策略模式类别的状态机设计模式可能会有所帮助。 en.wikipedia.org/wiki/State_pattern 此外,当您使用 Java 时,如果您更喜欢 if else 结构,您可以尝试嵌套 switch 语句。 java-examples.com/nested-switch-statements-example
-
是的:任何布尔表达式都可以表示为乘积 (AND) 的总和 (OR)。基本上,需要将 A AND (B OR C) 形式的每个子表达式重写为 (A AND B) OR (A AND C)。
-
即,您要将公式转换为 en.wikipedia.org/wiki/Disjunctive_normal_form 。
-
是的@DavidEisenstat,这就是我要找的。我创建了一个简单的函数,涵盖了我的大部分案例here,但我正在寻找更通用的函数(如果有的话)。
标签: java algorithm design-patterns strategy-pattern