自己寫的java保齡球記分
阿新 • • 發佈:2018-08-10
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保齡球記分