<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=JTDStudy%2F%EC%B2%AB%EB%B2%88%EC%A7%B8%EA%B3%BC%EC%A0%9C%2F%EC%A0%95%ED%98%84</id>
	<title>JTDStudy/첫번째과제/정현 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=JTDStudy%2F%EC%B2%AB%EB%B2%88%EC%A7%B8%EA%B3%BC%EC%A0%9C%2F%EC%A0%95%ED%98%84"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=JTDStudy/%EC%B2%AB%EB%B2%88%EC%A7%B8%EA%B3%BC%EC%A0%9C/%EC%A0%95%ED%98%84&amp;action=history"/>
	<updated>2026-05-15T10:24:26Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=JTDStudy/%EC%B2%AB%EB%B2%88%EC%A7%B8%EA%B3%BC%EC%A0%9C/%EC%A0%95%ED%98%84&amp;diff=32701&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:23, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=JTDStudy/%EC%B2%AB%EB%B2%88%EC%A7%B8%EA%B3%BC%EC%A0%9C/%EC%A0%95%ED%98%84&amp;diff=32701&amp;oldid=prev"/>
		<updated>2021-02-07T05:23:29Z</updated>

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