热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

Java实现24点小游戏

这篇文章主要为大家详细介绍了Java实现24点小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Java实现24点小游戏的具体代码,供大家参考,具体内容如下

程序设计要求:

24点游戏是经典的纸牌益智游戏。

常见游戏规则:

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

基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。

1.程序风格良好(使用自定义注释模板)
2.列出表达式无重复。

算法设计思路:

算法采用了穷举的方法,对所有数字和操作符进行组合,从而找到所有的情况。
刚开始将四个数进行分组排序。
算法中我采用了将四个数分为1种的,两种的(在两种中又分为两种数的个数分别为1和3的,个数分别为2和2的),三种的和四种的,将所有情况排序排了出来。
每次只运算2个数,然后将结果拿去进行下一次运算。刚开始有4个数,拿出两个数进行第一次运算,运算后得出三个数,然后在这三个数中再拿出两个进行第二次运算,运算后就有两个数了,第三次运算就是将这两个数进行计算,得出最后值,判断最后这个值是否为24,若为24,则输出表达式,若不是,则输出提示消息。
现在在这4个数确定位置的情况下,再来改变操作符,即每次2个数进行运算的时候,有4种情况。在下一次计算的时候同样有4种情况,最后一次计算(第3次)同理。这样就找到了所有解的情况。

算法流程图为:

下面是代码:

package Game;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class Compute {
 //定义随机产生的四个数
 static int number[] = new int[4];
 //转换后的num1,num2,num3,num4
 static int m[]=new int [4];
 static String n[] = new String[4];
 //用来判断是否有解
 static boolean flag = false;
 //存放操作符
 static char[] operator = { '+', '-', '*', '/' };
 private static Object key;
 
 public static void main(String[] args){
 Random rand = new Random();
 System.out.println("下列给出四个数字,使用+,-,*,/进行计算使最后计算结果为24");
 for(int i=0;i<4;i++){
 number[i]=rand.nextInt(13)+1;//随机生成四个int型数
 
 if(number[i]==1){
 System.out.println("A");//如果随机生成的数为1,则显示为扑克牌牌面中的A
 }
 else if(number[i]==11){
 System.out.println("J");//如果随机生成的数为11,则显示为扑克牌牌面中的J
 }
 else if(number[i]==12){
 System.out.println("Q");//如果随机生成的数为12,则显示为扑克牌牌面中的Q
 }
 else if(number[i]==13){
 System.out.println("K");//如果随机生成的数为13,则显示为扑克牌牌面中的K
 }
 else
 System.out.println(number[i]);
 }
 System.out.println("可能的结果有:");
 calculate();
 
 }
 
 
 //给定2个数和指定操作符的计算
 public static int calcute(int count1, int count2, char operator) {
 if (operator == '+') {
 return count1 + count2;
 } 
 else if (operator == '-') {
 return count1 - count2;
 }
 else if (operator == '*') {
 return count1 * count2;
 }
 else if ((operator == '/' )&& (count2 != 0) && (count1%count2==0)) {
 return count1 / count2; 
 }
 else {
 return -1;  
 }
 }
 

 //计算生成24的函数
 public static void calculate(){
 
 Map map = new HashMap();
 //存放数字,用来判断输入的4个数字中有几个重复的,和重复的情况
 for (int i = 0; i 

运行及测试截图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • Søren Kierkegaard famously stated that life can only be understood in retrospect but must be lived moving forward. This perspective delves into the intricate relationship between our lived experiences and our reflections on them. ... [详细]
  • 计算机网络复习:第五章 网络层控制平面
    本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨如何设计一个安全的加密和验证算法,确保生成的密码具有高随机性和低重复率,并提供相应的验证机制。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 在给定的数组中,除了一个数字外,其他所有数字都是相同的。任务是找到这个唯一的不同数字。例如,findUniq([1, 1, 1, 2, 1, 1]) 返回 2,findUniq([0, 0, 0.55, 0, 0]) 返回 0.55。 ... [详细]
  • 本文探讨了卷积神经网络(CNN)中感受野的概念及其与锚框(anchor box)的关系。感受野定义了特征图上每个像素点对应的输入图像区域大小,而锚框则是在每个像素中心生成的多个不同尺寸和宽高比的边界框。两者在目标检测任务中起到关键作用。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
author-avatar
您是漂亮女人807
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有