喝汽水问题:
1元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有50元钱,最多可以喝到几瓶汽水?(不能借空瓶,呵呵无商不奸)
answer:
1: 如果有超过一元钱, 则买一瓶汽水喝, 此时: 钱减少一元,同时拥有的空瓶增加一个。
2: 如果拥有至少两个空瓶, 则两个空瓶卖给老板兜里的钱加一(或是两个空瓶卖给老板换来一瓶汽水)。
SoftDrink.drl
#created on: 2011-10-18
package com.jsptpd.rjy.zyj.main
dialect "mvel"
#list any import classes here.
import com.jsptpd.rjy.zyj.main.SoftDrink.Customer
#declare any global variables here
rule "和了一瓶汽水"
when
$c:Customer(money>0,$m:money, $e:emptyBottle, $d :drinkBottleSum);
then
$c.money=$m-1;
$c.emptyBottle=$e+1;
$c.drinkBottleSum=$d+1;
System.out.println($c.getName()+"有 "+$c.getMoney()+" 元, 有空瓶 "+$c.getEmptyBottle()+" 个, 喝了 "+$c.getDrinkBottleSum()+" 瓶。");
update($c);
end
rule "用两个空瓶换了一瓶汽水"
when
$c:Customer(emptyBottle>1,$e:emptyBottle, $d:drinkBottleSum);
then
$c.emptyBottle=$e-2+1;
$c.drinkBottleSum=$d+1;
System.out.println($c.getName()+"有 "+$c.getMoney()+" 元, 有空瓶 "+$c.getEmptyBottle()+" 个, 喝了 "+$c.getDrinkBottleSum()+" 瓶。");
update($c);
end
rule "结束"
no-loop true
when
$c:Customer(money<=0,emptyBottle<2);
then
System.out.println("计算结束:"+$c.getName()+"有 "+$c.getMoney()+" 元, 有空瓶 "+$c.getEmptyBottle()+" 个, 喝了 "+$c.getDrinkBottleSum()+" 瓶。");
end
SoftDrink.java
package com.jsptpd.rjy.zyj.main;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;
public class SoftDrink {
/**
* @param args
*/
public static void main(String[] args) {
try {
KnowledgeBase knowledgeBase = readKnowledgeBase();
StatefulKnowledgeSession statefulKnowledgeSession = knowledgeBase
.newStatefulKnowledgeSession();
KnowledgeRuntimeLogger knowledgeRuntimeLogger = KnowledgeRuntimeLoggerFactory
.newFileLogger(statefulKnowledgeSession, "test");
Customer customer=new Customer("小黄", 50, 0, 0);
statefulKnowledgeSession.insert(customer);
statefulKnowledgeSession.fireAllRules();
knowledgeRuntimeLogger.close();
statefulKnowledgeSession.dispose();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static KnowledgeBase readKnowledgeBase() throws Exception {
KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory
.newKnowledgeBuilder();
knowledgeBuilder.add(ResourceFactory
.newClassPathResource("SoftDrink.drl"), ResourceType.DRL);
KnowledgeBuilderErrors knowledgeBuilderErrors = knowledgeBuilder
.getErrors();
if (knowledgeBuilderErrors.size() > 0) {
for (KnowledgeBuilderError knowledgeBuilderError : knowledgeBuilderErrors) {
System.out.println(knowledgeBuilderError);
}
throw new IllegalArgumentException("KnowledgeBuilder创建失败!");
}
KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
knowledgeBase.addKnowledgePackages(knowledgeBuilder
.getKnowledgePackages());
return knowledgeBase;
}
public static class Customer {
private String name = "";
private int money = 0;
private int emptyBottle = 0;
private int drinkBottleSum = 0;
public Customer(String name, int money, int emptyBottle,
int drinkBottleSum) {
super();
this.name = name;
this.money = money;
this.emptyBottle = emptyBottle;
this.drinkBottleSum = drinkBottleSum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public int getEmptyBottle() {
return emptyBottle;
}
public void setEmptyBottle(int emptyBottle) {
this.emptyBottle = emptyBottle;
}
public int getDrinkBottleSum() {
return drinkBottleSum;
}
public void setDrinkBottleSum(int drinkBottleSum) {
this.drinkBottleSum = drinkBottleSum;
}
}
}
运行结果:
....
....
小黄有 2 元, 有空瓶 2 个, 喝了 94 瓶。
小黄有 2 元, 有空瓶 1 个, 喝了 95 瓶。
小黄有 1 元, 有空瓶 2 个, 喝了 96 瓶。
小黄有 1 元, 有空瓶 1 个, 喝了 97 瓶。
小黄有 0 元, 有空瓶 2 个, 喝了 98 瓶。
小黄有 0 元, 有空瓶 1 个, 喝了 99 瓶。
计算结束:小黄有 0 元, 有空瓶 1 个, 喝了 99 瓶。
----------------------------------------------------------------------------------------------------------------------------------------
附件直接导入Eclipse中运行.
附件drl文件有java实现,这个是mvel实现。例外还有个重写的。
分享到:
相关推荐
jboss 规则引擎 drools库。 api,core,compiler,jsr94 drools-compiler-5.1.1.jar
drools-core-4.0.4.jar drools-core-4.0.4.jar
drools-templates-5.4.0.Final.jar
drools-persistence-jpa-5.2.0.Final.jar drools
drools-distribution-7.9.0.Final&spring;-drools-demo样例
drools-all-jdk1.4-2.1.jar
drools tomcat workbench 安装war包。 drools tomcat workbench 安装war包。
03-规则引擎Drools-Drools入门案例 ---01-Drools入门案例(业务场景说明).mp4 ---02-Drools入门案例(开发实现_1).mp4 ---03-Drools入门案例(开发实现_2).mp4 ---04-Drools入门案例(开发实现_3).mp4 ---05-...
drools文档教程-规则引擎文档
drools-core-5.2.0.Final-sources.jar
drools规则引擎相关文件, 源码:\drools-distribution-7.7.0.Final\sources\drools-core-7.7.0.Final-sources.jar、 jar包:\drools-distribution-7.7.0.Final\binaries\drools-core-7.7.0.Final.jar、 API:\...
drools-core-5.4.0.Final.jar
9 Drools WorkBench使用9.1 WorkBench基本使用9.2 创建会话9.3 编译并部署9.4 执行代码10 Drools决策表入门11 Drools决策表加强12 Drools决策表整合Springboot和MybatiesPlus13 动态编译Class文件实现Drools规则调用...
HelloWorld 博文链接:https://justsee.iteye.com/blog/1198259
dools是一款开源规则引擎,drools-workbench是它的工作台web程序,可以编译,打包,发布规则,kie-server是可以运行规则的服务器程序, 两个服务单独部署,用户可以通过通过http请求发送数据,然后返回规则额匹配...
drools-apollo-master.zip drools-apollo-master.zipdrools-apollo-master.zip drools-apollo-master.zipdrools-apollo-master.zip drools-apollo-master.zipdrools-apollo-master.zip drools-apollo-master....
从drools官网下载,压缩包内有example,便于自己学习理解,所有jar包也都有。由于国内这方面资料较少,拿出来大家研究下。
Drools入门案例 Drools基础语法 规则属性 Drools高级语法 Spring整合Drools Spring Boot整合Drools WorkBench Drools实战 个人所得税计算器 信用卡申请 保险产品准入规则 规则引擎,全称为业务规则管理系统,英文名...
这个是drools5.0完整组件库。包含了drools引擎所依赖的完整jar包集合。不收资源分啦。