保龄球计分

规则:
保龄球的计分规则:

  1. 每一局总共有十轮。

  2. 每一轮共有十支球瓶,最多可以投两球,要尽量在两球之内把球瓶全部击倒。

  3. 如果第一球就把全部的球瓶都击倒了,也就是“STRIKE”,本轮完成。
    STRIKE的得分是10分再加奖励分,奖励分为后面两球的倒瓶数。

  4. 如果第一球没有全倒时,就要再打一球,如果剩下的球瓶全都击倒,
    也就是“SPARE”。 SPARE所得分数为10分再加奖励分,
    奖励分为后面一球的倒瓶数。

  5. 如果第二球也没有把球瓶全部击倒,
    分数就是第一球加第二球倒的瓶数。

  6. 如果到第10轮,如果第10轮为STRIKE或SPARE时,
    可以分别继续击球2次或1次, 该额外的击球仅用于奖励分的计数。

  7. 全部十轮的得分相加就等于这一局的总得分。
    实现:

import java.util.Arrays;

/**
 * 保龄球的计分规则
 *
 * @author clown
 * @version 1.0
 * @date 2021/3/16 12:22
 */
public class Bowling {
    /**
     * 计数器
     */
    int count = 0;

    /**
     * 存放数据
     */
    int[] space = new int[21];
    int spaceIndex = 0;

    /**
     * 计总分
     */
    int score;

    /**
     * 增加
     * @param n 每投掷一球推倒的瓶子数目
     */
    public void roll(int n) {
        space[spaceIndex++] = n;
    }


    /**
     * 获取总轮的分数
     */
    public int getScore() {
        for (int i = 0; i < space.length; i++) {
            int first = space[i];
            int second = space[i+1];
            int third = space[i+2];
            if (first == 10) {
                score += 10 + second + third;
            } else {
                int sum = first + second;
                if (sum == 10) {
                    score += 10 + third;
                } else {
                    score += sum;
                }
                i++;
            }
            count++;
            if (count == 10) {
                break;
            }
        }
        return score;
    }

    public static void main(String[] args) {
        Bowling a = new Bowling();
        a.roll(1);
        a.roll(2);//3

        a.roll(3);
        a.roll(4);//7,10

        a.roll(5);
        a.roll(5);//17,27

        a.roll(7);
        a.roll(3);//19,46

        a.roll(9);
        a.roll(1);//20,66

        a.roll(10);//15,81

        a.roll(2);
        a.roll(3);//5,86

        a.roll(4);
        a.roll(5);//9,95

        a.roll(6);
        a.roll(4);//18,113

        a.roll(8);
        a.roll(2);//19,132

        a.roll(9);

        System.out.println("space = " + Arrays.toString(a.space));

        System.out.println("score = " + a.getScore());
    }
}

如有疑问,欢迎留言_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值