题解 | #扑克牌大小#

扑克牌大小

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;
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务