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