Skip to content
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

[202101947 김민지] 1주차 미션을 제출합니다. #3

Open
wants to merge 46 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 41 commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
a49f8f3
feat : 주석으로 구현 틀 짜기
alsswl Feb 14, 2024
8924109
feat : 서로 다른 3가지 수 랜덤으로 뽑기
alsswl Feb 14, 2024
7aa2912
feat : 사용자에게 수 입력받기
alsswl Feb 14, 2024
2dafced
feat : 사용자가 입력을 잘못하면 에러를 발생시킨다
alsswl Feb 14, 2024
42cecec
feat : 입력받은 수를 LinkedList에 넣는다.
alsswl Feb 15, 2024
3866d09
fix : 게임을 지속하기 위한 while문 추가 및 인덴트를 위한 메소드 생성
alsswl Feb 15, 2024
2cbdccf
feat : 스트라이크 수를 세는 기능
alsswl Feb 15, 2024
6292127
feat : 세 수를 모두 맞히면 재시작 여부를 묻고 이에 대한 기능을 수행
alsswl Feb 15, 2024
8c54335
feat : strike와 ball의 결과에 따라 출력하기
alsswl Feb 15, 2024
81aabfd
refactor : 출력 기능 메서드로 분리
alsswl Feb 15, 2024
4fb6534
fix : main에서 결과 출력하는 부분 수정
alsswl Feb 15, 2024
94593a6
feat : scanner으로 변경
alsswl Feb 17, 2024
459f1a3
feat : 주석으로 구현 틀 짜기
alsswl Feb 14, 2024
a2c14bc
feat : 서로 다른 3가지 수 랜덤으로 뽑기
alsswl Feb 14, 2024
004e19a
feat : 사용자에게 수 입력받기
alsswl Feb 14, 2024
dc3c2ca
feat : 사용자가 입력을 잘못하면 에러를 발생시킨다
alsswl Feb 14, 2024
79911e4
feat : 입력받은 수를 LinkedList에 넣는다.
alsswl Feb 15, 2024
6e73064
fix : 게임을 지속하기 위한 while문 추가 및 인덴트를 위한 메소드 생성
alsswl Feb 15, 2024
1026b35
feat : 스트라이크 수를 세는 기능
alsswl Feb 15, 2024
87ec4f2
feat : 세 수를 모두 맞히면 재시작 여부를 묻고 이에 대한 기능을 수행
alsswl Feb 15, 2024
2da4e46
feat : strike와 ball의 결과에 따라 출력하기
alsswl Feb 15, 2024
c0a578a
refactor : 출력 기능 메서드로 분리
alsswl Feb 15, 2024
b5f2fd9
fix : main에서 결과 출력하는 부분 수정
alsswl Feb 15, 2024
114fc9d
feat : scanner으로 변경
alsswl Feb 17, 2024
b868e94
fix : 패키지 수정
alsswl Feb 17, 2024
4e7fa40
fix : 패키지 변경
alsswl Feb 17, 2024
e60084a
docs : readme파일 생성
alsswl Feb 17, 2024
408a526
refactor : 불필요한 import 삭제
alsswl Feb 18, 2024
70a5a42
refactor : 불필요한 주석 삭제
alsswl Feb 18, 2024
c397ac5
refactor : main에 있던 기능 메서드화
alsswl Feb 18, 2024
e1c2845
refactor : 메서드 순서 변경
alsswl Feb 18, 2024
cb39f03
refactor : 클래스로 메서드 기능별로 묶기
alsswl Feb 18, 2024
b58338c
refector : 클래스 순서 정렬 및 클래스 첫줄 공백 추가
alsswl Feb 18, 2024
9f9e85b
refactor : 클래스별로 파일 분리하기
alsswl Feb 18, 2024
cb3ae81
refactor : 메서드 순서 정렬
alsswl Feb 18, 2024
4e8f918
docs : readme파일 작성
alsswl Feb 18, 2024
01aed61
refactor : 클래스 객체지향적으로 수정
alsswl Feb 20, 2024
60aed13
refactor : addNumToList와 getUserNum 합치기
alsswl Feb 20, 2024
dfba9b2
refactor : 게임 재시작 여부, 입력 재시작 여부 나타내는 변수명 수정
alsswl Feb 20, 2024
cb7ef2b
refactor : 결과 출력 코드 단순화
alsswl Feb 20, 2024
49d1b0f
feat : 접근제한자 수정
alsswl Feb 20, 2024
40dc83b
refactor : 매직넘버 수정
alsswl Feb 20, 2024
d3906d4
refactor : userNum 간결화
alsswl Feb 22, 2024
641ad01
refactor : baseballnumber과 hint의 역할 분리
alsswl Feb 22, 2024
660509d
refactor : BaseBallNumber과 Hint의 자체적인 변수 설정, setter생성
alsswl Feb 22, 2024
e41f391
docs : readme파일 수정
alsswl Feb 22, 2024
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
1 change: 1 addition & 0 deletions src/docs/Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#이제까지는 협업을 한 적이 없어서 내가 원하는 대로 나만 알아보도록 코드를 만들어도 문제될 것이 없어서 많은 것들을 지키지 않았었는데, 이번에 코멘트를 받아보니까 내가 아직 알지 못하는 규칙들이 너무 많아서 이를 더 자세히 공부하고, 앞으로는 나의 코드를 객관적으로 보는 능력을 길러야 할 것 같다. #백엔드 분들이 PR한 것들을 보니까 잘하시는 분들이 좀 계신거같다. 나도 저렇게 구현하고 싶다는 욕심이 생겼다. 앞으로 열심히 해야겠다!
56 changes: 55 additions & 1 deletion src/main/java/baseball/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,61 @@
package baseball;

import java.util.*;
import mallang.missionutils.*;

public class Application {

private static int askFinish() {
System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료");
System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.");
return Integer.parseInt(Console.readLine());
}

private static int endOrAgain(int again) {
int ifOneContinueGameSet = 1;
if (again == 1) {
ifOneContinueGameSet = 1;
} else if (again == 2) {
System.out.println("게임종료");
ifOneContinueGameSet = 0;
} else {
throw new IllegalArgumentException();
}
return ifOneContinueGameSet;
}

public static void main(String[] args) {
//TODO: 숫자 야구 게임 구현

Hint hint = new Hint();
BaseballNumber baseballNumber = new BaseballNumber();

List<Integer> randomNum;
List<Integer> userNum;

int ifOneContinueGameSet = 1;
int ifOneContinueUserSet = 1;

while (ifOneContinueGameSet == 1) {
randomNum = new ArrayList<>();
baseballNumber.pickNum(randomNum);

while (ifOneContinueUserSet == 1) {
int strike = 0;
int ball = 0;

userNum = new ArrayList<>();

userNum = baseballNumber.getUserNum();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. 이 코드 사이에 공백이 들어갈 이유가 없는 것 같아요~
  2. userNum을 외부에서 미리 세팅할 필요가 있을까요? while문 내부에서 다음과 같이 바로 사용하면 더 코드가 간결해질 것 같아요!
List<Integer> userNum = baseballNumber.getUserNum();


strike = hint.countStrike(randomNum, userNum);
ball = hint.countBall(userNum, randomNum);

ifOneContinueUserSet = hint.printAnswer(strike, ball);
}

int again = askFinish();
ifOneContinueGameSet = endOrAgain(again);
ifOneContinueUserSet = 1;
}
}
}
33 changes: 33 additions & 0 deletions src/main/java/baseball/BaseballNumber.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package baseball;

import java.util.*;
import mallang.missionutils.*;

public class BaseballNumber {

public void pickNum(List<Integer> randomNum) {
while (randomNum.size() != 3) {
int ranNum = Randoms.pickNumberInRange(1, 9);
if (!randomNum.contains(ranNum)) {
randomNum.add(ranNum);
}
}
}

public List<Integer> getUserNum() {
System.out.printf("숫자를 입력해주세요");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

System.out
Console.readLine()은 모두 Application에서만 쓰도록 변경해볼까요?
BaseballNumber는 다른 작업은 신경쓰지 않고, BaseballNumber의 역할에만 집중할 수 있도록요!

BaseballNumber의 역할은 뭐라고 생각하시나요?

String[] userArr = Console.readLine().split("");
checkUserNum(userArr);
List<Integer> userNum = new ArrayList<>();
userNum.add(Integer.parseInt(userArr[0]));
userNum.add(Integer.parseInt(userArr[1]));
userNum.add(Integer.parseInt(userArr[2]));
return userNum;
}

public void checkUserNum(String[] userArr) {
if (userArr.length != 3) {
throw new IllegalArgumentException();
}
}
}
52 changes: 52 additions & 0 deletions src/main/java/baseball/Hint.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package baseball;

import java.util.*;

public class Hint {

public int countStrike(List<Integer> randomNum, List<Integer> userNum) {
int cnt = 0;
for (int i = 0; i < 3; i++) {
if (randomNum.get(i) == userNum.get(i)) {
cnt++;
}
}
return cnt;
}

public int countBall(List<Integer> userNum, List<Integer> randomNum) {
int cnt = 0;
for (int i = 0; i < 3; i++) {
cnt += checkBall(i, userNum, randomNum);
}
return cnt;
}

public int checkBall(int index, List<Integer> userNum, List<Integer> randomNum) {
if (randomNum.contains(userNum.get(index))) {
if (index != randomNum.indexOf(userNum.get(index))) {
return 1;
}
}
return 0;
}

public int printAnswer(int strike, int ball) {
int ifOneContinueUserSet = 1;

if (ball != 0) {
System.out.printf("%d볼 ", ball);
}
if (strike != 0) {
System.out.printf("%d스트라이크", strike);
if (strike == 3)
ifOneContinueUserSet = 0;
}
if (ball == 0 && strike == 0) {
System.out.printf("낫싱");
}
System.out.println();

return ifOneContinueUserSet;
}
}
13 changes: 5 additions & 8 deletions src/test/java/baseball/ApplicationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,17 @@ class ApplicationTest extends TestSupport {
run("246", "135", "1", "597", "589", "2");
assertThat(output()).contains("낫싱", "3스트라이크", "1볼 1스트라이크", "3스트라이크", "게임 종료");
},
1, 3, 5, 5, 8, 9
);
1, 3, 5, 5, 8, 9);
}

@Test
void 예외_테스트() {
assertSimpleTest(() ->
assertThatThrownBy(() -> runException("1234"))
.isInstanceOf(IllegalArgumentException.class)
);
assertSimpleTest(() -> assertThatThrownBy(() -> runException("1234"))
.isInstanceOf(IllegalArgumentException.class));
}

@Override
public void runMain() {
Application.main(new String[]{});
Application.main(new String[] {});
}
}
}