[java]代码库
import javax.swing.*;
import java.util.*;
public class GameCount24{
public static void main(String args[]){
int[] arr1 = new int[4];
String result = "";
String pai;
String input;
int i;
int out;
Random ran = new Random();
for(i=0;i<arr1.length;i++){
arr1[i] = ran.nextInt(13)+1;
switch(arr1[i]){
case 1: pai = "A";break;
case 11: pai = "J";break;
case 12: pai = "Q";break;
case 13: pai = "K";break;
default : pai = String.valueOf(arr1[i]);
}
result += pai + " ";
}
input = JOptionPane.showInputDialog("取出的牌为:"+result);
//input = "3+2*(4-2)=";
char[] in = new char[input.length()];
for(i=0;i<input.length();i++){
in[i] = input.charAt(i);
}
Caclulate ca = new Caclulate();
//JOptionPane.showMessageDialog(null,n);
out = ca.calculator(in,arr1);
if (out == 24)
JOptionPane.showMessageDialog(null,input +out+"胜利!");
else
JOptionPane.showMessageDialog(null,input +out+"失败!");
//System.out.println( "结果 :"+ca.calculator(in));
}
}
class Caclulate{
int n0=30;
int[] s1 = new int[n0+1]; //操作数栈
char[] s2 = new char[n0+1]; //运算符栈
int t1,t2;
int PaiCnt;
void calcu() //一次计算
{
int x1,x2,x;
char p;
//弹出一个运算符
p=s2[t2--];
//弹出两个操作数
x2=s1[t1--];
x1=s1[t1--];
//进行一次运算
switch(p) {
case '+':x=x1+x2;break;
case '-':x=x1-x2;break;
case '*':x=x1*x2;break;
default:x=x1/x2;
}
//结果压入操作数栈
s1[++t1]=x;
System.out.println("结果压入操作数栈s1["+t1+"]="+x);
}
void CheckPai(int[]pai)
{
int i=0,j=0;
/*if(t1!=4){
System.out.println("牌数不为4");
System.exit(0);
}*/
for(i=0;i<t1;i++){
for(j=0;j<4;j++)
if(s1[i]==pai[j])break;
if(j>=4){
System.out.println("牌"+s1[i]+"非法");
System.exit(0);
}
}
}
int calculator(char[]f,int[]pai)
{
int v,i=0,j=0;
char[] p = f;
t1=t2=0; //设置空栈
PaiCnt=0;
if(p[f.length-1]!='='){
System.out.println("字符串以'='结束");
System.exit(0);
}
while (p[i]!='=')
switch(p[i]) {
case '+': case '-':
while (t2!=0&&(s2[t2]!='('))
//执行先遇到的加、减、乘、除运算
calcu();
//当前运算符进栈
s2[++t2]=p[i];
//读下一个字符
System.out.println("运算符进栈s2["+t2+"]="+s2[t2]);
i++;
break;
case '*': case '/':
if (t2!=0&&(s2[t2]=='*')||(s2[t2]=='/'))
//执行先遇到的乘、除运算
calcu();
//当前运算符进栈
s2[++t2]=p[i];
//读下一个字符
i++;
System.out.println("运算符进栈s2["+t2+"]="+s2[t2]);
break;
case '(':
//左括号进栈
s2[++t2]=p[i];
//读下一个字符
i++;
System.out.println("运算符进栈s2["+t2+"]="+s2[t2]);
break;
case ')':
while (s2[t2]!='(')
//执行括号内的加、减、乘、除运算
calcu();
//弹出左括号
t2--;
//读下一个字符
System.out.println("弹出左括号");
i++;
break;
default:
//把字符串转换成整数值
v=0;
do {
v = 10*v+p[i]-'0'; //将一个数字字符或连续的数字字符转换为数值类型的量
i++;
} while((p[i]>='0')&&(p[i]<='9'));
//操作数进栈
s1[++t1]=v;
CheckPai(pai);
PaiCnt++;
System.out.println("操作数进栈s1["+t1+"]="+s1[t1]);
//num[j++]=v;
};
//执行先遇到的加、减、乘、除运算
while (t2!=0) calcu();
//返回结果
return s1[t1];
}
}
初级程序员
by: yebin 发表于:2018-05-04 20:09:36 顶(0) | 踩(0) 回复
1111
回复评论