新人向 JAVA 24点简单程序
来源:互联网 发布:windows 打印机安装 编辑:程序博客网 时间:2024/06/05 06:29
/*
* 功能:1.随机生成4张点数1—13的牌
* 2.输入运算表达式判断是否为24点
* 3.判断是否输错数值,重复值或者无中生有的数值
* 4.不支持括号的嵌套
* @author LM-ZAKU
*/
package course.random;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;
public class Poke24 {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
if (is24(4))
System.out.println("恭喜您!成功计算出24点");
}
public static boolean is24(int k) throws IOException {
Random rd = new Random();// 创建随机数对象
Set treeSet = new TreeSet();// 创建TreeSet类对象
Set ts = new TreeSet();
int i = 0;
while (treeSet.size() < k) {
int m = 1 + rd.nextInt(13);
treeSet.add(new Integer(m));// 集合中的元素必须是符合数据类型
}
System.out.println("您随机获得的24点元素:");
System.out.println(treeSet);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
// LM-从键盘输入一个简单四则运算表达式
System.out.println("请输入表达式:");
String str = br.readLine();
System.out.println("运算结果为:" + opt(str) + "");
// LM-用split方法分隔运算符,将分割后的字符串存入number数组中
String number[] = str.split("\\(|\\)|\\+|-|\\*|/");
// LM-将number数组中的非空数值以Integer型存入ts中
for (String result : number) {
if (result.length() != 0) {
Integer a = Integer.parseInt(result);
ts.add(a);
}
}
// LM-判断输入值与给出值是否一致
boolean flag = isEquals(ts, treeSet);
if (opt(str) == 24 && flag)
return true;
} catch (Exception e) {
e.printStackTrace();
}
if (br != null) {
try {
br.close();
} catch (IOException lm_e) {
lm_e.printStackTrace();
}
}
return false;
}
public static float opt(String s) throws Exception {
if (s == null || "".equals(s.trim())) {
return 0f;
}
int a1 = s.indexOf("+");
int a2 = s.indexOf("-");
int a3 = s.indexOf("*");
int a4 = s.indexOf("/");
int a5 = s.indexOf("(");
if (a1 == -1 && a2 == -1 && a3 == -1 && a4 == -1) {
if (s.trim() == null || "".equals(s.trim())) {
throw new Exception("operate error");
}
return Float.parseFloat(s.trim());
}
if (a5 != -1) {
int a6 = s.indexOf(")");
if (a6 == -1) {
throw new Exception("括号不匹配");
} else {
float f = opt(s.substring(a5 + 1, a6).trim());
s = s.replace(s.substring(a5, a6 + 1), String.valueOf(f));
return opt(s);
}
}
if (a1 != -1) {
return opt(s.substring(0, a1))
+ opt(s.substring(a1 + 1, s.length()));
}
if (a2 != -1) {
return opt(s.substring(0, a2))
- opt(s.substring(a2 + 1, s.length()));
}
if (a3 != -1) {
return opt(s.substring(0, a3))
* opt(s.substring(a3 + 1, s.length()));
}
if (a4 != -1) {
return opt(s.substring(0, a4))
/ opt(s.substring(a4 + 1, s.length()));
}
return Integer.parseInt(s.trim());
}
public static boolean isEquals(Set ts, Set treeSet) {
if (ts.equals(treeSet)) {
return true;
}
return false;
}
}
* 功能:1.随机生成4张点数1—13的牌
* 2.输入运算表达式判断是否为24点
* 3.判断是否输错数值,重复值或者无中生有的数值
* 4.不支持括号的嵌套
* @author LM-ZAKU
*/
package course.random;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;
public class Poke24 {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
if (is24(4))
System.out.println("恭喜您!成功计算出24点");
}
public static boolean is24(int k) throws IOException {
Random rd = new Random();// 创建随机数对象
Set treeSet = new TreeSet();// 创建TreeSet类对象
Set ts = new TreeSet();
int i = 0;
while (treeSet.size() < k) {
int m = 1 + rd.nextInt(13);
treeSet.add(new Integer(m));// 集合中的元素必须是符合数据类型
}
System.out.println("您随机获得的24点元素:");
System.out.println(treeSet);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
// LM-从键盘输入一个简单四则运算表达式
System.out.println("请输入表达式:");
String str = br.readLine();
System.out.println("运算结果为:" + opt(str) + "");
// LM-用split方法分隔运算符,将分割后的字符串存入number数组中
String number[] = str.split("\\(|\\)|\\+|-|\\*|/");
// LM-将number数组中的非空数值以Integer型存入ts中
for (String result : number) {
if (result.length() != 0) {
Integer a = Integer.parseInt(result);
ts.add(a);
}
}
// LM-判断输入值与给出值是否一致
boolean flag = isEquals(ts, treeSet);
if (opt(str) == 24 && flag)
return true;
} catch (Exception e) {
e.printStackTrace();
}
if (br != null) {
try {
br.close();
} catch (IOException lm_e) {
lm_e.printStackTrace();
}
}
return false;
}
public static float opt(String s) throws Exception {
if (s == null || "".equals(s.trim())) {
return 0f;
}
int a1 = s.indexOf("+");
int a2 = s.indexOf("-");
int a3 = s.indexOf("*");
int a4 = s.indexOf("/");
int a5 = s.indexOf("(");
if (a1 == -1 && a2 == -1 && a3 == -1 && a4 == -1) {
if (s.trim() == null || "".equals(s.trim())) {
throw new Exception("operate error");
}
return Float.parseFloat(s.trim());
}
if (a5 != -1) {
int a6 = s.indexOf(")");
if (a6 == -1) {
throw new Exception("括号不匹配");
} else {
float f = opt(s.substring(a5 + 1, a6).trim());
s = s.replace(s.substring(a5, a6 + 1), String.valueOf(f));
return opt(s);
}
}
if (a1 != -1) {
return opt(s.substring(0, a1))
+ opt(s.substring(a1 + 1, s.length()));
}
if (a2 != -1) {
return opt(s.substring(0, a2))
- opt(s.substring(a2 + 1, s.length()));
}
if (a3 != -1) {
return opt(s.substring(0, a3))
* opt(s.substring(a3 + 1, s.length()));
}
if (a4 != -1) {
return opt(s.substring(0, a4))
/ opt(s.substring(a4 + 1, s.length()));
}
return Integer.parseInt(s.trim());
}
public static boolean isEquals(Set ts, Set treeSet) {
if (ts.equals(treeSet)) {
return true;
}
return false;
}
}
1 0
- 新人向 JAVA 24点简单程序
- 计算24点的简单程序
- 用java写的一个简单的日历,我的第一个小程序,新人还请前辈们多加指点。
- Java新人
- java新人
- linux find 通配符(新人向)
- 写给自己:写程序需要注意的几点!(新人注意)
- 请对新人宽容点
- 新人登场,来点音响
- 【转帖】『程序员』 [Java]向学JAVA的新人透点绝密!
- Java多线程简单几点
- java 向nodejs 发送请求简单案例
- java程序向图片上加水印
- java 第一个程序 向世界问好
- java程序向指定邮箱发邮件
- 使用Java程序向手机发送短信
- java程序向图片上加水印
- 简单24点游戏
- poj-1159-Palindrome
- HTML
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 7 理解ROS服务和参数
- 卷积计算
- 反射_反射、设置模式、JDK新特性总结
- 新人向 JAVA 24点简单程序
- Python 数据分析 数据挖掘 学习路径图
- 快速幂
- Attempt to invoke virtual method 'void android.graphics.drawable.Drawable.setAlpha(int)' on a null o
- linux详细redis安装和php中redis扩展
- 增强for循环和普通for循环的区别
- -----poj 1321 棋盘问题
- AngularJS 绑定指令 ng-bind
- 怪盗基德的滑翔翼