* 说明:棋牌
* 共有52张普通牌面,牌面为2,3,4,5,6,7,8,9,10,J,Q,K,A之一,大小递增,各四张;每人抓三张牌。两人比较手中三张牌大小,大的为胜。
* 规则:
* 1、三张牌一样即为豹子
* 2、三张牌相连为顺子(A23不是顺子)
* 3、有且仅有两张牌一样的为对子
* 豹子>顺子>对子>普通牌型
* 在牌型一样时,比较牌型数值大小(如AAA>KKK,QAK>534,QQ2>10104)二人均无特殊牌型时,依次比较三张排中最大的。
* 大的人获胜,如果最大的牌一样,则比较第二大,以此类推(如37k>89Q)如二人牌面相同,则为平局。
*
* 输入描述:输入两个字符串代表两个玩家的牌(如:“10KQ”"354")先输入的玩家1,后输入的玩家2
* 输出描述:1代表玩家1赢;0代表平局;-1代表玩家2赢;-2代表不合法的输入
* 输入例子:KQ3 3Q9,10QA 6102,5810 7KK
* 输出例子:1,1,-1
实现代码与思路:
public class Chess {
/**
* 方法一:
* 思路:(1)将牌数字化2-14
* (2)将牌进行排序
* (3)规定牌型,4-豹子,3-顺子,2-对子,1-普通
* (4)比较牌型数值,如果牌型一样,进入(5)
* (5)比较牌值大小
*/
private static int compareChecss1(String[] params1,String[] params2){
int num=-2;
int num1=ChecssType1(params1);
int num2=ChecssType1(params2);
// System.out.println("方式一牌值比较:"+num1+","+num2);
if(num1==0 || num2==0){ //判断不合法输入
}else if(num1>num2){
num= 1;
}else if(num1
}else if(num1==num2){
num= compareChecss(params1,params2);
}
return num;
}
private static int compareChecss(String[] params1,String[] params2){
int num=0;
List
List
if(lists==null || lists2==null){ //判断不合法输入
return num=-2;
}
// System.out.println("方式一等值牌型比较:"+lists.toString()+","+lists2.toString());
for (int i = 0; i
num= 1;
break;
}else if(lists.get(i)
break;
}
}
return num;
}
/**
* 方式二:
* (1)将牌进行数字化,2-14,
* (2)排序
* (3)规定:
* ①普通牌型不动
* ②如果是对子&#xff0c;将对子牌值*10倍(保证&#xff1a;普通牌值最大14*3<对子最小牌值2*25)
* ③如果是顺子&#xff0c;将顺子牌值*100倍(保证&#xff1a;对子最大牌值140*3<顺子最小牌值2*250)
* ④如果是豹子&#xff0c;将豹子牌值*1000倍(保证&#xff1a;顺子最大牌值1400*3<豹子最小牌值2*2500)
* (4)比较牌值大小
*/
private static int compareChecss2(String[] params1,String[] params2){
int num&#61;-2;
int num1&#61;ChecssType2(params1);
int num2&#61;ChecssType2(params2);
// System.out.println("方式二牌值比较&#xff1a;"&#43;num1&#43;","&#43;num2);
if(num1&#61;&#61;0 || num2&#61;&#61;0){ //不合法输入
}else if(num1>num2){
num&#61; 1;
}else if(num1
}else if(num1&#61;&#61;num2){
num&#61; 0;
}
return num;
}
/**
* 方式一
* 判断牌型
* &#64;param data
* &#64;return
*/
private static int ChecssType1(String[] data) {
List
int type &#61; 1;
int num&#61;0;
if (data !&#61; null) {
Set
type &#61; sets.size();
// 判断豹子&#xff0c;对子
switch (type) {
case 1:
type &#61; 4;
break;
case 2:
type &#61; 2;
break;
case 3:
for (String str : sets) {
num&#61; checkToNumber(str);
if(num&#61;&#61;0){//不合法输入
return type;
}
lists.add(checkToNumber(str));
}
// 倒叙排列
Collections.sort(lists);
Collections.reverse(lists);
if (lists.get(0) &#61;&#61; (lists.get(1) &#43; 1) && (lists.get(2) &#43; 1) &#61;&#61; lists.get(1)) {
type &#61; 3;
} else {
type &#61; 1;
}
break;
default:
type &#61; 0;
break;
}
}
return type;
}
/**
* 方式二
* 判断牌型,并改变牌值
* &#64;param data
* &#64;return
*/
private static int ChecssType2(String[] data) {
int type &#61; 0;
if (data !&#61; null) {
List
if(list!&#61;null){
if(list.get(0)&#61;&#61;list.get(1) && list.get(2)&#61;&#61;list.get(1)){ //豹子
type&#61;list.get(0)*2500;
type&#61;type&#43;type&#43;type;
}else if(list.get(0)&#61;&#61;(list.get(1)&#43;1) && (list.get(2)&#43;1)&#61;&#61;list.get(1)){//顺子
type&#61;list.get(0)*250&#43;list.get(1)*250&#43;list.get(2)*250;
}else if(list.get(0)&#61;&#61;list.get(1) || list.get(2)&#61;&#61;list.get(1)){ //对于
type&#61;list.get(0)*25&#43;list.get(1)*25&#43;list.get(2)*25;
}else{
type&#61;list.get(0)&#43;list.get(1)&#43;list.get(2);
}
}
}
return type;
}
/**
* 排序
*/
private static List
List
int num&#61;0;
if(data&#61;&#61;null || data.length<&#61;0){
return null;
}else{
for (String params : data) {
num&#61; checkToNumber(params);
if(num&#61;&#61;0){ //不合法输入
return null;
}
lists.add(checkToNumber(params));
}
// List
//倒叙排列
Collections.sort(lists); //顺序排列
Collections.reverse(lists);//翻转
return lists;
}
}
/**
* 将牌进行数字化2-14
*/
private static int checkToNumber(String params){
int num&#61;0;
if(params!&#61;null && params.length()>0){
params&#61;params.toUpperCase();
if(params.equals("A") || params.equals("J") || params.equals("Q") || params.equals("K")){
switch (params.toUpperCase()) {
case "J":
num&#61;11;
break;
case "Q":
num&#61;12;
break;
case "K":
num&#61;13;
break;
default:
num&#61;14;
break;
}
}else{
num&#61;Integer.parseInt(params);
if(num<2 || num>10){//不合法输入
num&#61;0;
}
}
}
return num;
}
/**
* 输出结果
*/
private static void printResult(int params){
switch (params) {
case 1:
System.out.println("玩家1赢&#61;&#61;&#61;&#61;&#61;"&#43;params);
break;
case 0:
System.out.println("平局&#61;&#61;&#61;&#61;&#61;&#61;&#61;"&#43;params);
break;
case -1:
System.out.println("玩家1赢&#61;&#61;&#61;&#61;&#61;&#61;"&#43;params);
break;
default:
System.out.println("输入不合法&#61;&#61;&#61;&#61;&#61;&#61;"&#43;params);
break;
}
}
public static void main(String[] args) {
String[] data1_1&#61;{"K","Q","3"};String[] data2_1&#61;{"3","Q","9"};
String[] data1_2&#61;{"10","Q","A"};String[] data2_2&#61;{"6","10","2"};
String[] data1_3&#61;{"5","8","10"};String[] data2_3&#61;{"7","k","k"};
String[] data1_4&#61;{"6","3","2"};String[] data2_4&#61;{"7","4","J"};
// String[] data1_5&#61;{"10","10","2"};String[] data2_5&#61;{"K","7","7"};
// String[] data1_6&#61;{"J","K","J"};String[] data2_6&#61;{"9","2","6"};
// String[] data1_7&#61;{"6","8","K"};String[] data2_7&#61;{"2","7","A"};
System.out.println("&#61;&#61;&#61;&#61;&#61;方式1——打印比较结果1&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;");
printResult(compareChecss1(data1_1,data2_1));
System.out.println("&#61;&#61;&#61;&#61;&#61;方式2——打印比较结果1&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;");
printResult(compareChecss2(data1_1,data2_1));
System.out.println("&#61;&#61;&#61;&#61;&#61;方式1——打印比较结果2&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;");
printResult(compareChecss1(data1_2,data2_2));
System.out.println("&#61;&#61;&#61;&#61;&#61;方式2——打印比较结果2&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;");
printResult(compareChecss2(data1_2,data2_2));
System.out.println("&#61;&#61;&#61;&#61;&#61;方式1——打印比较结果3&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;");
printResult(compareChecss1(data1_3,data2_3));
System.out.println("&#61;&#61;&#61;&#61;&#61;方式2——打印比较结果3&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;");
printResult(compareChecss2(data1_3,data2_3));
System.out.println("&#61;&#61;&#61;&#61;&#61;方式1——打印比较结果4&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;");
printResult(compareChecss1(data1_4,data2_4));
System.out.println("&#61;&#61;&#61;&#61;&#61;方式2——打印比较结果4&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;");
printResult(compareChecss2(data1_4,data2_4));
}
}