import java.util.*; import java.util.List; import java.util.ArrayList; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str=in.nextLine();//获取两手牌的字符串 String[] pp=str.split("-");//按照分隔符把两手牌放入字符串数组 String[] poker1=pp[0].split(" ");//按照空格分开,第一手牌(现在数组里面没有空格了,每一个下标都对应一张牌) String[] poker2=pp[1].split(" ");//按照空格分开第二手牌 //0,首先把大小王的情况排除掉(pp数组的0,1下标是两手牌的全部) if(pp[0].equals("joker JOKER")||pp[1].equals("joker JOKER")){ //出现王炸了,最大,没必要比了 System.out.println("joker JOKER"); return; } //剩下的就不是王炸了 int size1=poker1.length;//获取两手牌的长数, int size2= poker2.length; //1,炸弹的情况 //两边都是炸弹 if(size1==4&&size2==4){ compare(poker1,poker2);//比较牌的大小并且输出 return;//必须return,不然会影响项目的判断 } //一边是炸弹的情况(因为出现两手都是炸弹的情况已经结束退出了,所以这里只会有一手是炸弹的情况 if(size1==4){//判断谁是炸弹,谁就大( prt(poker1); return; } if (size2==4){ prt(poker2); return; } //2,单个的情况 if (size1==1&&size2==1){ compare(poker1,poker2);//比较大小并且输出大的 return; } //3,对子的情况(这里的出现单个是两手牌都是对子,炸弹和对王的情况上面已经return了) if (size1==2&&size2==2){ compare(poker1,poker2);//比较大小并且输出大的 return; } //4,顺子的情况 if (size1==5&&size2==5){ compare(poker1,poker2);//比较大小并且输出大的 return; } //三个的情况 if (size1==3&&size2==3){ compare(poker1,poker2);//比较大小并且输出大的 return; } System.out.println("ERROR");//走到这里就代表着是不能比较的牌了 } public static void prt(String[] arr){//打印较大的那手牌的方法 for(int i=0;i< arr.length-1;i++){//不打印最后一个,因为会加上空格 System.out.print(arr[i]); System.out.print(" ");//拼接空格 } System.out.print(arr[arr.length-1]);//把最后一个补上去 } public static void compare(String [] poker1,String [] poker2){//比较两手牌的大小,输出大的那个 //首先判断2的情况,因为大小王外2最大 if (poker1[0].equals("2")){ prt(poker1); return; } if (poker2[0].equals("2")){ prt(poker2); return; } //然后判断10的特殊情况(因为不能使用compareTo方法进行比较1,2,.....9与10的大小,因为10按照此方法比较是小于前面的 if (poker1[0].equals("10")&&poker2[0].compareTo("9")<0){//10是特殊情况不能使用compareTo方法比较第一手牌是10,且第二手牌大小小于9 prt(poker1);//第一手牌大,输出 return; } if (poker2[0].equals("10")&&poker1[0].compareTo("9")<0){ prt(poker2);//第二手牌大 return; } if(poker1[0].compareTo(poker2[0])>0){//compareTo方法比较字符串大小,若1比2大则返回值大于0,相等则等于0....(比较第一个就行) prt(poker1);//第一手牌大,输出 }else {//反之第二手牌大 prt(poker2); } } }
本题的关键就是合理的利用split方法把字符串分开,然后在判断的时候要注意2,和10的比较,不能使用comparTo方法,而是得单独比较
--->"3".compareTo("10")的结果为什么是2
字符串之间的比较是根据它们的字典序进行的。当你调用compareTo()方法比较两个字符串时,它将按照字符顺序逐个比较对应位置的字符。在这种情况下,"3"和"10"都是字符串而不是数字,因此它们的比较是基于字符的ASCII码值。
在ASCII码中,"3"的值是51,而"1"的值是49。因此,比较过程可以被解读为51-49,结果为2。这意味着"3"在字典顺序中排在"10"之前