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: 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;
}

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


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

Domain
- car
1. move(a,b)
2. randomMove();


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

import java.util.Arrays;

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) {

int carNumbers = InputView.carAmount();
carPositions = new int[carNumbers];

time = InputView.loopCount();

move();

}

public static int[] move() {
ResultView.startMove();
for(int j =0; j < time; j ++ ) {
for (int i = 0; i < carPositions.length; i++) {
carPositions[i] += Car.move();
}
ResultView.carPositions(carPositions);
}
return carPositions;
}


}
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);
}
}
20 changes: 20 additions & 0 deletions src/main/java/step3_racing_car/ResultView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package step3_racing_car;

import java.util.Scanner;

public class ResultView {
public static void carPositions(int[] carPositions) {
System.out.println();
for(int position : carPositions) {
for(int i = 0; i <= position; i ++) {
System.out.print("-");
}
System.out.println();
}
}

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

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

import Step1_학습테스트.CharMethods;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

import static org.assertj.core.api.Assertions.*;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;

@DisplayName("Char Methods 테스트")
public class CharMethodsTest {
private CharMethods charMethods;
@BeforeEach
void setUp() {
charMethods = new CharMethods();
}

@DisplayName("charAt 테스트")
@ParameterizedTest
@CsvSource(value = {"abc:0:a", "abc:1:b", "abc:2:c"}, delimiter = ':')
public void charIOTest(String string,int index, char expected) {
assertThat(charMethods.charAt(string, index)).isEqualTo(expected);
}

@DisplayName("charAt Error Index out of bound 테스트")
@Test
public void charErrorTest() {

assertThatThrownBy(() -> {
charMethods.charAt("abc", 3);
}).isInstanceOf(IndexOutOfBoundsException.class)
.hasMessageContaining("String index out of range: 3");

// Throwable thrown = catchThrowable(() -> { throw new Exception("String index out of range: 3"); });
// assertThat(thrown).isInstanceOf(Exception.class) .hasMessageContaining("String index out of range: 3");

assertThatExceptionOfType(IndexOutOfBoundsException.class).isThrownBy(() -> charMethods.charAt("abc", 3))
.withMessage("String index out of range: 3")
.withMessageContaining("String")
.withNoCause();

// assertThatExceptionOfType(IndexOutOfBoundsException.class).isThrownBy(() -> { throw new IndexOutOfBoundsException("NO!"); })
// .withMessage("NO!")
// .withMessageContaining("NO")
// .withNoCause();

}
}
Loading