通过Katas进行Java教程:网球比赛(轻松)
編程kata是一種練習(xí),可以幫助程序員通過練習(xí)和重復(fù)練習(xí)來磨練自己的技能。
本文是“通過Katas的Java教程”系列的一部分。 文章分為易,中和難。
Fizz Buzz(輕松) -Java 7
柏林時鐘(簡易) – Java 7和8
網(wǎng)球比賽(簡易)– Java 7 反向波蘭表示法(中) – Java 7和8
本文假定讀者已經(jīng)具有Java的使用經(jīng)驗(yàn),熟悉JUnit測試的基本用法,并且知道如何從自己喜歡的IDE(我們是IntelliJ IDEA )運(yùn)行它們。
下面顯示證明解決方案正確的測試。 解決此問題的推薦方法是使用測試驅(qū)動的開發(fā)方法(編寫第一個測試的實(shí)現(xiàn),確認(rèn)它通過并轉(zhuǎn)到下一個測試)。 一旦所有測試通過,就可以認(rèn)為解決了問題。
測試下方提供了一種可能的解決方案。 嘗試先自己解決kata。
網(wǎng)球比賽
實(shí)施簡單的網(wǎng)球比賽
規(guī)則:
- 從零到三分的分?jǐn)?shù)分別描述為“愛”,“十五”,“三十”和“四十”。
- 如果每方至少得分3分,并且玩家比對手多1分,那么比賽的得分對領(lǐng)先的玩家來說是“優(yōu)勢”。
- 如果每個玩家至少獲得了3分,并且得分相等,則得分為“降低”。
- 第一位贏得比賽的玩家至少贏得了至少4分,并且比對手多贏得了至少2分。
[測試]
public class GameTest {Player victor;Player sarah;Game game;@Beforepublic void beforeGameTest() {victor = new Player("Victor");sarah = new Player("Sarah");game = new Game(victor, sarah);}@Testpublic void loveShouldBeDescriptionForScore0() {Game game = new Game(victor, sarah);assertThat(game, hasProperty("score", is("love, love")));}@Testpublic void fifteenShouldBeDescriptionForScore1() {sarah.winBall();assertThat(game, hasProperty("score", is("love, fifteen")));}@Testpublic void thirtyShouldBeDescriptionForScore2() {victor.winBall();victor.winBall();sarah.winBall();assertThat(game, hasProperty("score", is("thirty, fifteen")));}@Testpublic void fortyShouldBeDescriptionForScore3() {IntStream.rangeClosed(1, 3).forEach((Integer) -> {victor.winBall();});assertThat(game, hasProperty("score", is("forty, love")));}@Testpublic void advantageShouldBeDescriptionWhenLeastThreePointsHaveNeenScoredByEachSideAndPlayerHasOnePointMoreThanHisOpponent() {IntStream.rangeClosed(1, 3).forEach((Integer) -> {victor.winBall();});IntStream.rangeClosed(1, 4).forEach((Integer) -> {sarah.winBall();});assertThat(game, hasProperty("score", is("advantage Sarah")));}@Testpublic void deuceShouldBeDescriptionWhenAtLeastThreePointsHaveBeenScoredByEachPlayerAndTheScoresAreEqual() {for(int index = 1; index <= 3; index++) {victor.winBall();}for(int index = 1; index <= 3; index++) {sarah.winBall();}assertThat(game, hasProperty("score", is("deuce")));victor.winBall();assertThat(game, hasProperty("score", is(not("deuce"))));sarah.winBall();assertThat(game, hasProperty("score", is("deuce")));}@Testpublic void gameShouldBeWonByTheFirstPlayerToHaveWonAtLeastFourPointsInTotalAndWithAtLeastTwoPointsMoreThanTheOpponent() {for(int index = 1; index <= 4; index++) {victor.winBall();}for(int index = 1; index <= 3; index++) {sarah.winBall();}assertThat(game, hasProperty("score", is(not("Victor won"))));assertThat(game, hasProperty("score", is(not("Sarah won"))));victor.winBall();assertThat(game, hasProperty("score", is("Victor won")));}}測試代碼可以在GitHub GameTest.java中找到。 可以在GitHub PlayerTest.java中找到另一組測試(未在上面列出)。
[一種可能的解決方案]
public class Game {private Player player1;private Player player2;public Game(Player player1, Player player2) {this.player1 = player1;this.player2 = player2;}public String getScore() {if (player1.getScore() >= 3 && player2.getScore() >= 3) {if (Math.abs(player2.getScore() - player1.getScore()) >= 2) {return getLeadPlayer().getName() + " won";} else if (player1.getScore() == player2.getScore()) {return "deuce";} else {return "advantage " + getLeadPlayer().getName();}} else {return player1.getScoreDescription() + ", " + player2.getScoreDescription();}}public Player getLeadPlayer() {return (player1.getScore() > player2.getScore()) ? player1 : player2;}}Java解決方案代碼可以在Game.java解決方案中找到。 它使用Player.java解決方案中可以找到的Player類(上面未列出)。
翻譯自: https://www.javacodegeeks.com/2014/05/java-tutorial-through-katas-tennis-game-easy.html
總結(jié)
以上是生活随笔為你收集整理的通过Katas进行Java教程:网球比赛(轻松)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 8的默认方法:可以做什么和不能
- 下一篇: c5驾照备案流程(c5驾照备案)