使用drools解决小明喝汽水的问题

问题描述:

1、小明手上有50元钱;

2、1元钱可以买一瓶饮料;

3、2个空瓶可以兑换一瓶饮料;

4、问题是:最终小明可以喝多少瓶饮料 ?

首先,新建maven项目,加入drools依赖

<dependency>
	<groupId>org.drools</groupId>
	<artifactId>drools-core</artifactId>
	<version>6.2.0.Final</version>
</dependency>
<dependency>
	<groupId>org.drools</groupId>
	<artifactId>drools-compiler</artifactId>
	<version>6.2.0.Final</version>
</dependency>
package com.lala.bean;

public class Drinks
{
	private Integer money;
	private Integer total = 0;	//喝的饮料数量
	private Integer bottle = 0; //空瓶子数量

	public Drinks(Integer money)
	{
		this.money = money;
	}
	public Integer getMoney() {
		return money;
	}
	public void setMoney(Integer money) {
		this.money = money;
	}
	public Integer getTotal() {
		return total;
	}
	public void setTotal(Integer total) {
		this.total = total;
	}
	public Integer getBottle() {
		return bottle;
	}
	public void setBottle(Integer bottle) {
		this.bottle = bottle;
	}
}

drools规则:

package com.drink;
import com.lala.bean.Drinks;

rule "money"
	salience 2
    when
    	$d:Drinks(money > 0);
    then
    	modify($d){
	    	setMoney($d.getMoney() - 1),//买一瓶
	    	setTotal($d.getTotal() + 1),//喝一瓶
	    	setBottle($d.getBottle() + 1);//增加一个空瓶(每喝一瓶,就增加一个空瓶)
    	};
end

rule "bottle"
	salience 1
    when
    	$d:Drinks(bottle >= 2);
    then
    	modify($d){
    		setBottle($d.getBottle() - 2),//用2个空瓶换一瓶
	    	setTotal($d.getTotal() + 1),//喝一瓶
	    	setBottle($d.getBottle() + 1);//增加一个空瓶(每喝一瓶,就增加一个空瓶)
    	};
end

测试:

package com.lala.mydrools;

import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

import com.lala.bean.Drinks;

public class Test
{
	static KieSession getSession()
    {
        KieServices ks = KieServices.Factory.get();

        KieContainer kc = ks.getKieClasspathContainer();

        return kc.newKieSession("simpleRuleKSession");
    }
    public static void main(String[] args)
    {
        KieSession ks = getSession();

        Drinks dr = new Drinks(50);
        ks.insert(dr);
        int count = ks.fireAllRules();
        System.out.println("总执行了"+count+"条规则");
        System.out.println("总共可以喝:" + dr.getTotal() + "瓶");
        ks.dispose();
    }
}

最后,输出结果为:

总执行了99条规则

总共可以喝:99瓶

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-01 04:08:28

使用drools解决小明喝汽水的问题的相关文章

hduoj 4506 小明系列故事――师兄帮帮忙【分析题意】

小明系列故事――师兄帮帮忙 Description 小明自从告别了ACM/ICPC之后,就开始潜心研究数学问题了,一则可以为接下来的考研做准备,再者可以借此机会帮助一些同学,尤其是漂亮的师妹.这不,班里唯一的女生又拿一道数学题来请教小明,小明当然很高兴的就接受了.不过等他仔细读题以后,发现自己也不会做,这下小明?辶耍喝绻?回复说自己不懂,岂不是很没面子?  所以,他现在私下求你帮忙解决这道题目,题目是这样的:  给你n个数字,分别是a1,a2,a3,a4,a5--an,这些数字每过一个单位时间就

hunnu 11545小明的烦恼——找路径 (最大流)

小明的烦恼--找路径  Time Limit: 2000ms, Special Time Limit:5000ms, Memory Limit:32768KB Total submit users: 45, Accepted users: 37 Problem 11545 : No special judgement Problem description   小明真的是个很厉害的人,每当老师有什么事时,总是会找到小明,二小明也总能解决,所以老师决定给小明一个奖励,给他额外的假期.小明当然很高兴

HDU 小明系列故事——师兄帮帮忙 快速幂

小明系列故事--师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 4850    Accepted Submission(s): 1275 Problem Description 小明自从告别了ACM/ICPC之后,就开始潜心研究数学问题了,一则可以为接下来的考研做准备,再者可以借此机会帮助一些同学,尤其是漂亮的师妹.这不,班

NYOJ 55 懒省事的小明 (优先队列)

题目意思: http://acm.nyist.net/JudgeOnline/problem.php?pid=55 每一次合并,小明可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.小明在合并果子时总共消耗的体力等于每次合并所耗体力之和. 因为还要花大力气把这些果子搬回家,所以小明在合并果子时要尽可能地节省体力.假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使小明耗费的体力最少,并

hdu 4521 小明系列问题——小明序列 (间隔至少为d的LIS 两种解法)

先附上资源地址:http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握. 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 1. 计算机的核心是CPU,它承担了所有的计算任务.它就像一座工厂,时刻在运行. 2. 假定工厂的电力有限,一次只能供给一个车间使用.也就是说,一个车间开工的时候,其他车间都必须停工

1006 小明与隔壁老王之间不得不说的故事

1006: 小明与隔壁老王之间不得不说的故事 时间限制: 1 Sec  内存限制: 128 MB提交: 355  解决: 152[提交][状态][讨论版] 题目描述 有一天,小明想偷吃隔壁老王院子里苹果树上的苹果. 但是,老王家有一条哈士奇,每隔一定时间就会吼叫.准确的说,它会在一个时间点吼叫第一次,之后每隔一段时间吼叫两次,比如第一次吼叫是在 t 时刻,间隔为 s,则吼叫时间点为 t, t + s, t + s + 1, t + 2s, t + 2s + 1 等. 小明是个要面子的人,不想被这

读《小明升职记》(一)

每天的生活过的很焦躁,时间明显不够用,啥也没干就到了晚上,效率极低,毫无成就感,如此蹉跎岁月,没两天老之将至. 需要学习一点时间管理的技巧来规划个人时间. 原先用过番茄工作法,效率有所提升,起码在25分钟内可以做到比较专注,但也没坚持下来. 番茄虽好,仍感觉点太小,盲目感仍在. 网上知乎寻找了许多时间管理类的贴,下载了基本经典书籍. 其中一本是<小明升职记>,语言简朴诙谐,结合实例,国人写的,上来先看这本不至于被大部头弄得挫败. <小明>概要: 1. 处在网络浅阅读时代的人,如果没

小明喝酒的问题

题目描述: 小明带20块钱去喝酒,啤酒两块钱一瓶,两个瓶可以换一瓶酒,四个瓶盖可以换一瓶酒,问小明总共能喝几瓶酒? 代码如下 1 /* 2 * @Author: Shuai 3 * @Date: 2016-04-14 20:40:40 4 * @Last Modified by: Shuai 5 * @Last Modified time: 2016-04-14 22:25:24 6 */ 7 /* 8 * @Author: Shuai 9 * @Date: 2016-04-14 20:40:4

hdu 4511 小明系列故事——女友的考验

小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 822    Accepted Submission(s): 176 Problem Description 终于放寒假了,小明要和女朋友一起去看电影.这天,女朋友想给小明一个考验,在小明正准备出发的时候,女朋友告诉他,她在电影院等他,小明过来的路线必须满足给定的规则