保龄球得分计算

起因

  1. 超无聊的一道题,保龄球得分真是麻烦;今天下午偶然看见结对编程,然后就申请了一下,写了这道题; 完全不想解释,超无聊的题,从此不想打保龄球了已经

    代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    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;
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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. 努力吧,这道题写了好久;纠结在算法和实现,重构中;不明所以,唉