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

Follow step4 racing car instructions #15

Open
wants to merge 14 commits into
base: gyim1345
Choose a base branch
from
7 changes: 7 additions & 0 deletions src/main/java/Step1_학습테스트/CharMethods.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package Step1_학습테스트;

public class CharMethods {
public char charAt(String string, int index) {
return string.charAt(index);
}
}
10 changes: 10 additions & 0 deletions src/main/java/Step1_학습테스트/SetMethods.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package Step1_학습테스트;

import java.util.Set;

public class SetMethods {
public int getSize(Set<Integer> set) {
return set.size();
}

}
11 changes: 11 additions & 0 deletions src/main/java/Step1_학습테스트/StringMethods.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package Step1_학습테스트;

public class StringMethods {
public String[] splitStrings(String string) {
return string.split("");
}

public static String subString(String string, int a, int b) {
return string.substring(a,b);
}
}
41 changes: 41 additions & 0 deletions src/main/java/Step2_Calculator/ArithmeticOperation.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package Step2_Calculator;

public class ArithmeticOperation {

public static int arithmeticOperation(int acc, int curr, String arithmeticOperator) {

if(arithmeticOperator.equals("+")){
return sum(acc, curr);
}

if(arithmeticOperator.equals("-")){
return subtract(acc, curr);
}

if(arithmeticOperator.equals("/")){
return divide(acc, curr);
}

if(arithmeticOperator.equals("*")){
return multiply(acc, curr);
}

return acc;
}

private static int sum(int acc, int curr) {
return acc + curr;
}

private static int divide(int acc, int curr) {
return acc / curr;
}

private static int multiply(int acc, int curr) {
return acc * curr;
}

private static int subtract(int acc, int curr) {
return acc - curr;
}
}
17 changes: 17 additions & 0 deletions src/main/java/Step2_Calculator/Calculator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package Step2_Calculator;

public class Calculator {
private int accumulator;

public int calculate(String s) {
InputErrorHandler.checkCalculatorIllegalArgument(s);
String[] arithmetics = InputExtactor.extractCalculatorInputs(s);

accumulator = Integer.parseInt(arithmetics[0]);

for(int i = 1; i< arithmetics.length; i += 2) {
accumulator = ArithmeticOperation.arithmeticOperation(accumulator, Integer.parseInt(arithmetics[i+1]), arithmetics[i]);
}
return accumulator;
}
}
11 changes: 11 additions & 0 deletions src/main/java/Step2_Calculator/CalculatorApp.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package Step2_Calculator;

public class CalculatorApp {
public static void main(String[] args) {
InputView.startCalculator();
String input = InputView.inputArithmeticOperations();
Calculator calculator = new Calculator();
int result = calculator.calculate(input);
OutputView.showOutput(result);
}
}
17 changes: 17 additions & 0 deletions src/main/java/Step2_Calculator/InputErrorHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package Step2_Calculator;

public class InputErrorHandler {
public static void checkCalculatorIllegalArgument(String s){
String numbersToSingleLength = s.replaceAll("-?\\d+", "1");
String noSpace = numbersToSingleLength.replaceAll(" ", "");
if(numbersToSingleLength.length() != noSpace.length()*2-1) {
throw new IllegalArgumentException("Wrong input Format! Must be (number) (arithmetic Operator) (number) ... so on with no null inputs");
}

if(!s.matches("[\\d+*/\\-]+")){
System.out.println("asdasdasd");
throw new IllegalArgumentException("Wrong inputs!!!");
}

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

public class InputExtactor {
public static String[] extractCalculatorInputs(String s) {
return s.split(" ");
}
}
16 changes: 16 additions & 0 deletions src/main/java/Step2_Calculator/InputView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package Step2_Calculator;

import java.util.Scanner;

public class InputView {
private static Scanner scanner;

public static void startCalculator(){
System.out.print("Input Arithmetic Operations : ");
}
public static String inputArithmeticOperations() {
scanner = new Scanner(System.in);
return scanner.nextLine();
}

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

public class OutputView {

public static void showOutput(int result) {
System.out.println("Result :" + result);
}

}
1 change: 1 addition & 0 deletions src/main/java/empty.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ㄷㄱㅀㄴㄷㄹ
16 changes: 16 additions & 0 deletions src/main/java/step3_racing_car/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package step3_racing_car;

import java.util.Random;

public class Car {

public static int move() {
return movable() ? 1 : 0;
}

public static boolean movable() {
int randomNumber = RandomGenerator.generateNumber(10);
return randomNumber < 5 ? false : true;
}

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

import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class CarList {

public static String[] getNames(String carNames) {
return carNames.split(",");
}

public static String[] getIndexNames(String[] carListNames, int[] winnersIndex) {
return IntStream.range(0, carListNames.length)
.filter(i -> IntStream.of(winnersIndex).anyMatch(x-> x== i))
.mapToObj(i -> carListNames[i])
.toArray(String[]::new);
}
}
24 changes: 24 additions & 0 deletions src/main/java/step3_racing_car/InputView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package step3_racing_car;

import java.util.Scanner;

public class InputView {
private static Scanner scanner;
public static int carAmount() {
System.out.println("자동차 대수는 몇 대 인가요?");
scanner = new Scanner(System.in);
return scanner.nextInt();
}

public static String carNames() {
System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분).");
scanner = new Scanner(System.in);
return scanner.nextLine();
}

public static int loopCount() {
System.out.println("시도할 회수는 몇 회 인가요?");
scanner = new Scanner(System.in);
return scanner.nextInt();
}
}
26 changes: 26 additions & 0 deletions src/main/java/step3_racing_car/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
기능을 구현하기 전에 README.md 파일에 구현할 기능 목록을 정리해 추가한다


App
- RacingGame -> app controller
1. inputView 자동차 대수는 몇 대 인가요?
a
시도할 회수는 몇 회 인가요?
b
출력(실행)
2. input값 car 도메인에 전달.

Domain
- car
1. move(a,b)
2. randomMove()
- carList
1. getNames()
2. getIndexNames()
- RaceCalculator
1. calculateWinner
2. calculateFurthestPosition

UI
- InputView -> input 넣는 scanner
- ResultView -> 출력할 System.out의 문구들
20 changes: 20 additions & 0 deletions src/main/java/step3_racing_car/RaceCalculator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package step3_racing_car;

import java.util.Arrays;
import java.util.stream.IntStream;

public class RaceCalculator {

public static int[] calculateWinner(int[] carPositions){
int furthestPosition = calculateFurthestPosition(carPositions);
return IntStream.range(0, carPositions.length)
.filter(i -> furthestPosition == carPositions[i])
.mapToObj(i->i)
.mapToInt(x -> x)
.toArray();
}

public static int calculateFurthestPosition(int[] carPositions) {
return Arrays.stream(carPositions).max().getAsInt();
}
}
38 changes: 38 additions & 0 deletions src/main/java/step3_racing_car/RacingGame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package step3_racing_car;

public class RacingGame {
private static int[] carPositions;
private static int time;

public RacingGame(int[] carPositions, int time) {
this.carPositions = carPositions;
this.time = time;
}

public static void main(String[] args) {
String carNames = InputView.carNames();
String[] carListNames = CarList.getNames(carNames);
carPositions = new int[carListNames.length];
time = InputView.loopCount();
move(carListNames);
int[] winnersIndex = RaceCalculator.calculateWinner(carPositions);
String[] winnerList = CarList.getIndexNames(carListNames, winnersIndex);
ResultView.showWinner(winnerList);
}

public static int[] move(String[] carListNames) {
ResultView.startMove();
for(int j =0; j < time; j ++ ) {
changePosition();
ResultView.carPositions(carPositions,carListNames);
}
return carPositions;
}

public static void changePosition() {
for (int i = 0; i < carPositions.length; i++) {
carPositions[i] += Car.move();
}
}

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

import java.util.Random;

public class RandomGenerator {
private static Random generator;

public static int generateNumber(int max) {
generator = new Random();
return generator.nextInt(max);
}
}
31 changes: 31 additions & 0 deletions src/main/java/step3_racing_car/ResultView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package step3_racing_car;

public class ResultView {
public static void carPositions(int[] carPositions, String[] carListNames) {
System.out.println();
for(int i = 0; i< carListNames.length; i ++) {
System.out.print(carListNames[i] + " : ");
printPosition(carPositions[i]);
System.out.println();
}
}

public static void printPosition(int position) {
for(int i = 0; i <= position; i ++) {
System.out.print("-");
}
}

public static void startMove() {
System.out.println("실행 결과");
}

public static void showWinner(String[] winnerList) {
for(String winner : winnerList) {
System.out.print(winner + " ");
}
System.out.println("(이)가 최종 우승했습니다.");
}


}
Loading