题解 | #扑克牌大小#
扑克牌大小
https://www.nowcoder.com/practice/d290db02bacc4c40965ac31d16b1c3eb
题目求解思路:
1.判断是否可以进行比较
2.具体判断大小
判断大小的方法:
1.较为繁琐的方法:取手牌一不同的张数情况进行具体对比输出结果;
2.较为便捷的方法:优先判断对王、炸弹的情况,其他情况直接对比第一位数字即可。
import java.util.*; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String input = scan.nextLine(); String handCard1 = input.split("\\-")[0]; String handCard2 = input.split("\\-")[1]; String[] cards1 = handCard1.split(" "); String[] cards2 = handCard2.split(" "); //准备牌大小顺序 List<String> list = Arrays.asList("3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2", "joker", "JOKER"); //判断是否存在比价关系 if (!isComparable(cards1, cards2)) { System.out.println("ERROR"); return ; } //判断大小 if(isDoubleKing(cards1)){ System.out.println(handCard1); }else if(isDoubleKing(cards2)){ System.out.println(handCard2); }else if(isBoom(cards1) && isBoom(cards2)){ System.out.println(list.indexOf(cards1[0]) > list.indexOf( cards2[0]) ? handCard1 : handCard2); }else if(isBoom(cards1)){ System.out.println(handCard1); }else if(isBoom(cards2)){ System.out.println(handCard2); }else { System.out.println(list.indexOf(cards1[0]) > list.indexOf( cards2[0]) ? handCard1 : handCard2); } // if (cards1.length == 1) {//若手牌一仅1张牌 // if (cards2.length == 1) { // System.out.println(list.indexOf(cards1[0]) > list.indexOf( // cards2[0]) ? handCard1 : handCard2); // } else { // System.out.println(handCard2); // } // } else if (cards1.length == 2) { //若手牌一有2张牌 // if (isDoubleKing(cards2) ) { // System.out.println(handCard2); // } else if (isDoubleKing(cards1)) { // System.out.println(handCard1); // } else if(isBoom(cards2)){ // System.out.println(handCard2); // } else { // System.out.println(list.indexOf(cards1[0]) > list.indexOf( // cards2[0]) ? handCard1 : handCard2); // } // }else if(cards1.length==3){//若手牌一有3张牌 // if(cards2.length==3){ // System.out.println(list.indexOf(cards1[0]) > list.indexOf( // cards2[0]) ? handCard1 : handCard2); // }else{ // System.out.println(handCard2); // } // }else if(cards1.length==4){//若手牌一有4张牌 // if(isBoom(cards2)){ // System.out.println(list.indexOf(cards1[0]) > list.indexOf( // cards2[0]) ? handCard1 : handCard2); // }else if(isDoubleKing(cards2)){ // System.out.println(handCard2); // }else{ // System.out.println(handCard1); // } // }else if(cards1.length==5){//若手牌一有5张牌 // if(isBoom(cards2)||isDoubleKing(cards2)){ // System.out.println(handCard2); // }else{ // System.out.println(list.indexOf(cards1[0]) > list.indexOf( // cards2[0]) ? handCard1 : handCard2); // } // } } public static boolean isComparable(String[] cards1, String[] cards2) { //牌的个数相同,可比较 if (cards1.length == cards2.length) return true; //存在炸弹和对王,可比较 if (isDoubleKing(cards1) || isDoubleKing(cards2) || isBoom(cards1) || isBoom(cards2)) return true; return false; } //是否为对王 public static boolean isDoubleKing(String[] cards) { if (cards.length == 2 && ((cards[0].equals("joker") && cards[1].equals("JOKER")) || (cards[1].equals("joker") && cards[0].equals("JOKER")))) return true; return false; } //是否为炸弹 public static boolean isBoom(String[] cards) { if (cards.length == 4 && (cards[0].equals(cards[1]) && cards[1].equals(cards[2]) && cards[2].equals(cards[3]))) return true; return false; } }