Skip to content
Open
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