[8,49]: [ERR 102] Line 8:49 mismatched input '%' expecting ')' in rule "CalcPI" in pattern PI java.lang.IllegalArgumentException: Could not parse knowledge. at helper.KnowledgeBaseHelper.readKnowledgeBase(KnowledgeBaseHelper.java:35) at sample.CalcPI.readKnowledgeBase(CalcPI.java:41) at sample.CalcPI.main(CalcPI.java:22) 错误在哪
时间: 2024-02-28 15:56:24 浏览: 149
Android 出现:java.lang.NoClassDefFoundError...错误解决办法
这个错误发生在规则的when部分,具体地在计算iterCount的表达式中,因为在表达式中使用了模运算符%但没有正确地关闭括号。这导致规则引擎无法正确解析该表达式。
你需要修改规则的第5行,将表达式修改为$count : iterCount % 5 == 0。这样就可以正确地计算iterCount的值,并且不会发生语法错误。
以下是修改后的规则代码:
```
package rules;
dialect "mvel"
import model.PI;
rule "CalcPI"
no-loop false
when
pi: PI(iterValue<183, $count : iterCount % 5 == 0)
then
System.out.println("exec rule CalcPI ... ");
System.out.println("PI: " + pi.getPi() + " iterValue: " + pi.getIterValue());
pi.iterOne();
update(pi);
if ($count > 0) {
System.out.println("Do you want to continue? (Y/N)");
String answer = System.console().readLine();
if ("Y".equalsIgnoreCase(answer)) {
pi.setIterCount($count + 1);
update(pi);
} else {
retract(pi);
}
}
end
```
修改后的代码中,维护iterCount的表达式变为$count : iterCount % 5 == 0。现在,这个规则应该可以正确解析,而不会再报错了。
阅读全文