24点游戏是经典的纸牌益智游戏。常见游戏规则: 从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。
提高要求:用户初始生命值为一给定值(比如3),初始分数为0。随机生成4个代表扑克牌牌面的数字或字母,由用户输入包含这4个数字或字母的运算表达式(可包含括号),如果表达式计算结果为24则代表用户赢了此局。 1. 程序风格良好(使用自定义注释模板) 2.使用计时器要求用户在规定时间内输入表达式,如果规定时间内运算正确则加分,超时或运算错误则进入下一题并减少生命值(不扣分)。 3.所有成绩均可记录在TopList.txt文件中。
/*
* 中缀表达式转化为后缀表达式:s
* 1.遍历字符串
* 2.当遇到操作数直接输出
* 3.当遇到栈顶为"("直接进站或者为null直接进站
* 4.当遇到")"直接输出至"(";
* 5.当遇到运算符,比较与栈顶的优先级,如果大于,直接进站,小于输出栈内运算符直到遇到"("或者null为止,然后进站;
* 6.当结尾时,直接输出栈中的运算符
* 7.判断operator内是否为null,不为空输出,为null不操作.
* */
public static StringBuffer zhuanHua(String s) {
LinkedList<String> operator = new LinkedList<>();
StringBuffer oper = new StringBuffer();
//String regex = "[a-d]";
//a + b * c + (d * e + f)*g
for (int i = 0; i < s.length(); i++) {
String sb = s.substring(i, i + 1);
//System.out.println(sb);
if (isOperater(sb)) {
if (operator.isEmpty() || operator.get(0).equals("(")) {
operator.push(sb);
} else if (sb.equals(")")) {
while (!(operator.get(0).equals("("))) {
String pop = operator.pop();
oper.append(pop);
}
operator.pop();
} else if (priority(sb) > priority(operator.get(0))) {
operator.push(sb);
} else if (priority(sb) <= priority(operator.get(0))) {
if (operator.contains("(")) {
while (!(operator.get(0).equals("("))) {
String pop = operator.pop();
oper.append(pop);
}
} else {
while (!operator.isEmpty()) {
String pop = operator.pop();
oper.append(pop);
}
}
operator.push(sb);
}
} else {
oper.append(sb);
}
}
if (!operator.isEmpty()) {
for (String s1 : operator) {
oper.append(s1);
}
}
return oper;
}
2./*
* 后缀表达式计算:
* 处理规则:从左到右依次遍历每个数字和符号,遇到数字就进栈,遇到是运算符就将栈顶的两个数字
* 出栈,进行运算,运算结果入栈,一直到最终获得结果.最后送出栈顶的值就是结果
* */
* public static double suan(StringBuffer s) {
LinkedList<Double> list = new LinkedList<>();
for (int i = 0; i < s.length(); i++) {
String substring = s.substring(i, i + 1);
if (isOperater(substring)) {
double pop = list.pop();
// System.out.println(pop+"pop");
double pop1 = list.pop();
//System.out.println(pop1+"pop");
if (substring.equals("+")) {
double a= pop+pop1;
list.push(a);
} else if (substring.equals("-")) {
double a= pop1-pop;
list.push(a);
} else if (substring.equals("*")) {
double a= pop*pop1;
list.push(a);
} else if (substring.equals("/")) {
double a= pop1/pop;
list.add(a);
}
} else {
int a=map.get(substring);
//System.out.println(a);
double b = (double) a;
list.push(b);
}
}
return list.pop();
}
/*判断操作符*/
public static boolean isOperater(String s) {
boolean boo = false;
if (s.equals("=") || s.equals("+") || s.equals("(") || s.equals(")") || s.equals("*") || s.equals("/")) {
boo = true;
}
return boo;
}
/*设定优先级*/
public static Integer priority(String a) {
Map<String, Integer> map1 = new HashMap<>();
map1.put("(", 3);
map1.put(")", 3);
map1.put("+", 1);
map1.put("-", 1);
map1.put("*", 2);
map1.put("/", 2);
Integer integer = map1.get(a);
return integer;
}
}
欢迎各位大牛指点