1. 程式人生 > >自己寫的java保齡球記分

自己寫的java保齡球記分

stat als ring for ole sys str lean ams

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保齡球記分