標籤:package 返回 title int .com first images RoCE 數組
package com.java.bowlingscore1;import java.util.Arrays;public class Game { int[] bowlingScore = new int[21]; //用來存放投擲擊倒的數目 int ball=0; //數組下標 int score;//分數 int countframe=0;//記錄當前是第幾輪 boolean firstThrow=true;//判斷是不是第一次投擲 public void add(int pins){//添加分數 將分數添加到數組中 bowlingScore[ball++] = pins; judgefirstThrow(pins); //調用下面的判斷函數 }/*firstthrow 預設為真由規則可以知道第一球如果全中就進入下一輪了,因此 * 首先判斷添加的是不是為10,是就直接讓countframe加1,不是就把firstthrow改為false, * * 第二次調用add的時候firstthrow為false投兩次一輪結束 countframe加1, * 將firstthrow改為true **/ public void judgefirstThrow(int pins){ if(firstThrow){ if(pins==10){ countframe++; }else{ firstThrow=false; } }else{ firstThrow=true; countframe++; }}public int getcurrentFrame(){ //返回這是第幾輪 return countframe;}public int score(){ //返回當前輪的得分 return scoreForFrame(countframe);}/* * 當前輪的計算方法迴圈當前輪的次數 * a[0]賦值第一次擊球firstthrow 然後下標自增一;判斷第一次都不是擊倒了10個 * 規則 保齡球一輪兩個球 第一個全中就是之前的分數+10+後面兩次投擲的分數 * 補中 兩次一共擊倒10個 之前的分數加兩次擊倒的10分加後面一次的的分數 * */public int scoreForFrame(int frame){ int score=0; int ball=0; for(int countframe=0;countframe<frame;countframe++){ int firstThrow = bowlingScore[ball++]; if(firstThrow==10){ score= score+10+bowlingScore[ball]+bowlingScore [ball+1]; }else{ int secondThrow = bowlingScore[ball++]; int framScore = firstThrow+secondThrow; if(framScore==10){ score=framScore+bowlingScore[ball]+score; }else{ score = framScore+score; } } } return score;}//測試public static void main(String[] args) {Game g = new Game();g.add(1);g.add(4);g.add(4);g.add(5);g.add(6);g.add(4);g.add(5);g.add(5);g.add(10);g.add(0);g.add(1);g.add(7);g.add(3);g.add(6);g.add(4);g.add(10);g.add(2);g.add(8);g.add(6);System.out.println(Arrays.toString(g.bowlingScore));System.out.println(g.getcurrentFrame());for(int i = 1;i<11;i++){System.out.print(g.scoreForFrame(i)+ " ");}}}
自己沒看書敲的,就是先看了書擺脫不了書上思路的影響了,下次還是應該先敲一遍在看書.做測試也實在函數裡寫個main函數做測試,根本就不是那啥敏捷開發那樣寫測試類別,重構倒是有點感覺了 雖然沒喲進行重構
自己寫的java保齡球記分