== 김정현 == 심심해서 해봤음;; 난 JTD랑은 상관이.. ㅋㅋ TDD로 진행했습니다. == 소스 : java == 테스트케이스 {{{ public class BaseBallTest extends TestCase{ Beholder beholder; Extractor extractor; BaseBall baseBall; public void setUp() { beholder= new Beholder(); extractor= new Extractor(); baseBall= new BaseBall(beholder, extractor); } public void testStrikeCount() { beholder.setAnswer("111"); assertEquals(0, beholder.getStrikeCount("000")); assertEquals(1, beholder.getStrikeCount("001")); assertEquals(2, beholder.getStrikeCount("110")); } public void testBallCount() { beholder.setAnswer("123"); assertEquals(0, beholder.getBallCount("000")); assertEquals(1, beholder.getBallCount("102")); assertEquals(2, beholder.getBallCount("321")); assertEquals(3, beholder.getBallCount("231")); } public void testNumberCreation() { for(int i=0;i<100;i++) { String number= extractor.getRandomBall(); assertEquals(3, number.length()); assertFalse(baseBall.duplicated(number)); } } public void testDuplicated() { assertTrue(baseBall.duplicated("101")); assertTrue(baseBall.duplicated("122")); assertFalse(baseBall.duplicated("123")); } public void testGamePlay() { BaseBall game= new BaseBall(beholder, extractor); beholder.setAnswer("123"); game.inputNumber("152"); assertFalse(game.isGameOver()); assertEquals(1, game.getStrike()); assertEquals(1, game.getBall()); game.inputNumber("123"); assertTrue(game.isGameOver()); } } }}} 게임 진행 메인 {{{ public class GameMain { public static void main(String[] args) { BaseBall baseBall= new BaseBall(new Beholder(), new Extractor()); Scanner input= new Scanner(System.in); System.out.println("baseball game"); while(!baseBall.isGameOver()) { String number= input.nextLine(); if(baseBall.isProper(number)) { baseBall.inputNumber(number); } else { System.out.println("what are you doing?"); System.exit(0); } System.out.print(baseBall.getStrike() + " strike, "); System.out.println(baseBall.getBall() + "ball"); } System.out.println("good"); } } }}} 야구게임몸통 {{{ public class BaseBall { String playerInput; private Beholder beholder; private Extractor extractor; private String number; public BaseBall(Beholder beholder, Extractor extractor) { number= "000"; this.beholder= beholder; this.extractor= extractor; beholder.setAnswer(this.extractor.getRandomBall()); } public boolean isGameOver() { return getStrike()==3; } public void inputNumber(String string) { number= string; } public int getStrike() { return beholder.getStrikeCount(number); } public int getBall() { return beholder.getBallCount(number); } public boolean isProper(String number) { try { Integer.parseInt(number); } catch(Exception e) { return false; } return number.length()==3 && !duplicated(number); } public boolean duplicated(String number) { char[] chars= number.toCharArray(); return chars[0]== chars[1] || chars[0]== chars[2] || chars[1]== chars[2]; } } }}} 진행상황판단 {{{ public class Beholder { char[] numbers; public void setAnswer(String string) { numbers= string.toCharArray(); } public int getStrikeCount(String string) { char[] inputChars= string.toCharArray(); int count= 0; for(int i=0;i numbers= new Vector(); public String getRandomBall() { initNumbers(); String number= ""; for(int i=0;i<3;i++) { int index= (int)(Math.random()*numbers.size()); number+= numbers.elementAt(index); numbers.removeElementAt(index); } return number; } private void initNumbers() { numbers.clear(); for(int i=0;i<10;i++) { numbers.add(String.valueOf(i)); } } } }}} === 리펙토링 === 추출기 - 매직 넘버와 공갯수 조절 가능하게 {{{ public class Extractor { Set numbers= new LinkedHashSet(); public String getRandomBall(int nBall) { while(numbers.size()numberLimit()? numberLimit() : nBall; } public int numberLimit() { return 10; } private String getOneWord(Set set) { String result= ""; for(String num : set) { result += num; } return result; } private String getRandom(int range) { return String.valueOf((int)(Math.random()*range)); } } }}} == 잡담 == if문과 이중for 루프를 돌지 않으려고 발버둥쳤다; 벡터를 이용해 번호를 뽑는 것은 효율적인것 같진 않지만, 새로운 시도라서 신선했다 ---- [JTDStudy] [JTDStudy/첫번째과제]