drools入门(二)-----规则引擎Drools解决汽水问题
2017-07-06 16:06
323 查看
喝汽水问题:
1元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有50元钱,最多可以喝到几瓶汽水?(不能借空瓶,呵呵无商不奸)
answer:
1: 如果有超过一元钱, 则买一瓶汽水喝, 此时: 钱减少一元,同时拥有的空瓶增加一个。
2: 如果拥有至少两个空瓶, 则两个空瓶卖给老板兜里的钱加一(或是两个空瓶卖给老板换来一瓶汽水)。
SoftDrink.drl
SoftDrink.java
运行结果:
....
....
小黄有 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实现。例外还有个重写的。
softDrink.rar (15.6 KB)
下载次数: 209
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实现。例外还有个重写的。
softDrink.rar (15.6 KB)
下载次数: 209
相关文章推荐
- drools入门(二)-----规则引擎Drools解决汽水问题(复杂逻辑)
- drools入门(二)-----规则引擎Drools解决汽水问题(复杂逻辑)
- Drools规则入门程序:喝汽水问题(^_^)
- 【Drools-开源业务规则引擎】入门实例(含源码)
- 【Drools-开源业务规则引擎】入门实例(含源码)
- drools5.3 jboss 规则引擎入门eclipse IDE 环境
- drools 6.5 -规则引擎入门
- Drools规则引擎初学入门实例HelloWorld
- 使用drools解决小明喝汽水的问题
- JBoss Rules 学习笔记(三)——DRools规则引擎(上)
- 有关SQL排序规则---------即"无法解决 equal to 操作的排序规则冲突"等等的菜问题.
- C#入门问题解决(一)
- 规则引擎 学习之--Drools
- C# winform中不规则窗体制作的解决方案(已经解决24位色以上不能正常显示问题)
- 开源规则引擎 Drools 4.0 发布
- 使用 Drools 规则引擎实现业务逻辑
- C#不规则窗体制作(已经解决24位色以上不能正常显示问题)
- JBoss Rules 学习(四): Drools规则引擎 (下)
- Ilog、Drools、Jess规则引擎的Rule Language 比对
- JBoss Rules 学习(三): Drools规则引擎 (上)