Java程序(24点游戏)

24点游戏规则:系统随机出1-10(J,Q,K都看作1)之内的4个数,然后用户通过这四个数通过加、减、乘、除来使得计算结果为24,然后用户将计算的式子输入,系统进行判断式子正不正确。

大致思路是:

先让用户输入用户名:

Scanner scanner=new Scanner(System.in);
System.out.println("请输入玩家的用户名:");
username=scanner.nextLine();

使用for循环让系统随机给出4个数,用数字11,12,13分别当做J,Q,K,但是在计算时将J,Q,K当做1来计算。

System.out.println("给出4个随机数:");
for (int i = 0; i < 4; i++) {
    //用数字11,12,13分别当做J,Q,K
    int num=(int)Math.round(Math.random()*13+1);
    //char ch;
    switch (num){
        case 11:
            //ch='J';
            System.out.print("J"+"\t");
            break;
        case 12:
            //ch='Q';
            System.out.print("Q"+"\t");
            break;
        case 13:
            //ch='K';
            System.out.print("K"+"\t");
            break;
        default:
            System.out.print(num+"\t"); 
    }
}

核心代码是在于计算用户输入的表达式,因为用户输入的表达式各种各样,所以以下代码中还存在一些bug,并不完整。

//biaoda用来接收用户输入式子
String biaoda="2+2+2*10";
int index_first=biaoda.indexOf("(");
int index_last=biaoda.indexOf(")");
//
if(index_last==-1){
    //字符串有长度函数length()
    index_last=biaoda.length();
}
int num1=0;
        
char flag='|';
        num1=test_for(index_first+1,index_last,num1,biaoda,flag);
        if(index_last<biaoda.length()){
            num1=test_for(index_last+1,biaoda.length(),num1,biaoda,flag);
        }
        //再计算括号外面的结果
        //循环计算结束,打印全局的num1
        System.out.println(num1);
    }
   
    public static int test_switch(char flag,int num1,int num2){
        switch(flag){
            case '|':
                //证明没有操作

                if (num2==0) {
                    num1 += 9;
                }else{
                    num1=num2;
                }
                break;
            case '+':
                //加减乘除=后面的数值还是需要变化,不是固定的1

                if (num2==0){
                    num1+=9;
                }else{
                    num1+=num2;
                }
                break;
            case '-':

                if (num2==0){
                    num1-=9;
                }else{
                    num1-=num2;
                }
                break;
            case '*':
                //num2是0,不能做乘法
                if(num2!=0){
                    num1*=num2;
                }else{
                    num1*=10;
                }

                break;
            case '/':
                //num2,不能做除法
                if(num2!=0){
                    num1/=num2;
                }else{
                    num1/=10;
                }

        }

        //如果有全局,在计算中还有全局变量参与,最后返回全局
        return num1;
    }
   
    public static int test_for(int start,int end,int num1,String biaoda,char flag) {
        for (int i = start; i < end; i++) {
            //()内的字符全部取出,碰到数字记录,一个加法的和是由被加数和加数决定的
            //这是记录加数和被加数的;也可以sum和num的关系,num是记数的,sum是求和的
            //charAt(i)输出的字符可能是J ,Q,K。如果直接接收整型不合适,这里用一个中间变量
            //这里把num1记录当前的字符
            char num1_mid = biaoda.charAt(i);
            
            switch (num1_mid) {
                case 'J':
                    num1 = test_switch(flag, num1, 1);
                    break;
                case 'Q':
                    num1 = test_switch(flag, num1, 1);
                    break;
                case 'K':
                    num1 = test_switch(flag, num1, 1);
                    break;
                case '+':
                    flag = '+';
                    break;
                case '-':
                    //只记录,不能计算
                    flag = '-';
                    break;
                case '*':
                    flag = '*';
                    break;
                case '/':
                    flag = '/';
                    break;
                default:
                    num1 = test_switch(flag, num1, Integer.parseInt(num1_mid + ""));
            }
        }
        return num1;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值