Java实现24点

第三章作业

一、题目要求:

常见游戏规则:

   从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。

基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式

          1.程序风格良好(使用自定义注释模板)

          2.列出表达式无重复。

提高要求:用户初始生命值为一给定值(比如3),初始分数为0随机生成4个代表扑克牌牌面的数字或字母,由用户输入包含这4个数字或字母的运算表达式(可包含括号),如果表达式计算结果为24则代表用户赢了此局。

         1. 程序风格良好(使用自定义注释模板)

         2.使用计时器要求用户在规定时间内输入表达式,如果规定时间内运算正确则加分,超时或运算错误则进入下一题并减少生命值(不扣分)。

二、题目分析:

      基本要求:

1:随机生成4个数:

2:采用穷举法,对每个数据,每个运算符的组合进行穷举,且保证不重复重新,算得为 24则输出。

3.若无24结果,则输出无结果。

 

提高要求:

  1. 随机生成4个数。
  2. 比较运算符等级
  3. 输入中缀表达式
  4. 将中缀表达式转换为后缀表达式
  5. 后缀表达式求值,并判断是否为24
  6. 定时器函数,每60秒运行一次
  7. 生命值为0结束

三、测试,调试,运行结果

提高要求:

     1:超时设置

2.正确判断设置

3.错误判断设置

4.结束设置

基础要求:

有结果:

无结果

四、总结

1:对穷举法有了一个更深的认识,穷举法,7个for循环得所有的可能组合。

2:中缀表达式转换成后缀表达式:

开始扫描;

·若是数字时,加入后缀表达式;

·若是运算符:

a. 若为最高级的运算符,入栈;

b. 若为 ‘(’,入栈;

c. 若为 ‘)’,则依次把栈中的的运算符加入后缀表达式中,直到出现’(’,从栈中删除’(’ ;

d. 若为不是最高级的运算符,则将从栈顶到第一个优先级不大于它的运算符之间的运算符加入后缀表达式中,该运算符再入栈;

3.后缀表达式求值:

从左到右扫描算术表达式,将遇到的操作数直接存放到后缀表达式中,将遇到的每一个运算符或者左括号都暂时保存到运算符栈,而且先执行的运算符先出栈。

4.Timer类,TimerTask类的应用

Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。

TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务。

new一个TimerTask的子类,重写run方法来指定具体的任务,我用匿名内部类的方式来实现了一个TimerTask的子类

new一个Timer类,Timer的构造函数里会起一个单独的线程来执行计划任务

通过调用三个参数的schedule方法实现,最后一个参数是执行间隔,单位毫秒。我定义了30秒执行一次。

 

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值