Skip to content

Kmj452 #154

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,26 @@
3. Git 브랜치를 master 또는 main으로 변경한 후 피드백을 반영하기 위한 새로운 브랜치를 생성한 후 처음부터 다시 미션 구현을 도전한다.

```

git branch -a // 모든 로컬 브랜치 확인
git checkout master // 기본 브랜치가 master인 경우
git checkout main // 기본 브랜치가 main인 경우

git checkout -b 브랜치이름
ex) git checkout -b apply-feedback
```
4.구현할 기능 목록
1~9까지의 서로 다른 3자리 맞추는거

~~게임 시작
1. 게임이 시작되면 컴퓨터가 1~9까지의 수 중 중복없는 3자리 수를 랜덤으로 생성
2. "숫자를 입력해 주세요 : " 라는 문구와 함께 사용자로부터 입력 받기
3. 사용자가 유효하지 않은 수를 입력했을시 예외처리
4. 사용자가 입력한 수와 컴퓨터의 수를 비교하여 스트라이크, 볼 계산
5. 2~4번을 반복문으로 돌리고, 만약 정답이라면 게임종료 문구를 출력, 아니라면 계속 진행
6. 게임 종료 후 게임을 다시 시작하냐는 문구 출력, 사용자 입력 받음
7. 사용자 입력에 따라 다시 시작 / 게임 종료 /
8. 사용자가 유효하지 않은 숫자 입력 시 예외처리

------------------------

38 changes: 38 additions & 0 deletions src/main/java/baseballgame/Application.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package baseballgame;

import java.util.List;
public class Application {
public void res_equals(String result, List<Integer> com_num){
Compare compare = new Compare();
playgame game = new playgame();
while(!result.equals("3strike")) {
result = compare.Compare_num(com_num, game.player_num());
System.out.println(result);
}
}
public static void main(String[] args) throws IllegalArgumentException{
try{
ComputerNum computer = new ComputerNum();
playgame game = new playgame();
Compare compare = new Compare();
Regame regame = new Regame();
Application app = new Application();

boolean again = true;

while(again) {
List<Integer> com_num = computer.ComputerNumber();
List<Integer> player_num = game.player_num();

String result = "";
app.res_equals(result,com_num);

again = regame.restart();
}
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
return;
}

}
}
38 changes: 38 additions & 0 deletions src/main/java/baseballgame/Compare.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package baseballgame;

import java.util.List;

public class Compare {
public int count(List<Integer> computer, List<Integer> player) {
int count = 0;

for(int i = 0; i < player.size(); i++) {
if(computer.contains(player.get(i))) {
count++;
}
}
return count;
}

public int Strikecount(List<Integer> computer, List<Integer> player) {
int strike = 0;

for(int i = 0; i < player.size(); i++) {
if(computer.get(i) == player.get(i)) {
strike++;
}
}
return strike;
}

public String Compare_num(List<Integer> computer, List<Integer> player) {
int count = count(computer, player);
int strike = Strikecount(computer, player);
int ball = count - strike;

if(count == 0) return "nothing";
else if(strike == 0) return ball + "ball";
else if(ball == 0) return strike + "strike";
else return ball + "ball " + strike + "strike";
}
}
21 changes: 21 additions & 0 deletions src/main/java/baseballgame/ComputerNum.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package baseballgame;


import java.util.Random;
import java.util.ArrayList;
import java.util.List;

public class ComputerNum {
Random random = new Random();
public List<Integer> ComputerNumber(){

List<Integer> com_num = new ArrayList<>(); // Create list contains answer
while (com_num.size() < 3) {
int randNum = random.nextInt(10);
if (!com_num.contains(randNum)) {
com_num.add(randNum);
}
}
return com_num;
}
}
21 changes: 21 additions & 0 deletions src/main/java/baseballgame/Regame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package baseballgame;

import java.util.Scanner;

public class Regame {
public boolean restart(){
System.out.println("you corrected 3 number! end game");
System.out.println("enter 1 to restart game, enter 2 to exit game");

Scanner scanner = new Scanner(System.in);
char answer = scanner.next().charAt(0);

if(answer == '1') {
return true;
} else if (answer == '2') {
return false;
}else{
throw new IllegalArgumentException("enter 1 or 2");
}
}
}
31 changes: 31 additions & 0 deletions src/main/java/baseballgame/playgame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package baseballgame;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class playgame {
Scanner scanner = new Scanner(System.in);
public List<Integer> player_num() {

System.out.println("Enter Number : ");
List<Integer> player_num = new ArrayList<>();
String input = String.valueOf(scanner.nextInt());

for(int i=0; i<input.length(); i++){
int digit = Character.getNumericValue(input.charAt(i));
if (!player_num.contains(digit)) {
player_num.add(Integer.parseInt(String.valueOf(digit)));
}
}

Length_exception(input);
return player_num;
}
public void Length_exception(String s){
if(s.length() != 3) {
throw new IllegalArgumentException("Not a three digit number");
}
}

}
170 changes: 170 additions & 0 deletions src/test/java/baseballgame/ApplicationTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
package baseballgame;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import java.io.ByteArrayInputStream;
import java.util.Arrays;
import java.util.List;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.jupiter.api.Assertions.*;

class ApplicationTest {

@Test
@DisplayName("Test Duplication in com_num")
public void com_num_Dup_test(){
//given
List<Integer> com_num;

//when
ComputerNum computer = new ComputerNum();
com_num = computer.ComputerNumber();

//then
assertNotEquals(com_num.get(0),com_num.get(1));
assertNotEquals(com_num.get(1),com_num.get(2));
assertNotEquals(com_num.get(0),com_num.get(2));
}

@Test
@DisplayName("3Strike Test")
public void strike3Test(){
List<Integer> test1 = Arrays.asList(1,2,3);
List<Integer> test2 = Arrays.asList(1,2,3);

Compare compare = new Compare();

assertEquals("3strike", compare.Compare_num(test1,test2));
}

@Test
@DisplayName("3ball Test")
public void ball3Test(){
List<Integer> test1 = Arrays.asList(1,2,3);
List<Integer> test2 = Arrays.asList(2,3,1);

Compare compare = new Compare();

assertEquals("3ball", compare.Compare_num(test1,test2));
}

@Test
@DisplayName("nothing Test")
public void nothingTest(){
List<Integer> test1 = Arrays.asList(1,2,3);
List<Integer> test2 = Arrays.asList(4,5,6);

Compare compare = new Compare();

assertEquals("nothing", compare.Compare_num(test1,test2));
}

@Test
@DisplayName("N Strike 0 Ball Test")
public void NStrike0BallTest(){
List<Integer> test1 = Arrays.asList(1,2,3);
List<Integer> test2 = Arrays.asList(1,5,6);

Compare compare = new Compare();

assertEquals("1strike", compare.Compare_num(test1,test2));
}

@Test
@DisplayName("0 Strike N Ball Test")
public void NBall0StrikeTest(){
List<Integer> test1 = Arrays.asList(1,2,3);
List<Integer> test2 = Arrays.asList(5,1,6);

Compare compare = new Compare();

assertEquals("1ball", compare.Compare_num(test1,test2));
}

@Test
@DisplayName("N Strike N Ball Test")
public void NStrikeNBallTest(){
List<Integer> test1 = Arrays.asList(1,2,3);
List<Integer> test2 = Arrays.asList(1,6,2);

Compare compare = new Compare();

assertEquals("1ball 1strike", compare.Compare_num(test1,test2));
}

@Test
@DisplayName("player input exception test")
public void testLength_exception_whenInputLengthIsGreaterThanThree() {
playgame playgame = new playgame();

try {
playgame.Length_exception("1234");
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
assertEquals("Not a three digit number", e.getMessage());
}
}

@Test
public void testLength_exception_whenInputLengthIsThree() {
playgame playgame = new playgame();
try {
playgame.Length_exception("123");
} catch (IllegalArgumentException e) {
fail("Unexpected IllegalArgumentException");
}
}

@Test
public void testLength_exception_whenInputLengthIsLessThanThree() {
playgame playgame = new playgame();
try {
playgame.Length_exception("12");
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
assertEquals("Not a three digit number", e.getMessage());
}
}

@Test
public void testRestart_Input1() {
String input = "1";
System.setIn(new ByteArrayInputStream(input.getBytes()));

Regame regame = new Regame();
boolean result = regame.restart();

assertTrue(result);
}

@Test
public void testRestart_whenInputIs2() {
String input = "2";
System.setIn(new ByteArrayInputStream(input.getBytes()));

Regame regame = new Regame();
boolean result = regame.restart();

assertFalse(result);
}

@Test
public void testRestart_whenInputIsInvalid() {
String input = "3"; // Invalid input
System.setIn(new ByteArrayInputStream(input.getBytes()));

Regame regame = new Regame();

try {
regame.restart();
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
assertEquals("enter 1 or 2", e.getMessage());
}
}



}
1 change: 1 addition & 0 deletions src/test/java/study/StringTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@ public class StringTest {
void replace() {
String actual = "abc".replace("b", "d");
assertThat(actual).isEqualTo("adc");

}
}