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"之前

京公网安备 11010502036488号