保龄球得分计算

起因

  1. 超无聊的一道题,保龄球得分真是麻烦;今天下午偶然看见结对编程,然后就申请了一下,写了这道题;

完全不想解释,超无聊的题

代码

 public int getBowlingScore(String bowlingCode) {
        if (bowlingCode==null ||bowlingCode.length()<=0)
            return 0;
        char[] c = bowlingCode.toCharArray();
        int i = 0;
        int X = 0;
        int Y = 0;
        int sum = 0;
        int current = 0;
        int num = 0;
        boolean flag = false;
        while (i < c.length) {
            current = 0;
            num = 0;
            if (c[i] == '|') {
                i++;
                while (i < c.length) {
                    if (flag) {
                        sum += NumofCurrentChar(c[i]) * 2;
                        flag = false;
                    } else
                        sum += NumofCurrentChar(c[i]);
                    i++;
                }
            }
            while (i < c.length && c[i] != '|') {
                int temp = current;
                current = NumofCurrentChar(c[i]);
                if (temp > current) {
                    num = temp;
                } else if (current> temp)
                {
                    num = current;
                    current -= temp;
                }
                    if (X > 0) {
                        if (flag) {
                            sum += current * 2;
                            flag = false;
                        } else
                            sum += current;
                        X--;
                    }
                if (Y > 0) {
                    sum += current;
                    Y--;
                }
                if (c[i] == 'X') {
                    if (X == 1) {
                        flag = true;
                    }
                    X = 2;

                } else if (c[i] == '/') {
                    Y = 1;
                }
                i++;

            }
            sum += num;
            i++;
        }
        return sum;
    }

    private int NumofCurrentChar(char c) {
        int current;
        if (c == '/')
            current = 10;
        else if (c == '-')
            current = 0;
        else if (c == 'X')
            current = 10;
        else
            current = c - '0';
        return current;
    }
 public int getBowlingScore1(String bowlingCode) {
        char[] chars = bowlingCode.toCharArray();
        int i = 0;
        int sum = 0;
        int[] socere = new int[22];
        int x = 0;
        int current = 0;
        while (i < chars.length) {
            current = -10;
            if (chars[i] == '|') {
                while (i < chars.length - 1 && x < socere.length) {
                    i++;
                    socere[x] = NumofCurrentChar(chars[i]);
                    if (socere[x] == -2) {
                        socere[x] = 10;
                    }
                    x++;
                }
            }
            while (i < chars.length && chars[i] != '|') {
                int temp = current;
                current = NumofCurrentChar(chars[i]);
                if (current >= 0 && temp > current)
                    current = temp;
                i++;
                if (x < socere.length)
                    if (current == -2) {
                        socere[x++] = 10;
                        socere[x++] = current;
                    } else {
                        socere[x++] = current;
                    }
            }
            i++;

        }
        System.out.println(Arrays.toString(socere));
        int[] socere2 = new int[10];
        int j = socere2.length - 1;

        while (j >= 0) {
            if (socere[2 * j + 1] == -2) {
                if (j == 9)
                    socere2[j] = socere[2 * j + 2] + socere[2 * j + 3] + 10;

                else if (socere[2 * (1 + j) ] == 10 ) {
                    socere2[j] = 10+ socere[2 * (2 + j) ]+10;
                }
                else if (socere[2*(j+1)] <10)
                {
                    socere2[j] = 10 +socere[2*(j+1)+1];
                }
                socere[2 * j + 1] = 10;
            } else if (socere[2 * j + 1] == -1) {
                socere2[j] = socere[j * 2 + 1 + 1] + 10;
                socere[2 * j + 1] = 10;
            } else
                socere2[j] = socere[(j + 1) * 2 - 1];
            j--;
        }
        j = 0;
        while (j < socere2.length) {
            sum += socere2[j++];
        }
        System.out.println(Arrays.toString(socere2));
        return sum;
    }

    /**
     * 返回当前位置的数值
     *
     * @param c
     * @return
     */
    private int NumofCurrentChar(char c) {
        int current;
        if (c == '/')
            current = -1;
        else if (c == '-')
            current = 0;
        else if (c == 'X')
            current = -2;
        else
            current = c - '0';
        return current;
    }

收获

  1. 努力吧,这道题写了好久,真是麻烦啊;保龄球的得分好复杂;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值