用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

小游戏算24

2017-10-16 作者: lulu89757举报

[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]; 
	} 
	
}


网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...