题解 | #扑克牌大小#
扑克牌大小
https://www.nowcoder.com/practice/d290db02bacc4c40965ac31d16b1c3eb
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String a;
StringBuffer bu = new StringBuffer();
String joker = "joker JOKER\n";
String err = "ERROR\n";
try {
a = in.readLine();
} catch (IOException e) {
throw new RuntimeException(e);
}
char[] former = new char[5];
char[] latter = new char[5];
int[] cardNum = parse(former, latter, a);
if (former[0] == 'r' && former[1] == 'R' || latter[0] == 'r' &&
latter[1] == 'R') bu.append(joker);//有一个是王炸,则输出王炸
else {//没有王炸
if (cardNum[0] == 4 || cardNum[1] == 4) {//至少一个是炸弹
if (cardNum[0] != 4) outCard(bu, latter,
cardNum[1]);//后面的是炸弹,输出后面的
else if (cardNum[1] != 4) outCard(bu, former,
cardNum[0]);//前面的是炸弹,输出前面的
else {//比较牌面大小
if (transfer(former[0]) > transfer(latter[0])) outCard(bu, former, cardNum[0]);
else outCard(bu, latter, cardNum[1]);
}
} else {//没有普通的炸弹
if (cardNum[0] != cardNum[1]) bu.append(err);//长度不等,不能比较大小
else {//长度相同比较第一张牌的大小
if (transfer(former[0]) > transfer(latter[0])) outCard(bu, former, cardNum[0]);
else outCard(bu, latter, cardNum[1]);
}
}
}
System.out.print(bu);
}
/**
* 解析牌面
* @param former 前面的牌,存储最后一个字符,如 6 7 8 9 10,存储6,7,8,9,0
* @param latter
* @param a 输入字符串
* @return 返回前后牌的长度
*/
public static int[] parse(char[] former, char[] latter, String a) {
char[] charAy = a.toCharArray();
int[] cardNum = new int[2];
char n = 0;
int i = 0, l = charAy.length, noFr = 0, noLr = 0;
boolean isLr = false;
while (i < l) {
if (charAy[i] == '-') {
isLr = true;//开始存储后面的牌
former[noFr++] = n;
n = 0;
} else if (charAy[i] == ' ') {
if (!isLr) former[noFr++] = n;
else latter[noLr++] = n;
n = 0;
} else {
n = charAy[i];
if (i == l - 1) latter[noLr++] = n;
}
i++;
}
cardNum[0] = noFr;
cardNum[1] = noLr;
return cardNum;//
}
/**
* 将字符数组转化为具体的牌
* @param bu 牌面字符串
* @param arr 字符数组
* @param l 牌的张数
*/
public static void outCard(StringBuffer bu, char[] arr, int l) {
int k = 0;
while (k < l) {
if (arr[k] == '0') {
if (k < l - 1) bu.append("10 ");
else bu.append("10\n");
} else if (arr[k] == 'r') {
if (k < l - 1) bu.append("joker ");
else bu.append("joker\n");
} else if (arr[k] == 'R') {
if (k < l - 1) bu.append("JOKER ");
else bu.append("JOKER\n");
} else {
if (k < l - 1) bu.append(arr[k]).append(" ");
else bu.append(arr[k]).append("\n");
}
k++;
}
}
/**
* 将牌的字符数组转化为具体的牌面大小
* @param a
* @return 返回int型用于比较
*/
public static int transfer(char a) {
int rank = 0;
switch (a) {
case '0':
rank = 8;
break;
case 'r':
rank = 14;
break;
case 'R':
rank = 15;
break;
case '2':
rank = 13;
break;
case '3':
rank = 1;
break;
case '4':
rank = 2;
break;
case '5':
rank = 3;
break;
case '6':
rank = 4;
break;
case '7':
rank = 5;
break;
case '8':
rank = 6;
break;
case '9':
rank = 7;
break;
case 'J':
rank = 9;
break;
case 'Q':
rank = 10;
break;
case 'K':
rank = 11;
break;
case 'A':
rank = 12;
break;
}
return rank;
}
}