diff --git a/mission1/Car.java b/mission1/Car.java new file mode 100644 index 0000000..21a42fc --- /dev/null +++ b/mission1/Car.java @@ -0,0 +1,21 @@ +public class Car { + private String name; + private int position; + + public Car(String name, int position) { + this.name = name; + this.position = position; + } + + public String getName() { + return this.name; + } + + public int getPosition() { + return this.position; + } + + public int move() { + return this.position++; + } +} diff --git a/mission1/InputView.java b/mission1/InputView.java new file mode 100644 index 0000000..8ae16e3 --- /dev/null +++ b/mission1/InputView.java @@ -0,0 +1,22 @@ +import java.util.Scanner; + +public class InputView { + public static String setNames() { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + Scanner scanner = new Scanner(System.in); + return scanner.nextLine(); + } + + public static String overNames() { + System.out.println("자동차의 이름들을 5자 이하로 다시 작성하십시오"); + Scanner scanner = new Scanner(System.in); + return scanner.nextLine(); + } + + public static int inputNumber() { + System.out.println("시도할 회수는 몇회인가요?"); + Scanner scanner = new Scanner(System.in); + return scanner.nextInt(); + } + +} \ No newline at end of file diff --git a/mission1/Main.java b/mission1/Main.java new file mode 100644 index 0000000..aeeadf5 --- /dev/null +++ b/mission1/Main.java @@ -0,0 +1,12 @@ +import java.util.ArrayList; + +public class Main { + public static void main(String[] args) { + RacingGame racing = new RacingGame(); + ArrayList cars = new ArrayList<>(); + cars = racing.registerCarNames(cars, racing.nameSet(InputView.setNames())); + int number = InputView.inputNumber(); + ResultView result = new ResultView(); + result.resultRacing(number, cars); + } +} diff --git a/mission1/RacingGame.java b/mission1/RacingGame.java new file mode 100644 index 0000000..d6c0bb1 --- /dev/null +++ b/mission1/RacingGame.java @@ -0,0 +1,136 @@ +import java.util.Random; +import java.util.ArrayList; + +public class RacingGame { + static final int MAX_LENGTH = 6; + static final int CAN_GO_NUMBER = 4; + static final int ORIGINAL_POSITION = 0; + + public String[] nameSet(String inputNames) { + String[] names = inputNames.split(","); + for (int i = 0; i < names.length; i++) { + names = nameLengthCheck(names, i); + } + return names; + } + + public ArrayList registerCarNames(ArrayList cars, String[] nameSet) { + for (int i = 0; i < nameSet.length; i++) { + cars.add(new Car(nameSet[i], ORIGINAL_POSITION)); + } + return cars; + } + + public String[] nameLengthCheck(String[] names, int i) { + if (names[i].length() >= MAX_LENGTH) { + String inputNames = InputView.overNames(); + names = inputNames.split(","); + } + return names; + } + + public String getInputNames(String names) { + String[] carNames = nameSet(names); + String cars = ""; + for (int i = 0; i < carNames.length; i++) { + cars += carNames[i] + ""; + } + return cars; + } + + public static int randomValue() { + Random random = new Random(); + return random.nextInt(10); + } + + public static ArrayList valueCheck(ArrayList cars, int randomValue, int i) { + if (randomValue >= CAN_GO_NUMBER) { + cars.get(i).move(); + } + return cars; + } + + public static ArrayList randomToNumber(ArrayList cars) { + for (int i = 0; i < cars.size(); i++) { + valueCheck(cars, randomValue(), i); + } + return cars; + } + + public static Car winnerJudge(ArrayList cars, int max, int i, String winner) { + if (max < cars.get(i).getPosition()) { + max = cars.get(i).getPosition(); + winner = cars.get(i).getName(); + } + Car passInfo = new Car(winner, max); + return passInfo; + } + + public static int sameScoreCount(int cnt, int max, ArrayList cars, int i) { + if (max == cars.get(i).getPosition()) { + cnt += 1; + } + return cnt; + } + + public static ArrayList winnersNameSet(ArrayList winners, int max, ArrayList cars) { + for (int i = 0; i < cars.size(); i++) { + winners = sameScoreWinners(max, cars, winners, i); + } + return winners; + } + + public static ArrayList sameScoreWinners(int max, ArrayList cars, ArrayList winners, int i) { + if (max == cars.get(i).getPosition()) { + winners.add(cars.get(i).getName()); + } + return winners; + } + + public static ArrayList winnerNameReturn(int cnt, String winner) { + ArrayList winners = new ArrayList<>(); + if (cnt == 0) { + winners.add(winner); + } + return winners; + } + + public static ArrayList winnersNameReturn(int cnt, int max, ArrayList cars) { + ArrayList winners = new ArrayList<>(cnt); + winners = winnersNameSet(winners, max, cars); + return winners; + } + + public static ArrayList findWinner(ArrayList cars) { + int max = cars.get(0).getPosition(); + String winner = cars.get(0).getName(); + for (int i = 1; i < cars.size(); i++) { + max = winnerJudge(cars, max, i, winner).getPosition(); + winner = winnerJudge(cars, max, i, winner).getName(); + } + int cnt = 0; + for (int i = 0; i < cars.size(); i++) { + cnt = sameScoreCount(cnt, max, cars, i); + } + ArrayList winners; + winners = winnerNameReturn(cnt, winner); + if (cnt > 0) { + winners = winnersNameReturn(cnt, max, cars); + } + return winners; + } + + public String getWinner(ArrayList cars, int[] randomNumbers) { + ResultView v = new ResultView(); + + for (int i = 0; i < cars.size(); i++) { + cars = valueCheck(cars, randomNumbers[i], i); + } + ArrayList winners = findWinner(cars); + String winner = ""; + for (int i = 0; i < winners.size(); i++) { + winner += winners.get(i) + " "; + } + return winner; + } +} diff --git a/mission1/RacingGameTest.java b/mission1/RacingGameTest.java new file mode 100644 index 0000000..53c3dcf --- /dev/null +++ b/mission1/RacingGameTest.java @@ -0,0 +1,39 @@ +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.ArrayList; + +public class RacingGameTest { + RacingGame r; + ResultView v; + + @Before + public void setUp() { + r = new RacingGame(); + v = new ResultView(); + } + + @Test + public void carNamesInputTest() { + String input = "아송, 윈도우, 구름, 그리즈, 키캣"; + assertEquals("아송 윈도우 구름 그리즈 키캣", r.getInputNames(input)); + } + + @Test + public void winnerTest() { + ArrayList cars = new ArrayList<>(); + String input = "아송, 윈도우, 구름, 그리즈, 키캣"; + int number = 1; + int[] randomNumbers = {1, 3, 5, 8, 2}; + cars = r.registerCarNames(cars, r.nameSet(input)); + assertEquals(" 구름 그리즈 ", r.getWinner(cars, randomNumbers)); + } + + @After + public void tearDown() { + r = null; + } +} \ No newline at end of file diff --git a/mission1/ResultView.java b/mission1/ResultView.java new file mode 100644 index 0000000..01e8a6c --- /dev/null +++ b/mission1/ResultView.java @@ -0,0 +1,40 @@ +import java.util.ArrayList; + +public class ResultView { + public static void resultRacing(int number, ArrayList cars) { + System.out.println("실행 결과"); + for (int i = 0; i < number; i++) { + RacingGame.randomToNumber(cars); + resultRacing(cars); + System.out.println(""); + } + ArrayList winners = RacingGame.findWinner(cars); + finalResultView(winners); + } + + public static void resultRacing(ArrayList cars) { + for (int i = 0; i < cars.size(); i++) { + System.out.println(cars.get(i).getName() + ":" + racingView(cars.get(i).getPosition())); + } + } + + public static String racingView(int n) { + String car = ""; + for (int i = 0; i < n; i++) { + car += "-"; + } + return car; + } + + public static void finalResultView(ArrayList winners) { + if (winners.size() == 1) { + System.out.println(winners.get(0) + "가 최종 우승했습니다."); + } + if (winners.size() > 1) { + for (int i = 0; i < winners.size() - 1; i++) { + System.out.print(winners.get(i) + ","); + } + System.out.println(winners.get(winners.size() - 1) + "가 최종 우승했습니다."); + } + } +}