以下是一个简单的保龄球记分员的Java解决方案,包含了代码示例:
import java.util.ArrayList;
import java.util.List;
public class BowlingScorer {
private List rolls = new ArrayList<>();
public void roll(int pins) {
rolls.add(pins);
}
public int score() {
int score = 0;
int frameIndex = 0;
for (int frame = 0; frame < 10; frame++) {
if (isStrike(frameIndex)) {
score += 10 + strikeBonus(frameIndex);
frameIndex++;
} else if (isSpare(frameIndex)) {
score += 10 + spareBonus(frameIndex);
frameIndex += 2;
} else {
score += sumOfBallsInFrame(frameIndex);
frameIndex += 2;
}
}
return score;
}
private boolean isStrike(int frameIndex) {
return rolls.get(frameIndex) == 10;
}
private boolean isSpare(int frameIndex) {
return rolls.get(frameIndex) + rolls.get(frameIndex + 1) == 10;
}
private int strikeBonus(int frameIndex) {
return rolls.get(frameIndex + 1) + rolls.get(frameIndex + 2);
}
private int spareBonus(int frameIndex) {
return rolls.get(frameIndex + 2);
}
private int sumOfBallsInFrame(int frameIndex) {
return rolls.get(frameIndex) + rolls.get(frameIndex + 1);
}
}
这个解决方案使用了一个rolls
列表来存储每个投球的得分。roll
方法用于将每个投球的得分添加到列表中。score
方法用于计算总得分。
总得分的计算是通过遍历每个帧来实现的。对于每个帧,首先检查是否是一个strike(全部击倒10个瓶子),如果是,则加上10分加上接下来两次投球的得分。如果不是strike但是是spare(两次投球加起来击倒10个瓶子),则加上10分加上接下来一次投球的得分。如果既不是strike也不是spare,则直接加上两次投球的得分。
最后,返回计算出的总得分。
注意:这只是一个简单的示例,可能没有处理所有的规则,如连续的strikes和spares。您可以根据自己的需求对代码进行扩展和修改。
上一篇:保龄球记分算法
下一篇:暴力破解AES 192位