起因
超无聊的一道题,保龄球得分真是麻烦;今天下午偶然看见结对编程,然后就申请了一下,写了这道题;
完全不想解释,超无聊的题
代码
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;
}
收获
努力吧,这道题写了好久,真是麻烦啊;保龄球的得分好复杂;