우아한 테크 코스에 지원하게 됐습니다. 회고록인 만큼 그냥 편하게 쓰겠습니다.
혼자 힘으로 2일간 짜낸 코드이긴 한데 이 정도밖에 안됩니다.
일단 바보 같은 코드 좀 보시죠,,
package baseball;
import camp.nextstep.edu.missionutils.Console;
import camp.nextstep.edu.missionutils.Randoms;
import java.util.ArrayList;
import java.util.List;
public class Application {
private static final int BALL = 0;
private static final int STRIKE = 1;
private static final int BASEBALL_NUM_SIZE = 3;
private static List<Integer> COMPUTER_NUM = new ArrayList<>();
public static void main(String[] args) {
gameStart();
}
private static void gameStart() {
makeComputerNum();
playingGame();
if (checkRestartGame())
gameStart();
}
/**
* 컴퓨터의 3자리 숫자를 만드는 메소드
*/
private static void makeComputerNum() {
COMPUTER_NUM.clear();
while (COMPUTER_NUM.size() < BASEBALL_NUM_SIZE) {
int num = Randoms.pickNumberInRange(1, 9);
if (!COMPUTER_NUM.contains(num)) {
COMPUTER_NUM.add(num);
}
}
}
/**
* 게임을 실제로 플레이하는 구간 숫자를 계속 추측함.
*/
private static void playingGame() {
String gameString = "";
System.out.println("숫자 야구 게임을 시작합니다.");
while (!gameString.equals("3스트라이크")) {
System.out.println("숫자를 입력해주세요 : ");
String userInput = Console.readLine();
isValidLength(userInput);
gameString = printBallCount(checkBallCount(userInput));
System.out.println(gameString);
}
}
/**
* ballCount와 StrikeCount를 체크해서 List형태로 반환해준다.
*/
private static List<Integer> checkBallCount(String userInput) {
List<Integer> listBS = new ArrayList<>();
int totalCount = 0;
int strikeCount = 0;
int ballCount = 0;
for (int i = 0; i < BASEBALL_NUM_SIZE; i++) {
if (userInput.contains(COMPUTER_NUM.get(i).toString())) {
totalCount++;
}
if (Character.getNumericValue(userInput.charAt(i)) == COMPUTER_NUM.get(i)) {
strikeCount++;
}
}
ballCount = totalCount - strikeCount;
listBS.add(ballCount);
listBS.add(strikeCount);
return listBS;
}
/**
* BALL Count 와 STRIKE Count를 문자열로 변환하여 출력하여줌
*/
private static String printBallCount(List<Integer> listBS) {
String returnString = "";
if (listBS.get(BALL) != 0)
returnString = listBS.get(BALL) + "볼 ";
if (listBS.get(STRIKE) != 0)
returnString += listBS.get(STRIKE) + "스트라이크";
if (listBS.get(BALL) == 0 && listBS.get(STRIKE) == 0)
returnString = "낫싱";
return returnString;
}
/**
* 게임이 끝난 후 사용자에게 다시 시작할 것인지 물어보는 메소드
*/
public static boolean checkRestartGame() {
System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료");
System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.");
String gameChoiceNum = Console.readLine();
if (gameChoiceNum.equals("1"))
return true;
else if (gameChoiceNum.equals("2"))
return false;
//else를 사용하지않고 잘못 입력시 예외처리 하기
throw new IllegalArgumentException("1과 2중에 입력하셔야 합니다. ");
}
/**
* 입력한 수의 길이가 일치하는지 판별해주는 메소드
*/
public static void isValidLength(String inputNum){
if(inputNum.length() != BASEBALL_NUM_SIZE)
throw new IllegalArgumentException("입력 자릿 수 오류");
}
}
1~2일 차동안 작성한 코드입니다. 코드 컨벤션도 모르고 git 커밋 작성 규칙도 제대로 처음 알게 되면서 컴퓨터 공학과 4년간 뭐 했나 싶을 정도로 기본기가 없다는 걸 알아버렸습니다. SpringBoot 써서 홈페이지나 깨작한걸로는 턱없이 부족하다는 걸 알게 됐네요. System.out.println 저건 왜 이리 더러워 보이는지 빨리 어떻게든 깔끔하게 만들고 싶네요.
특히 (Character.getNumericValue(userInput.charAt(i)) == COMPUTER_NUM.get(i)) 이 부분 너무 난잡해 보여서 어떻게 바꿀까 고민 중이네요,,
MVC패턴, TDD, DDD, OOP 디스코드에서 많이 말하는데 웹 이외에도 MVC패턴을 적용할 수 있는지 처음 알게 돼서 나는 진짜 아는 게 없구나~ 생각하게 됐습니다. 일단 TestCase는 다 돌아가기에 페이지 분리를 해보면서 성장과정을 매일 포스팅하겠습니다!
화이또~
+추가
아 그리고 코드컨벤션을 다시보니까 static import를 사용하지말라? 되어있는데 이말인 즉슨 모두 모듈화를 해야한다고 생각이되네요 코드 다시짜기 가보자구~
(이 포스팅은 1주 차 과제가 끝난 뒤에 업로드되도록 설정되어 있습니다.)
작성일 : 23.10.21 / 02:23
'Activities > 우아한 테크 프리코스' 카테고리의 다른 글
[회고록] 우아한테크 프리코스 회고록2-2 (0) | 2023.11.02 |
---|---|
[회고록] 우아한테크 프리코스 회고록2-1 (2) | 2023.11.02 |
[회고록] 우아한테크 프리코스 회고록1-4 (1) | 2023.10.27 |
[회고록] 우아한테크 프리코스 회고록1-3 (1) | 2023.10.26 |
[회고록] 우아한테크 프리코스 회고록1-2 (1) | 2023.10.26 |
우아한 테크 코스에 지원하게 됐습니다. 회고록인 만큼 그냥 편하게 쓰겠습니다.
혼자 힘으로 2일간 짜낸 코드이긴 한데 이 정도밖에 안됩니다.
일단 바보 같은 코드 좀 보시죠,,
package baseball;
import camp.nextstep.edu.missionutils.Console;
import camp.nextstep.edu.missionutils.Randoms;
import java.util.ArrayList;
import java.util.List;
public class Application {
private static final int BALL = 0;
private static final int STRIKE = 1;
private static final int BASEBALL_NUM_SIZE = 3;
private static List<Integer> COMPUTER_NUM = new ArrayList<>();
public static void main(String[] args) {
gameStart();
}
private static void gameStart() {
makeComputerNum();
playingGame();
if (checkRestartGame())
gameStart();
}
/**
* 컴퓨터의 3자리 숫자를 만드는 메소드
*/
private static void makeComputerNum() {
COMPUTER_NUM.clear();
while (COMPUTER_NUM.size() < BASEBALL_NUM_SIZE) {
int num = Randoms.pickNumberInRange(1, 9);
if (!COMPUTER_NUM.contains(num)) {
COMPUTER_NUM.add(num);
}
}
}
/**
* 게임을 실제로 플레이하는 구간 숫자를 계속 추측함.
*/
private static void playingGame() {
String gameString = "";
System.out.println("숫자 야구 게임을 시작합니다.");
while (!gameString.equals("3스트라이크")) {
System.out.println("숫자를 입력해주세요 : ");
String userInput = Console.readLine();
isValidLength(userInput);
gameString = printBallCount(checkBallCount(userInput));
System.out.println(gameString);
}
}
/**
* ballCount와 StrikeCount를 체크해서 List형태로 반환해준다.
*/
private static List<Integer> checkBallCount(String userInput) {
List<Integer> listBS = new ArrayList<>();
int totalCount = 0;
int strikeCount = 0;
int ballCount = 0;
for (int i = 0; i < BASEBALL_NUM_SIZE; i++) {
if (userInput.contains(COMPUTER_NUM.get(i).toString())) {
totalCount++;
}
if (Character.getNumericValue(userInput.charAt(i)) == COMPUTER_NUM.get(i)) {
strikeCount++;
}
}
ballCount = totalCount - strikeCount;
listBS.add(ballCount);
listBS.add(strikeCount);
return listBS;
}
/**
* BALL Count 와 STRIKE Count를 문자열로 변환하여 출력하여줌
*/
private static String printBallCount(List<Integer> listBS) {
String returnString = "";
if (listBS.get(BALL) != 0)
returnString = listBS.get(BALL) + "볼 ";
if (listBS.get(STRIKE) != 0)
returnString += listBS.get(STRIKE) + "스트라이크";
if (listBS.get(BALL) == 0 && listBS.get(STRIKE) == 0)
returnString = "낫싱";
return returnString;
}
/**
* 게임이 끝난 후 사용자에게 다시 시작할 것인지 물어보는 메소드
*/
public static boolean checkRestartGame() {
System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료");
System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.");
String gameChoiceNum = Console.readLine();
if (gameChoiceNum.equals("1"))
return true;
else if (gameChoiceNum.equals("2"))
return false;
//else를 사용하지않고 잘못 입력시 예외처리 하기
throw new IllegalArgumentException("1과 2중에 입력하셔야 합니다. ");
}
/**
* 입력한 수의 길이가 일치하는지 판별해주는 메소드
*/
public static void isValidLength(String inputNum){
if(inputNum.length() != BASEBALL_NUM_SIZE)
throw new IllegalArgumentException("입력 자릿 수 오류");
}
}
1~2일 차동안 작성한 코드입니다. 코드 컨벤션도 모르고 git 커밋 작성 규칙도 제대로 처음 알게 되면서 컴퓨터 공학과 4년간 뭐 했나 싶을 정도로 기본기가 없다는 걸 알아버렸습니다. SpringBoot 써서 홈페이지나 깨작한걸로는 턱없이 부족하다는 걸 알게 됐네요. System.out.println 저건 왜 이리 더러워 보이는지 빨리 어떻게든 깔끔하게 만들고 싶네요.
특히 (Character.getNumericValue(userInput.charAt(i)) == COMPUTER_NUM.get(i)) 이 부분 너무 난잡해 보여서 어떻게 바꿀까 고민 중이네요,,
MVC패턴, TDD, DDD, OOP 디스코드에서 많이 말하는데 웹 이외에도 MVC패턴을 적용할 수 있는지 처음 알게 돼서 나는 진짜 아는 게 없구나~ 생각하게 됐습니다. 일단 TestCase는 다 돌아가기에 페이지 분리를 해보면서 성장과정을 매일 포스팅하겠습니다!
화이또~
+추가
아 그리고 코드컨벤션을 다시보니까 static import를 사용하지말라? 되어있는데 이말인 즉슨 모두 모듈화를 해야한다고 생각이되네요 코드 다시짜기 가보자구~
(이 포스팅은 1주 차 과제가 끝난 뒤에 업로드되도록 설정되어 있습니다.)
작성일 : 23.10.21 / 02:23
'Activities > 우아한 테크 프리코스' 카테고리의 다른 글
[회고록] 우아한테크 프리코스 회고록2-2 (0) | 2023.11.02 |
---|---|
[회고록] 우아한테크 프리코스 회고록2-1 (2) | 2023.11.02 |
[회고록] 우아한테크 프리코스 회고록1-4 (1) | 2023.10.27 |
[회고록] 우아한테크 프리코스 회고록1-3 (1) | 2023.10.26 |
[회고록] 우아한테크 프리코스 회고록1-2 (1) | 2023.10.26 |