<?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%83%81%EC%9A%B1</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%83%81%EC%9A%B1"/>
	<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%83%81%EC%9A%B1&amp;action=history"/>
	<updated>2026-05-15T07:08:39Z</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%83%81%EC%9A%B1&amp;diff=32696&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%83%81%EC%9A%B1&amp;diff=32696&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;
 import javax.swing.JOptionPane;&lt;br /&gt;
 &lt;br /&gt;
 public class NumberBaseBallGame {&lt;br /&gt;
 	private String resultNumber;&lt;br /&gt;
 	private String userNumber;&lt;br /&gt;
 	public static void main(String[] args) {&lt;br /&gt;
 		NumberBaseBallGame game = new NumberBaseBallGame();&lt;br /&gt;
 		game.excute();&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public void excute() {&lt;br /&gt;
 		// make a result number&lt;br /&gt;
 		createResultNumber();&lt;br /&gt;
 		do {&lt;br /&gt;
 			// input number from user&lt;br /&gt;
 			inputNumber();&lt;br /&gt;
 			// show score&lt;br /&gt;
 			JOptionPane.showMessageDialog(null, checkScore());&lt;br /&gt;
 		} while(checkScore() != &amp;quot;You are correct!&amp;quot;);&lt;br /&gt;
 	}&lt;br /&gt;
 	public String inputNumber() {&lt;br /&gt;
 		return userNumber = JOptionPane.showInputDialog(null, &amp;quot;Enter number what you think&amp;quot;);&lt;br /&gt;
 	}&lt;br /&gt;
 	public void createResultNumber() {&lt;br /&gt;
 		String fstNum, secNum, trdNum;&lt;br /&gt;
 		do {&lt;br /&gt;
 			fstNum = &amp;quot;&amp;quot; + (Math.random()*10);&lt;br /&gt;
 			secNum = &amp;quot;&amp;quot; + (Math.random()*10);&lt;br /&gt;
 			trdNum = &amp;quot;&amp;quot; + (Math.random()*10);&lt;br /&gt;
 		}while(fstNum.equals(secNum) || secNum.equals(trdNum) || fstNum.equals(trdNum));&lt;br /&gt;
 		resultNumber = fstNum + secNum + trdNum;&lt;br /&gt;
 	}&lt;br /&gt;
 	public String checkScore() {&lt;br /&gt;
 		int numOfStrike = 0;&lt;br /&gt;
 		int numOfBall = 0;&lt;br /&gt;
 		for (int i = 0 ; i &amp;amp;lt; 3 ; i++) {&lt;br /&gt;
 			for (int j = 0 ; j &amp;amp;lt; 3 ; j++) {&lt;br /&gt;
 				if (resultNumber.charAt(i) == userNumber.charAt(j)) {&lt;br /&gt;
 					if (i == j) {&lt;br /&gt;
 						numOfStrike++;&lt;br /&gt;
 					} else {&lt;br /&gt;
 						numOfBall++;&lt;br /&gt;
 					}&lt;br /&gt;
 				}&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		if (numOfStrike == 3)&lt;br /&gt;
 			return &amp;quot;You are correct!&amp;quot;;&lt;br /&gt;
 		else&lt;br /&gt;
 			return &amp;quot;&amp;quot; + numOfStrike + &amp;quot; Strike, &amp;quot; + numOfBall + &amp;quot; Ball&amp;quot;;&lt;br /&gt;
 	}&lt;br /&gt;
 	///////////////////////////////////////////////////////////////&lt;br /&gt;
 	public void setResultNumber(String resultNumber) {&lt;br /&gt;
 		this.resultNumber = resultNumber;		&lt;br /&gt;
 	}&lt;br /&gt;
 	public String getUserNumber() {&lt;br /&gt;
 		return userNumber;&lt;br /&gt;
 	}&lt;br /&gt;
 	public String getResultNumber() {&lt;br /&gt;
 		return resultNumber;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
= 테스트 코드 =&lt;br /&gt;
 import junit.framework.TestCase;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 public class NumberBaseBallGameTest extends TestCase {&lt;br /&gt;
 	&lt;br /&gt;
 	public NumberBaseBallGame object;&lt;br /&gt;
 &lt;br /&gt;
 	protected void setUp() throws Exception {&lt;br /&gt;
 		object = new NumberBaseBallGame();&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	protected void tearDown() throws Exception {&lt;br /&gt;
 	}&lt;br /&gt;
 	public void testInputNumber() {&lt;br /&gt;
 		String testString = object.inputNumber();&lt;br /&gt;
 		if (testString.charAt(0) == &amp;#039;1&amp;#039; &amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
 			testString.charAt(1) == &amp;#039;2&amp;#039; &amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
 			testString.charAt(2) == &amp;#039;3&amp;#039;)&lt;br /&gt;
 			assertTrue(true);&lt;br /&gt;
 		else&lt;br /&gt;
 			assertTrue(false);&lt;br /&gt;
 	}&lt;br /&gt;
 	public void testCreateResultNumber() {&lt;br /&gt;
 		object.createResultNumber();&lt;br /&gt;
 		assertNotSame(object.getResultNumber().charAt(0), object.getResultNumber().charAt(1));&lt;br /&gt;
 		assertNotSame(object.getResultNumber().charAt(1), object.getResultNumber().charAt(2));&lt;br /&gt;
 		assertNotSame(object.getResultNumber().charAt(0), object.getResultNumber().charAt(2));&lt;br /&gt;
 	}&lt;br /&gt;
 	public void testCheckScore() {&lt;br /&gt;
 		object.inputNumber();&lt;br /&gt;
 		object.setResultNumber(&amp;quot;132&amp;quot;);&lt;br /&gt;
 		assertEquals(&amp;quot;1 Strike, 2 Ball&amp;quot;, object.checkScore());&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
= 잡담 =&lt;br /&gt;
* TDD로 만들려고 하니 적응도 안되고 해서 시간이 꽤나 많이 걸리네요^^; 프로그램을 위한 테스트라기 보단 테스트를 위한 프로그램이 되어지는 느낌이 팍팍;;; 하지만 장점이 많은 방법이라 앞으로 더 연습을 해 봐야겠네요~ - [[상욱]]&lt;br /&gt;
* 테스트 코드를 갖고 어떻게 해야하는지 잘 모르겠어요. import junit.framework.TestCase 구문이 있던데 이것은 어디서 가져와야 하나요? -_-;; - [[문원명]]&lt;br /&gt;
** 일단 테스트 무시하고 해. JUnit사용하는 방법은 나중에 알려줄테니깐. - [[상욱]]&lt;br /&gt;
* 내 경험으로는 테스트에 휘둘리기 보다는 테스트를 도구로 여기는 마인드가 중요한 것 같당. 테스트가 우리를 원하는 길로 알아서 인도해주지는 않더라&lt;br /&gt;
** JUnit 4.1을 추천합니다. 3~4년 후에는 4.1이 일반화 되어 있겠죠. 사용하다 보니, 4.1은 배열간의 비교까지 Overloading되어 있어서 편합니다. 다음의 예제를 보세요. SeeAlso [http://neocoin.cafe24.com/cs/moin.cgi/JUnit JUnit in CenterStage]  --NeoCoin&lt;br /&gt;
** 오옷~ 감사해요 상민이형^^ - [[상욱]]&lt;br /&gt;
&lt;br /&gt;
JUnit 4.1 밑의 비교가 성공함 &lt;br /&gt;
 package test;&lt;br /&gt;
 &lt;br /&gt;
 import java.util.Arrays;&lt;br /&gt;
 &lt;br /&gt;
 import org.junit.Test;&lt;br /&gt;
 import static org.junit.Assert.*;&lt;br /&gt;
 &lt;br /&gt;
 public class JUnit41Test {&lt;br /&gt;
 	@Test&lt;br /&gt;
 	public void name() {&lt;br /&gt;
 		String[] actual = { &amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, &amp;quot;3&amp;quot; }, expect = { &amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, &amp;quot;3&amp;quot; };&lt;br /&gt;
 		Integer[] actual2 = { 1, 2, 3 }, expect2 = { 1, 2, 3 };&lt;br /&gt;
 		assertEquals(Arrays.asList(actual), Arrays.asList(expect));&lt;br /&gt;
 		assertEquals(actual, expect);&lt;br /&gt;
 		assertEquals(actual2, expect2);&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
JUnit 3.8 밑의 비교를 할수 없음 (마지막 줄에서 실패)&lt;br /&gt;
 &lt;br /&gt;
 import java.util.Arrays;&lt;br /&gt;
 &lt;br /&gt;
 import junit.framework.TestCase;&lt;br /&gt;
 &lt;br /&gt;
 public class JUnit38Test extends TestCase {&lt;br /&gt;
 	public void name() {&lt;br /&gt;
 		String[] actual = { &amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, &amp;quot;3&amp;quot; }, expect = { &amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, &amp;quot;3&amp;quot; };&lt;br /&gt;
 		Integer[] actual2 = { 1, 2, 3 }, expect2 = { 1, 2, 3 };&lt;br /&gt;
 		assertEquals(Arrays.asList(actual), Arrays.asList(expect));&lt;br /&gt;
 		assertEquals(actual, expect);&lt;br /&gt;
 		assertEquals(actual2, expect2);&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
** 그리고 스펙을 좀더 명확하게 하면 짜는 입장에서 더 쉬울 겁니다. 그러니까. [[숫자야구]] 같이 말이지요. 그리고 예외처리 하세요. 아래와 같이요. --NeoCoin&lt;br /&gt;
 # -*- coding: cp949 -*-&lt;br /&gt;
 LENGTH,START,END,TURN_LIMIT=3,100,999,8&lt;br /&gt;
 def Answer():&lt;br /&gt;
     from random import randint&lt;br /&gt;
     while True:&lt;br /&gt;
         answer = str(randint(START,END))&lt;br /&gt;
         if len(set(answer)) == LENGTH: return answer&lt;br /&gt;
 &lt;br /&gt;
 def Question():&lt;br /&gt;
     while True:&lt;br /&gt;
         try:&lt;br /&gt;
             question=raw_input(&amp;#039;숫자를 입력해 주세요. : &amp;#039;)&lt;br /&gt;
             if len(question) == LENGTH and len(set(question)) == LENGTH:&lt;br /&gt;
                 return question&lt;br /&gt;
             else: raise ValueError&lt;br /&gt;
         except ValueError:&lt;br /&gt;
             print &amp;#039;--0으로 시작하지 않는, 겹치지 않는 숫자 %d개를 넣어 주세요.--&amp;#039;%LENGTH&lt;br /&gt;
 &lt;br /&gt;
 def Compare(answer,question):&lt;br /&gt;
     strike,ball,out=0,0,0&lt;br /&gt;
     for idx,i in enumerate(question):&lt;br /&gt;
         if question[idx] == answer[idx]:strike += 1&lt;br /&gt;
         elif i in answer:               ball +=1&lt;br /&gt;
         else:                           out+=1&lt;br /&gt;
     return [strike,ball,out]&lt;br /&gt;
 &lt;br /&gt;
 def Show(sbo,count, end=True):&lt;br /&gt;
     if isEnd:print &amp;#039;%d 회 스트라이크 아웃!&amp;#039; % count&lt;br /&gt;
     else:    print &amp;#039;%d 회 %d 스트라이크 %d 볼 %d 아웃&amp;#039; % tuple([count]+sbo)&lt;br /&gt;
 &lt;br /&gt;
 answer=Answer()&lt;br /&gt;
 print answer&lt;br /&gt;
 for count in xrange(1,TURN_LIMIT+1):&lt;br /&gt;
     sbo = Compare(answer,Question())&lt;br /&gt;
     isEnd = sbo[0] == LENGTH&lt;br /&gt;
     Show(sbo,count,isEnd)&lt;br /&gt;
     if isEnd:break&lt;br /&gt;
 else:print &amp;#039;%d회 시도 실패하였습니다.&amp;#039; %count&lt;br /&gt;
* ㅋ... Python... 요새 조금씩 보고 있지만 쓰기 괜찮은 언어라고 생각이 들더군요^^ - [[상욱]]&lt;br /&gt;
** 나는 Python이든, Perl이든 반드시 학습 해야된다고 생각한다. 그래야 다른 언어들을 잘 쓸수 있었다. 예를들어 Java Collection Framework를 알고는 있었지만 잘 손이 안나갔는데, STL과 Python을 익히고 나니까 아주 손쉽게 쓰게 되더구나.   &lt;br /&gt;
** 이 언어들의 시작점으로는 간단한 계산이 필요할때 계산기보다 열기보다 늘 IDLE나 rib(ruby)를 열어서 계산을 하지. 예를들어서 [http://neocoin.cafe24.com/cs/moin.cgi/ET-house_%ED%99%98%EA%B8%89%EC%BD%94%EC%8A%A4?highlight=%28et%29 et-house환급코드 in CenterStage] 같은 경우도 그래. 아 그리고 저 코드 군에 있을때 심심풀이 땅콩으로 짜논거. SeeAlso [http://neocoin.cafe24.com/cs/moin.cgi/%EC%95%BC%EA%B5%AC%EA%B2%8C%EC%9E%84 숫자야구 in CenterStage]&lt;br /&gt;
** 허나 과거는 잊어버리는 모양이다. 열혈강의 Python을 보니 옆면에 열심히 본 흔적이 있군. Ruby도 SVN history를 보니 흔적이 많이 남아있고.. 어느정도 시간을 투자해야 되는 것 같아. --NeoCoin&lt;br /&gt;
* Python Good~! 요새는 파이썬만 씀.. ㅋ - &amp;amp;#91;(namsnag)&amp;amp;#93;&lt;br /&gt;
----&lt;br /&gt;
[[JTDStudy/첫번째과제]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>