初学java,编写了一个计算24点的程序,时间有限,有些粗糙,不过可以使用。

//-------------Cal24.java---------------

//计算24点程序

//作者:徒步天下(hiker2008.blog.51cto.com)

//

//运行格式: java Cal24 abcd

//abcd为四个1-9数字

//

//输出为结果等于24的算式,及个数

import java.util.*;

public class Cal24 {

String[] op;

Set num = new HashSet();

public static void main(String[] args) {

Cal24 cal24;

if (args.length<1) {

System.out.println("Usage Cal24 abcd");

return;

}

cal24 = new Cal24(args[0]);

cal24.pEx();

}

//初始化数字组合和符号组合

Cal24(String inputnum) {

//生成所输入abcd四个数字的全排列(不可重复使用,如aaaa),去掉重复的,保存在 num 字符串集合

for (int i=0;i<4;i++) {

for (int j=0;j<4;j++) {

for (int k=0;k<4;k++) {

if (i==j || i==k || k==j)   //去掉重复使用同一数字的情况

continue;

int z=6-i-j-k;     //计算出剩下的第四个数。 i+j+k+z=6

num.add(new String(inputnum.substring(i,i+1)+inputnum.substring(j,j+1)

+inputnum.substring(k,k+1)+inputnum.substring(z,z+1)));

}

}

}

// 生成+-×/符号的全排列(可重复使用,如+++),保存在 op 字符串数组

op = new String[64];

String t="+-*/";

for (int i=0;i<4;i++) {

for (int j=0;j<4;j++) {

for (int k=0;k<4;k++) {

int z=i*16+j*4+k;

op[z]=new String(t.substring(i,i+1)+t.substring(j,j+1)+t.substring(k,k+1));

}

}

}

}

// 查找等于24的算式

void pEx() {

Iterator i=num.iterator();

while (i.hasNext()) {

// 遍历每一个数字组合和每一个符号组合

String testNum=(String)i.next();

for (int j=0;j<64;j++)

new CalAopBopCopD(testNum,op[j]); //计算五种不同顺序的值

}

//输出等于24的不同算式总数。

System.out.println("Total found : "+CalAopBopCopD.getTotal());

}

//打印数字组合和符号组合,测试使用

void printOp() {

Iterator i=num.iterator();

while (i.hasNext()) {

System.out.print(i.next());

}

for (int j=0;j<64;j++) {

System.out.println("op["+j+"]="+op[j]);

}

}

}

//生成 a op1 b op2 c op3 d的不同计算顺序的算式,打印计算结果等于24的算式并计数

class CalAopBopCopD {

static int total=0;  //结果等于24的算式计数

double a,b,c,d;   //四个操作数

char op1,op2,op3;  //三个运算符号

double z1,z2,z3;  //运算中间结果

CalAopB t;    //计算 a op b 的对象

//返回结果等于24的算式总数

static int getTotal() {

return total;

}

//根据数字组合和符号组合,转换成对象中类型,依次生成并计算不同顺序的算式

CalAopBopCopD(String n,String o) {

a = Double.parseDouble(n.substring(0,1));

b = Double.parseDouble(n.substring(1,2));

c = Double.parseDouble(n.substring(2,3));

d = Double.parseDouble(n.substring(3,4));

op1 = o.charAt(0);

op2 = o.charAt(1);

op3 = o.charAt(2);

//依次生成并计算不同顺序的算式

printEx1();

printEx2();

printEx3();

printEx4();

printEx5();

}

void printEx1() {

//算式顺序: (a op1 b) op2 (c op3 d)

t=new CalAopB(a,op1,b);

if (t.getErr())

return;

else

z1=t.getResult();

t=new CalAopB(c,op3,d);

if (t.getErr())

return;

else

z2=t.getResult();

t=new CalAopB(z1,op2,z2);

if (t.getErr())

return;

else

z3=t.getResult();

if (Math.abs(z3-24.0) <0.0001) {

System.out.println("No. "+(++total)+" : ( "+(int)a+" "+op1+" "+(int)b

+" ) "+op2+" ( "+(int)c+" "+op3+" "+(int)d

+" ) = 24");

}

}

void printEx2() {

//算式顺序: ((a op1 b) op2 c) op3 d

t=new CalAopB(a,op1,b);

if (t.getErr())

return;

else

z1=t.getResult();

t=new CalAopB(z1,op2,c);

if (t.getErr())

return;

else

z2=t.getResult();

t=new CalAopB(z2,op3,d);

if (t.getErr())

return;

else

z3=t.getResult();

if (Math.abs(z3-24.0) <0.0001) {

System.out.println("No. "+(++total)+" : ( ( "+(int)a+" "+op1+" "+(int)b

+" ) "+op2+" "+(int)c+" ) "+" "+op3+" "+(int)d

+" = 24");

}

}

void printEx3() {

//算式顺序: ( a op1 ( b op2 c)) op3 d

t=new CalAopB(b,op2,c);

if (t.getErr())

return;

else

z1=t.getResult();

t=new CalAopB(a,op1,z1);

if (t.getErr())

return;

else

z2=t.getResult();

t=new CalAopB(z2,op3,d);

if (t.getErr())

return;

else

z3=t.getResult();

if (Math.abs(z3-24.0) <0.0001) {

System.out.println("No. "+(++total)+" : ( "+(int)a+" "+op1+" ( "+(int)b

+" "+op2+" "+(int)c+" ) ) "+op3+" "+(int)d

+" = 24");

}

}

void printEx4() {

//算式顺序: a op1 (( b op2 c) op3 d )

t=new CalAopB(b,op2,c);

if (t.getErr())

return;

else

z1=t.getResult();

t=new CalAopB(z1,op3,d);

if (t.getErr())

return;

else

z2=t.getResult();

t=new CalAopB(a,op1,z2);

if (t.getErr())

return;

else

z3=t.getResult();

if (Math.abs(z3-24.0) <0.0001) {

System.out.println("No. "+(++total)+" : "+(int)a+" "+op1+" ( ( "+(int)b

+" "+op2+" "+(int)c+" ) "+op3+" "+(int)d

+" ) = 24");

}

}

void printEx5() {

//算式顺序: a op1 ( b op2 ( c op3 d ))

t=new CalAopB(c,op3,d);

if (t.getErr())

return;

else

z1=t.getResult();

t=new CalAopB(b,op2,z1);

if (t.getErr())

return;

else

z2=t.getResult();

t=new CalAopB(a,op1,z2);

if (t.getErr())

return;

else

z3=t.getResult();

if (Math.abs(z3-24.0) <0.0001) {

System.out.println("No. "+(++total)+" : "+(int)a+" "+op1+" ( "+(int)b

+" "+op2+" ( "+(int)c+" "+op3+" "+(int)d

+" ) ) = 24");

}

}

}

//计算 a op b 的值

//a,b是两个double类型,op为'+','-','*','/'四个符号中的一个。

class CalAopB {

double a,b;  //两个操作数

char op;  //运算符号

int err=0;  //运算出错,则<0;正确,则为0

double result; //运算结果

// 初始化对象

CalAopB(double sa, char sop, double sb) {

a= sa;

b = sb;

op = sop;

String opstring="+-*/";

if (opstring.indexOf(op)<0) {

err= -1;

} else {

calResult();

}

}

//计算结果

void calResult() {

switch(op) {

case '/':

if (Math.abs(b)<0.00001) {

err = -2;

break;

}

result = a/b;

break;

case '+':

result = a+b;

break;

case '-':

result = a-b;

break;

case '*':

result = a*b;

break;

default:

err=-3;

break;

}

}

//返回是否出错,出错为true,不出错为false

boolean getErr() {

if (err==0)

return false;

else

return true;

}

//返回计算结果

double getResult() {

return result;

}

}

//-------------end---------------

24点游戏java_使用java编写计算24点游戏程序相关推荐

  1. main java game,playgame 一个JAVA编写的飞行小游戏,有基本完整的 框架,适合初学者参照学习 Other s 其他 238万源代码下载- www.pudn.com...

    文件名称: playgame下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 7050 KB 上传时间: 2013-06-06 下载次数: 3 提 供 者: Lyq ...

  2. 利用Java编写简单的猜拳游戏

    猜拳游戏要求用Java编写一个人机对战并判断输赢,记录输赢情况. 其中,1代表石头,2代表剪刀,3代表布,110表示结束游戏. 思路:首先定义输入函数,并提示用户输入猜拳数值,定义一个随机数代表电脑数 ...

  3. java applet 记事本_jsb java编写的安卓app记事本程序,适合app初学者 Applet 243万源代码下载- www.pudn.com...

    文件名称: jsb下载  收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 86 KB 上传时间: 2015-08-25 下载次数: 0 提 供 者: dr 详细说明:j ...

  4. c语言写的黑白棋游戏代码,C语言编写的黑白棋游戏源代码..doc

    C语言编写的黑白棋游戏源代码. C语言编写的黑白棋游戏/*3.3.4 源程序*/ #include "graphics.h" /*图形系统头文件*/ #define LEFT 0x ...

  5. Java编写的五子棋小游戏

    看书的时候看到一个不完整的Java编写的一个五子棋小游戏,为了恢复一下编程能力刚刚把这个小程序完成了. 实现的功能很简单,两人对下五子棋,程序自动回判断输赢.在ubuntu下搞得,没有装什么高端的输入 ...

  6. 停车场管理系统 java_使用java编写一个停车场管理系统

    使用java编写一个停车场管理系统 发布时间:2020-11-30 16:00:28 来源:亿速云 阅读:145 作者:Leah 这篇文章给大家介绍使用java编写一个停车场管理系统,内容非常详细,感 ...

  7. 用Java编写简单的扑克牌游戏

    昨天我帮助一位朋友解决了这个问题,今天我即兴想写一篇详细的关于用Java编写扑克牌游戏的文章. 当然我这里只是实现一些简单的功能. 关于扑克牌游戏的特征,想必大家都有所接触过,有扑克牌,玩扑克牌游戏的 ...

  8. java编写计算类加减乘除_老师要求张浩使用面向对象的思想编写一个计算器类(Calculator),可以实现两个整数的加减乘除的运算.java...

    导航:网站首页 > 老师要求张浩使用面向对象的思想编写一个计算器类(Calculator),可以实现两个整数的加减乘除的运算.java 时间:2019-4-10 老师要求张浩使用面向对象的思想编 ...

  9. 直角三角形面积Java_用java编写输出直角三角型、倒直角三角形

    /** * 题目:用java编写输出直角三角型.倒直角三角形 * 作者:郑翰林 * 时间:2019.8.7 */ /** * * * *** * ***** * ******* * ********* ...

最新文章

  1. 解决nginx 502 bad gateway--团队的力量
  2. 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
  3. linux如何打出罗马数字,vim学习高级技巧之序列的生成方法详解
  4. jdk170不支持注释_JDK 9 @不建议使用的注释增强功能
  5. 床位的摆放有五大禁忌
  6. 豆瓣网络爬虫-java网络爬虫[验证码模拟登陆]详细介绍
  7. Spark Structured SQL : JDBC写入Oracle
  8. JQuery.Ajax用法
  9. 20210612:力扣第244周周赛题解(上)
  10. Eclipse设置字体大小
  11. mapinfo professional 学习资料
  12. Photoshop抠图(磁性钢笔工具)
  13. idea任务栏图标变白色,桌面快捷方式变白色
  14. 网联清算平台45家股东名单出炉【附股权明细表】
  15. Twitter新任80后印度裔CEO,为啥是他?
  16. 现在开房都不需要在前台办理入住了?刺激
  17. Android CameraX的PreviewView Ar背景实景实时预览
  18. 利用fullpage插件,快速开发整屏翻页的页面
  19. 数组元素循环左移n个位置(JAVA)
  20. pair用法(给元素赋值)

热门文章

  1. MyEclipse的快捷使用(含关联源码和Doc的方式)
  2. linux基础(十一)--系统初始化的简谈
  3. python面试题(4)--- 字符串首字母大小写 和 反转字符串 问题
  4. 软件项目文档_什么是软件项目的好的文档?
  5. 物联网入门学什么开发板_物联网入门:如何构建DIY Blynk板
  6. zappos核心价值_尽管Zappos说了什么,中层管理人员仍然很重要
  7. (18) HTML面试题集锦2
  8. 面试 | 从一个API缓存演化,详细了解Redis各项功能
  9. 记一次 React 组件无法更新状态值的问题分析与解决
  10. Bootstrap进度条的颜色