首页 > 代码库 > 打保龄球求分数
打保龄球求分数
初学者写的,好的请借鉴,不好的勿喷!
保龄球积分规则:
保龄球一局由10轮组成。球员前9轮中,除了打出全中球外,每轮都有两次投球机会。第10轮全中时再奖励两次投球机会,奖励球的得分应累计在该局的总分内。如果第10轮为补中,则再奖励一次投球机会,所得分同样累计在该局的总分内。如果从第1轮的第一个球到第10轮的两个奖励全部是一次击倒球瓶的话,即为满分300分。
保龄球成绩记录在记分格上。每局球记分格上共有10格,第1格到第9格各有两个小栏。第10格则有三个小栏。第一栏记录的是第一次击倒的球瓶数,或是记载“全中”的符号即[×]。第二栏记录的是第二次击倒的球瓶数或“补中”的符号即[/]。第10格的第三栏只有在第10轮投球“全中”或“补中”时才用得上。特别注意的是记分栏记录的是每轮得分的累计分,而不是每轮的得分。每一格投球可能出现三种情况:
补中。每轮的第一次掷球未能将全部球瓶击倒,第二次掷球将剩余的球瓶全部击倒,称为“补中”。此轮的得分是10分加上下一次掷球击倒的瓶数。如果该轮第一次掷球未得分,第二次掷球将所有球瓶击倒,也算作为补中。
失球。无论何种情况,在一格的两次投球时,未能击倒所有10个瓶,此轮的分数为击倒的瓶数。在每轮第一击球时可能会出现分瓶,即第一次投球击倒部分球瓶(①号球瓶必须被击倒),余下的两个或两个以上球瓶成分开的形状。出现分瓶多数情况会导致失球。
全中。每轮的第一次掷球将全部球瓶击倒,称为“全中”。这一轮就此结束,不再进行第二次掷球。此轮的得分是10分加下两次投球击倒的瓶数。
第十格的记分情况比较特殊:
如果第一球为全中,则追加两次投球机会,第十格得分为10分加上追加两次投球击倒的瓶数。如果第二次投球未补中,则第十格得分为第十格所击倒的瓶数。如果第二次投球补中,则追加一次投球机会,第十格得分为10分加上追加一次投球击倒的瓶数。
代码:
1 package com.fj; 2 3 import java.util.Scanner; 4 5 public class Bowling { 6 public static void main(String[] args) { 7 Scanner sc = new Scanner(System.in); 8 boolean isContinue = true; 9 int[][] innings = new int[11][4]; 10 int flage = 0; 11 for (int i = 0; i < innings.length && isContinue; i++) { 12 for (int j = 0; j < innings[i].length - 2 && isContinue; j++) { 13 System.out.print("请输入第" + ( i + 1) + "局,第" + (j + 1) + "次击打倒的瓶子数目:"); 14 innings[i][j] = sc.nextInt(); 15 if (i <= 9) { 16 if (j == 0) { 17 if (innings[i][j] > 10 || innings[i][j] < 0) { 18 System.out.println("输入错误!"); 19 j--; 20 }else if (innings[i][j] == 10) { 21 if (i == 9) { 22 flage = 2; 23 } 24 j++; 25 } 26 }else { 27 if (innings[i][j] <0 || innings[i][j] > (10 - innings[i][j - 1])) { 28 System.out.println("输入错误!"); 29 j--; 30 }else { 31 if (i == 9) { 32 if (innings[i][j] + innings[i][j - 1] == 10) { 33 flage = 1; 34 } 35 } 36 } 37 38 } 39 if (flage == 0 && i == 9 && j != 0) { 40 isContinue =false; 41 } 42 } 43 else { 44 if (flage == 2) { 45 if (innings[i][j] > 10 || innings[i][j] < 0) { 46 System.out.println("输入错误!"); 47 j--; 48 } 49 else { 50 if (j == 1) { 51 if (innings[i][j - 1] < 10) { 52 if (innings[i][j - 1] + innings[i][j] > 10) { 53 System.out.println("输入错误!"); 54 j--; 55 } 56 } 57 } 58 } 59 } 60 if (flage == 1) { 61 if (innings[i][j] > 10 || innings[i][j] < 0) { 62 System.out.println("输入错误!"); 63 j--; 64 } 65 else { 66 isContinue = false; 67 } 68 } 69 } 70 } 71 } 72 73 for (int i = 0; i < innings.length - 1; i++) { 74 if (i <= 8) { 75 if (innings[i][0] == 10) { 76 if (innings[i + 1][0] == 10) { 77 innings[i][2] = innings[i][0] + innings[i + 1][0] + innings[i + 2][0]; 78 } 79 else { 80 innings[i][2] = innings[i][0] + innings[i + 1][0] + innings[i + 1][1]; 81 } 82 } 83 else if (innings[i][0] + innings[i][1] == 10){ 84 innings[i][2] = innings[i][0] + innings[i][1] +innings[i + 1][0]; 85 } 86 else { 87 innings[i][2] = innings[i][0] + innings[i][1]; 88 } 89 90 91 } 92 if (i == 9) { 93 if (innings[i][0] == 10) { 94 innings[i][2] = innings[i][0] + innings[i + 1][0] + innings[i + 1][1]; 95 } 96 else if (innings[i][0] + innings[i][1] == 10){ 97 innings[i][2] = innings[i][0] + innings[i][1] + innings[i + 1][0]; 98 }else { 99 innings[i][2] = innings[i][0] + innings[i][1];100 }101 }102 if (i == 0) {103 innings[i][3] = innings[i][2];104 }else {105 innings[i][3] = innings[i - 1][3] + innings[i][2];106 }107 }108 System.out.println("轮数\t第一次击倒数\t第二次击倒数 \t本轮得分\t累计得分");109 for (int i = 0; i < innings.length; i++) {110 System.out.print(i + 1 + "\t");111 for (int j = 0; j < innings[i].length; j++) {112 if (j == 2 || j == 1) {113 System.out.print("\t");114 }115 System.out.print(innings[i][j] + "\t");116 }117 System.out.println();118 }119 }120 }
输出:
请输入第1局,第1次击打倒的瓶子数目:5
请输入第1局,第2次击打倒的瓶子数目:5
请输入第2局,第1次击打倒的瓶子数目:5
请输入第2局,第2次击打倒的瓶子数目:5
请输入第3局,第1次击打倒的瓶子数目:5
请输入第3局,第2次击打倒的瓶子数目:5
请输入第4局,第1次击打倒的瓶子数目:5
请输入第4局,第2次击打倒的瓶子数目:5
请输入第5局,第1次击打倒的瓶子数目:5
请输入第5局,第2次击打倒的瓶子数目:5
请输入第6局,第1次击打倒的瓶子数目:5
请输入第6局,第2次击打倒的瓶子数目:5
请输入第7局,第1次击打倒的瓶子数目:5
请输入第7局,第2次击打倒的瓶子数目:5
请输入第8局,第1次击打倒的瓶子数目:5
请输入第8局,第2次击打倒的瓶子数目:5
请输入第9局,第1次击打倒的瓶子数目:5
请输入第9局,第2次击打倒的瓶子数目:5
请输入第10局,第1次击打倒的瓶子数目:5
请输入第10局,第2次击打倒的瓶子数目:5
请输入第11局,第1次击打倒的瓶子数目:5
轮数 第一次击倒数 第二次击倒数 本轮得分 累计得分
1 5 5 15 15
2 5 5 15 30
3 5 5 15 45
4 5 5 15 60
5 5 5 15 75
6 5 5 15 90
7 5 5 15 105
8 5 5 15 120
9 5 5 15 135
10 5 5 15 150
11 5 0 0 0
打保龄球求分数