保齡球得分計算

起因

  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. 努力吧,這道題寫了好久,真是麻煩啊;保齡球的得分好複雜;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章