XingxingHuang / thoughtworks

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

thoughtworks

符号表示:

 X 表示一个 strike
 / 表示一个 spare
 - 表示一个 miss
 | 表示一格的分界线
 || 之后的字符表示最后一格的额外机会

规则总结:

* 一共10 个frame由 | 隔开。
* 最后一个frame后面由||隔开表示额外机会。
* 每个frame中,第一次就击倒10个球,X 对应10分,加上接下来两球分数和
* 每个frame中,两个球击倒10个球,/ 对应10分,加上接下来一球分数和。
* 每个frame中,两个球没全部击倒,分数为击倒的分数。
* 最后frame中,X 得到额外两次机会;/ 得到额外一次发球机会,计算击倒分数。

###程序分析

  1. 字符串处理。
  2. 采用循环一次读入每个frame的情况
  3. 每一个frame的分数与下一个frame相关,需要记录当前frame的情况。
  4. 最后一个frame的处理

github参考资料

javac -cp .:junit-4.11.jar BowlingGameTest.java

java -cp .:junit-4.11.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore BowlingGameTest


写一个程序给保龄球比赛计分的程序

输入: 描述保龄球比赛成绩的字符串 (描述见下面)
输出: 整数分

计数规则

每一局保龄球比赛,也就是我们这里的一行, 都有 10 格。格被称之为“frame”。 在每一格里, 玩家有两次机会试图击倒全部 10 个瓶。

如果第一次就击倒了全部 10 个瓶,这称之为“strike”。这一格就结束了。 这一格的分数等于 10 加上接下来两球击倒的瓶数的总和。

如果一格中的第二个球击倒了全部 10 个瓶,称之为“spare”。这一格就结束了。 这一格的分数等于 10 加上接下来一个球击倒的瓶数。

如果两个球之后,仍然有瓶子没有被击倒,那么这一格的分数就是两次击倒的瓶数的总和。

如果你在最后一格(第 10 格)拿到一个 spare,你就会得到一次额外的发球机会。 如果你在最后一格拿到了 strike,你就会得到两次额外的机会。 如果额外的机会击倒了全部的球,不会重复之前的流程,额外机会的分数只用来计算最后一格的分数。

游戏的分数为所有格分数的总和。

举例

X 表示一个 strike
/ 表示一个 spare
- 表示一个 miss
| 表示一格的分界线
|| 之后的字符表示最后一格的额外机会

实例 1

输入:X|X|X|X|X|X|X|X|X|X||XX
输出:300

10 格 10 个 strike,两个额外机会都是 strike。

  • 每格的分数 = 10 + 接下来两球的分数 = 10 + 10 + 10 = 30
  • 总共的分数 = 10 格 X 30 = 300

实例 2

输入:9-|9-|9-|9-|9-|9-|9-|9-|9-|9-||
输出:90

每格第一个球击倒了 9 个瓶,第二个球一个没击倒,全都 miss 了。 没有额外机会。

  • 每一格 9 分
  • 总共的分数 = 10 格 X 9 = 90 分

实例 3

输入:5/|5/|5/|5/|5/|5/|5/|5/|5/|5/||5
输出:150

每格第一个球击倒了 5 个瓶,第二个球击倒了剩下的 5 个,得到了一个 spare。 一个额外机会,击倒了 5 个瓶。

  • 每格的分数 = 10 + 下一个球的分数 = 10 + 5 = 15
  • 总共的分数 = 10 格 * 15 = 150

实例 4

输入:X|7/|9-|X|-8|8/|-6|X|X|X||81
输出:167

答题流程

  1. 请用户仔细阅读题目描述
  2. 使用git clone克隆模板仓库,或fork模板仓库到自己的github
  3. 请在 src/main/java/BowlingGame.java 完成 getBowlingScore 函数
  4. 请使用git提交(commit),并上传(push)代码,之后将github仓库地址(用户自建的) eg:(https://github.com/username/repo) 填入到git仓库地址一栏
  5. 获取分支,填入到git仓库分支一栏
  6. 提交
  7. 等待结果

About


Languages

Language:Java 100.0%