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

[숫자 야구 게임] 서예원 미션 제출합니다. #7

Open
wants to merge 1 commit 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
15 changes: 15 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
랜덤 숫자 생성
1-9 사이의 서로 다른 세 자리 수

숫자 야구 게임을 시작합니다. 시작 멘트 출력
사용자 입력 받기 - 숫자 맞히기

같은 수 같은자리 스트라이크 / 다른자리면 볼 / 맞힌게 없으면 낫싱 힌트

결과 알려주기 예: 1볼 1스트라이크

3 스트라이크 할 때 까지 반복하기

게임이 끝난 경우 재시작/종료를 구분하는 1과 2 중 하나의 수를 입력 받기

-예외: 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시킨 후 애플리케이션은 종료되어야 한다.
109 changes: 108 additions & 1 deletion src/main/java/baseball/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,114 @@
package baseball;

import camp.nextstep.edu.missionutils.Randoms;
import camp.nextstep.edu.missionutils.Console;


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

public class Application {
public static void main(String[] args) {
// TODO: 프로그램 구현
do {
//랜덤 숫자 생성 1-9 서로 다른 숫자 세자리
List<Integer> numbers = new ArrayList<>();
while (numbers.size() < 3) {
int randomNumber = Randoms.pickNumberInRange(1, 9);
if (!numbers.contains(randomNumber)) {
numbers.add(randomNumber);
}
}


//숫자 야구 게임을 시작합니다. 시작 멘트 출력 사용자 입력 받기
System.out.println("숫자 야구 게임을 시작합니다.");//print은 줄바꿈안하고 println은 줄바꿈을 함
do {
System.out.println("숫자를 입력해주세요 : ");

//사용자가 입력하는 값은 camp.nextstep.edu.missionutils.Console의 readLine()을 활용한다.
String Input = Console.readLine();


//3글자가 아니거나 중복 있으면 예외처리
if (checkInput(Input)) {
throw new IllegalArgumentException("잘못된 입력입니다.");
}

//스트라이크 볼 낫싱 처리
int strikes = 0;
int ball = 0;
for (int i = 0; i < Input.length(); i++) {
char ch = Input.charAt(i);
if (ch-'0' == numbers.get(i)) {
strikes++;
} else {
for (int j = 0; j < Input.length(); j++) {
if (ch-'0'== numbers.get(j)&&i!=j) {
ball++;
break;

}
}
}
}

printResult(strikes, ball);
if (strikes == 3) {
System.out.println("3스트라이크");
System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료");
break;
}

} while (true);


}while(startNewGame());
}
//중복 없는지 체크

public static boolean checkInput(String input) {
if (input.length() != 3) {
return true;
}


for (int i = 0; i < input.length(); i++) {
char ch = input.charAt(i);
if (ch < '1' || ch > '9') {
return true;
}
for (int j = i + 1; j < input.length(); j++) {
if (ch == input.charAt(j)) {
return true;
}
}
}
return false;
}


public static void printResult(int strikes,int ball){
if(strikes==0&& ball==0){
System.out.println("낫싱");
}
else if(strikes!=0&&ball!=0){
System.out.println(strikes+"스트라이크 "+ball+"볼" );
}
else if(strikes==0){
System.out.println(ball+"볼"); }
else{
System.out.println(strikes+"스트라이크");
}
}
public static boolean startNewGame() {
System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.");
String str = Console.readLine();
if (str.equals("1")) {
return true;
} else if (str.equals("2")) {
return false;
} else {
throw new IllegalArgumentException("잘못된 입력입니다.");
}
}
}