基本思路:
算法实现:
根据x值返回1234到k
用Scanner 来输入不同的数,通过输入的数调用printResult(int[] ch)方法来确定是否等于24,如果等于24,分数++;
如果不等于24,生命--;
设计Random方法来实现随机产生四个数,调用printResult(int[] ch)
采用do while分别选择随机生成四个数或者自己输入四个数
ys(double num1,double num2,char o)来设计运算赋予“+ - * /”相应的意义
Result(int[] ch,char[] o)方法统计结果,当结果为24时输出结果
printResult(int[] ch)方法统计所有结果数目
具体代码实现如下
package jj;
import java.util.Scanner;
import java.util.Random;
public class g
{
public static void main(String args[]) {
int count=0;
int life=3;
int fenshu =0;
int[] ch=new int[4];//声明数组
int c,d;
Scanner sc=new Scanner (System.in);
System.out.println("*******24点纸牌游戏******");
do
{
System.out.println("生成纸牌:\n");
Random( ch) ;//函数调用
printResult(ch);//函数调用
System.out.println("1.继续游戏 2.结束 3.挑战自我\n");
c=sc.nextInt();
}
while(c==1);
do
{
System.out.println("输入纸牌:\n");
for(int i=0;i<4;i++){
ch[i]=sc.nextInt();
// int f1=sc.nextInt();
// int f2=sc.nextInt();
// int f3=sc.nextInt();
// int f4=sc.nextInt();
}
printResult(ch);//函数调用
// if(count==0){
// life--;
// }
// if(count !=0){
// fenshu++;
// }
// if(life==0){
// break;
// }
// System.out.println("共"+count+"种方法");
// System.out.println("生命"+life +" "+"分数 "+fenshu);
System.out.println("1.继续游戏 2.结束 3.挑战自我\n");
d=sc.nextInt();
}
while(d==3);
sc.close();
}
//private static void printResult(int f1, int f2, int f3, int f4) {
// // TODO Auto-generated method stub
//
//}
//根据x值返回1到J,Q,K
public static char Card(int x)
{
if(x==1)
return 'A';
if(x<10)
return (char)(x+'0');
else if(x==10)
return '0';
else if(x==11)
return 'J';
else if(x==12)
return 'Q';
else if(x==13)
return 'K';
return 0;
}
//随机生成四个数
public static void Random(int[] ch)
{
int i;
Random random=new Random();
for(i=0;i<4;i++)
{
ch[i]=(int)(random.nextInt(13)+1);
System.out.print(Card(ch[i])+" ");
}
System.out.println();
}
//四个运算符的运算
public static double ys(double num1,double num2,char o)
{
double result=0;
switch(o)
{
case '+':
result=num1+num2;
break;
case '-':
{
if(num1>=num2)
result=num1-num2;
else
result=num2-num1;
}
break;
case '*':
result=num1*num2;
break;
case '/':
result=num1/num2;
break;
default :
break;
}
return result;
}
//如果通过运算算得的结果为24,则输出结果
public static int Result(int[] ch,char[] o)
{
double t;
int a=ch[0];
int b=ch[1];
int c=ch[2];
int d=ch[3];
//1.((A*B)*C)*D
t=0;
t=ys(ys(ys(a,b,o[0]),c,o[1]),d,o[2]);
if(t==24)
{
System.out.println("("+"("+"("+Card(ch[0])+o[0]+Card(ch[1])+")"+o[1]+Card(ch[2])+")"+o[2]+Card(ch[3])+")");
return 1;
}
//2.(A*(B*C))*D
t=0;
t=ys(ys(a,ys(b,c,o[1]),o[0]),d,o[2]);
if((t-24)==0)
{
System.out.println("("+"("+Card(ch[0])+o[0]+"("+Card(ch[1])+o[1]+Card(ch[2])+")"+")"+Card(ch[2])+Card(ch[3])+")");
return 1;
}
//3.(A*B)*(C*D)
t=0;
t=ys(ys(a,b,o[0]),ys(c,d,o[2]),o[1]);
if((t-24)==0)
{
System.out.println("("+"("+Card(ch[0])+o[0]+Card(ch[1])+")"+o[1]+"("+Card(ch[2])+o[2]+Card(ch[3])+")"+")");
return 1;
}
//4.A*(B*(C*D))
t=0;
t=ys(a,ys(b,ys(c,d,o[2]),o[1]),o[0]);
if((t-24)==0)
{
System.out.println("("+Card(ch[0])+o[0]+"("+Card(ch[1])+o[1]+"("+Card(ch[2])+o[2]+Card(ch[3])+")"+")"+")");
return 1;
}
//5.A*((B*C)*D)
t=0;
t=ys(a,ys(ys(b,c,o[1]),d,o[2]),o[0]);
if((t-24)==0)
{
System.out.println("("+Card(ch[0])+o[0]+"("+"("+Card(ch[1])+o[1]+Card(ch[2])+")"+o[2]+Card(ch[3])+")"+")1");
return 1;
}
return 0;
}
//输出结果的数目
public static void printResult(int[] ch)
{
int life=3;
int fenshu =0;
char[] O={'+','-','*','/'};
char[] o =new char[3];
int i,j,k;
int count=0;
for(i=0;i<4;i++)//三层for循环列出了所有运算符可能出现的情况
{
for(j=0;j<4;j++)
{
for(k=0;k<4;k++)
{
o[0]=O[i];
o[1]=O[j];
o[2]=O[k];
if(Result(ch,o)==1) //如果输出函数返回值为真,输出结果数目递加
count++;
}
}
}
if(count==0){
life--;
}
else{
fenshu++;
}
System.out.println("共"+count+"种方法");
System.out.println("生命"+life +" "+"分数 "+fenshu);
}
}