Skip to content
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
7 changes: 0 additions & 7 deletions src/main/java/RacingMain.java

This file was deleted.

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

import view.InputView;
import view.OutputView;
import domain.RacingGame;

import java.io.IOException;

public class RacingMain {

public static void main(String[] args) throws IOException {
final var carNames = InputView.getCarNames();
final var tryCount = InputView.getTryCount();

final var racingGame = new RacingGame(carNames, tryCount);
OutputView.printAnnouncement();
racingGame.race();

OutputView.printWinners(racingGame.getWinners());

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

import view.OutputView;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.random.RandomGenerator;

public class RacingGame {
String[] carNames;
String[] tmpCarNames;
int carCnt;
int tryCount;
int[] carMoveRecord;

public RacingGame(String str, int cnt) {
this.tmpCarNames = str.split(",");
carNames = nameError();
this.carCnt = carNames.length;
this.tryCount = cnt;
carMoveRecord = new int[carCnt];
for(int i = 0; i < carCnt; i++)
{
carMoveRecord[i] = 0;
}
}

public void race() {
for (int i = 0; i < tryCount; i++)
{
getRandomForCarMove();
OutputView.moveCarResult(carNames, carMoveRecord);
}
getWinners();
}

public void getRandomForCarMove()
{
for(int i = 0; i < carCnt; i++) { // 전진: true
if (canMove(RandomGenerator.getDefault().nextInt(10))) {
carMoveRecord[i]++;
}
}
}

public boolean canMove(int num)
{
return num >= 4;
}

public List<String> getWinners() {
int winnerRecord = Arrays.stream(carMoveRecord).max().getAsInt();
List<String> winnerName = new ArrayList<String>();

for (int i = 0; i < carMoveRecord.length; i++)
{
if (winnerRecord == carMoveRecord[i])
{
winnerName.add(carNames[i]);
}
}
return winnerName;
}

public String[] nameError()
{
int idx = 0;
List<String> validCarNames = new ArrayList<>();
for (String s : tmpCarNames)
{
if (s.length() <= 5) // 길이 5이하만 자동차 이름 등록
{
validCarNames.add(s);
}
}
return validCarNames.toArray(new String[0]);
}

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class InputView {
static BufferedReader Console = new BufferedReader(new InputStreamReader(System.in));
public static String getCarNames() throws IOException {
System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분).");
return Console.readLine();
}

public static int getTryCount() throws IOException {
System.out.println("시도할 회수는 몇회인가요?");
String str = Console.readLine();
return Integer.parseInt(str);
}

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

import java.util.List;

public class OutputView {

public static void printAnnouncement(){
System.out.println("실행 결과");
}
public static void moveCarResult(String[] carNames, int[] carMoveRecord) {
int idx = 0;
for(String s : carNames)
{
System.out.print(s + " : ");
String result = "-".repeat(carMoveRecord[idx++]);
System.out.println(result);
}
System.out.print("\n");
}
public static void printWinners(List<String> winners) {
boolean comma = false;
for(String s : winners)
{
if(comma)
{
System.out.println(", ");
}
else if(!comma)
{
comma = true;
}
System.out.print(s);
}
System.out.println("가 최종 우승했습니다.");
}

}