喝汽水问题:
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-wb-7.10 tomcat 安装包"指的是Drools Workbench的一个版本,这是Red Hat公司开发的一款基于Java的工作台,用于规则引擎Drools和决策服务KieServer的管理和开发。Drools是一款强大的业务规则管理系统...
6. **drools-clips-5.0.1.jar**: 包含了对CLIPS(一种流行的规则引擎)的接口,使Drools能与CLIPS规则进行交互,为用户提供了更多的规则编写选择。 7. **drools-decisiontables-5.0.1.jar**: 支持决策表(Decision ...
drools的workbench平台与kie-server的整个打包,通过tomcat8运行,搞了两天终于搞好了,drools-7.7.0目前界面显示还有问题,因此通过drools-7.5.0版本来运行,服务启动后可以通过代码的方式发送命令来执行规则引擎
Drools是一款强大的规则引擎,它允许开发者在Java应用程序中嵌入复杂的业务规则。这篇文章将带你入门Drools,从环境搭建开始,逐步解析“HelloWorld”案例,以理解其基本工作原理。 首先,我们需要安装并配置Drools...
通过深入研究提供的示例,理解并实践其中的规则定义和执行过程,你将能够熟练地利用Drools这一强大的工具,解决业务中的复杂决策问题。同时,了解并运用好Drools的jar包,能够让你在实际项目开发中更加得心应手。
总的来说,"drools-distribution-7.9.0.Final&spring-drools-demo" 示例提供了一个完整的框架,帮助开发者深入了解 Drools 如何与 Spring 结合,实现灵活、可扩展的业务规则管理。通过深入研究这个示例,我们可以更...
drools-core-4.0.4.jar drools-core-4.0.4.jar
dools是一款开源规则引擎,drools-workbench是它的工作台web程序,可以编译,打包,发布规则,kie-server是可以运行规则的服务器程序, 两个服务单独部署,用户可以通过通过http请求发送数据,然后返回规则额匹配...
Drools入门案例 Drools基础语法 规则属性 Drools高级语法 Spring整合Drools Spring Boot整合Drools WorkBench Drools实战 个人所得税计算器 信用卡申请 保险产品准入规则 规则引擎,全称为业务规则管理系统,英文名...
drools-templates-5.4.0.Final.jar
drools-persistence-jpa-5.2.0.Final.jar drools
drools-all-jdk1.4-2.1.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:\...
dools是一款开源规则引擎,drools-workbench是它的工作台web程序,可以编译,打包,发布规则,kie-server是可以运行规则的服务器程序, 两个服务单独部署,用户可以通过通过http请求发送数据,然后返回规则额匹配...
03-规则引擎Drools-Drools入门案例 ---01-Drools入门案例(业务场景说明).mp4 ---02-Drools入门案例(开发实现_1).mp4 ---03-Drools入门案例(开发实现_2).mp4 ---04-Drools入门案例(开发实现_3).mp4 ---05-...
drools-core-5.2.0.Final-sources.jar
drools-core-5.4.0.Final.jar
Drools 规则引擎是一种基于 Java 的开源规则引擎,主要用来解决复杂的业务逻辑问题。下面是 Drools 规则引擎在在线申请信用卡业务场景中的应用。 问题引出现有一个在线申请信用卡的业务场景,用户需要录入个人信息...