diff --git a/src/main/java/SetCollection.java b/src/main/java/SetCollection.java new file mode 100644 index 0000000..9cd1027 --- /dev/null +++ b/src/main/java/SetCollection.java @@ -0,0 +1,8 @@ +import java.util.Set; + +public class SetCollection { + public Integer getNumbersSize(Set numbers) { + return numbers.size(); + } + +} diff --git a/src/main/java/StringPs.java b/src/main/java/StringPs.java new file mode 100644 index 0000000..53b1e89 --- /dev/null +++ b/src/main/java/StringPs.java @@ -0,0 +1,15 @@ +public class StringPs { + + public String[] stringSplit(String s) { + String[] arr = s.split(","); + return arr; + } + + public String stringSub(String s) { + return s.substring(1,4); + } + + public String stringCharAt(int i, String abc) { + return Character.toString(abc.charAt(i)); + } +} diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java new file mode 100644 index 0000000..5cb1f3b --- /dev/null +++ b/src/main/java/calculator/Calculator.java @@ -0,0 +1,89 @@ +package calculator; + +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Arrays; + +import static java.lang.Integer.parseInt; + +public class Calculator { + + public int getNumber(String s) { + String[] arr = s.split(" "); + ArrayList arrayList = new ArrayList<>(Arrays.asList(arr)); + if(arrayList.size() == 1) { + return Integer.parseInt(arrayList.get(0)); + } + while (arrayList.size() > 0) { + + if(arrayList.get(1).equals("+")) { + int number = addNumber(arrayList.get(0), arrayList.get(2)); + + for(int i =0; i<3; i++ ) { + arrayList.remove(0); + } + arrayList.add(0,Integer.toString(number)); + } + + if(arrayList.size()==1){ + return Integer.parseInt(arrayList.get(0)); + } + + if(arrayList.get(1).equals("-")) { + int number = subTractionNumber(arrayList.get(0), arrayList.get(2)); + + for(int i =0; i<3; i++ ) { + arrayList.remove(0); + } + arrayList.add(0,Integer.toString(number)); + } + + if(arrayList.size()==1){ + return Integer.parseInt(arrayList.get(0)); + } + + if(arrayList.get(1).equals("*")) { + int number = multiplicationNumber(arrayList.get(0), arrayList.get(2)); + + for(int i =0; i<3; i++ ) { + arrayList.remove(0); + } + arrayList.add(0,Integer.toString(number)); + } + + if(arrayList.size()==1){ + return Integer.parseInt(arrayList.get(0)); + } + + if(arrayList.get(1).equals("/")) { + int number = divideNumber(arrayList.get(0), arrayList.get(2)); + + for(int i =0; i<3; i++ ) { + arrayList.remove(0); + } + arrayList.add(0,Integer.toString(number)); + } + + if(arrayList.size()==1){ + return Integer.parseInt(arrayList.get(0)); + } + } + return Integer.parseInt(arrayList.get(0)); + } + + public int addNumber(String s, String b) { + return Integer.parseInt(s) + Integer.parseInt(b); + } + + public int subTractionNumber(String s, String b) { + return Integer.parseInt(s) - Integer.parseInt(b); + } + + public int divideNumber(String s, String b) { + return Integer.parseInt(s) / Integer.parseInt(b); + } + + public int multiplicationNumber(String s, String b) { + return Integer.parseInt(s) * Integer.parseInt(b); + } +} \ No newline at end of file diff --git a/src/main/java/calculator/Computation.java b/src/main/java/calculator/Computation.java new file mode 100644 index 0000000..34691f2 --- /dev/null +++ b/src/main/java/calculator/Computation.java @@ -0,0 +1,20 @@ +package calculator; + +public class Computation { + + public int addNumber(String s, String b) { + return Integer.parseInt(s) + Integer.parseInt(b); + } + + public int subTractionNumber(String s, String b) { + return Integer.parseInt(s) - Integer.parseInt(b); + } + + public int divideNumber(String s, String b) { + return Integer.parseInt(s) / Integer.parseInt(b); + } + + public int multiplicationNumber(String s, String b) { + return Integer.parseInt(s) * Integer.parseInt(b); + } +} diff --git a/src/main/java/racing/Descending.java b/src/main/java/racing/Descending.java new file mode 100644 index 0000000..4f79a62 --- /dev/null +++ b/src/main/java/racing/Descending.java @@ -0,0 +1,11 @@ +package racing; + +import java.util.Comparator; + +public class Descending implements Comparator { + + @Override + public int compare(Integer o1, Integer o2) { + return o2.compareTo(o1); + } +} diff --git a/src/main/java/racing/InputView.java b/src/main/java/racing/InputView.java new file mode 100644 index 0000000..baee111 --- /dev/null +++ b/src/main/java/racing/InputView.java @@ -0,0 +1,20 @@ +package racing; + +import java.util.Scanner; + +public class InputView { + + Scanner scanner = new Scanner(System.in); + + public String askCarCount() { + System.out.printf("경주할 자동차 이름을 입력하세요(이름은 쉼표,를 기준으로 구분)"); + String carNames = scanner.nextLine(); + return carNames; + } + + public int askMoveCount() { + System.out.printf("시도할 회수는 몇 회 인가요?"); + int moveCount = scanner.nextInt(); + return moveCount; + } +} diff --git a/src/main/java/racing/README.md b/src/main/java/racing/README.md new file mode 100644 index 0000000..29ba477 --- /dev/null +++ b/src/main/java/racing/README.md @@ -0,0 +1,15 @@ +Step_3 + 1. 초간단 자동차 경주 게임을 구현한다. + 2. 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다. + 3. 사용자는 몇 대의 자동차로 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. + 4. 전진하는 조건은 0에서 9 사이에서 random 값을 구한후 random 값이 4 이상일 경우이다. + 자동차의 상태를 화면에 출력한다. 어느 시점에 출력할 것인지를 대한 제약은 없다. + +Step_4 +1. 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다. +2. 자동차의 이름은 쉼표를 기준으로 구분한다. +3. 자동차 경주 게임을 완료한 후에 누가 우승했는지 알려준다. + +test +1. 자동차 이름을 부여했을때 부여되었는지 테스트 +2. 우승자가 카운트가 제일 많은 사람인지 확인하는 테스트 diff --git a/src/main/java/racing/RacingCar.java b/src/main/java/racing/RacingCar.java new file mode 100644 index 0000000..2061ad5 --- /dev/null +++ b/src/main/java/racing/RacingCar.java @@ -0,0 +1,37 @@ +package racing; + +import java.util.Random; + +public class RacingCar implements Comparable { + private int count; + private String name; + + public RacingCar(int count, String name) { + this.count = count; + this.name = name; + } + + public void move(int count) { + if (count >= 4) { + this.count +=1; + } + } + + public int getCount() { + return this.count; + } + + public String getName() { + return this.name; + } + + @Override + public int compareTo(Object cars) { + RacingCar car = (RacingCar) cars; + if (this.count < car.getCount()) { + return 1; + } else { + return -1; + } + } +} diff --git a/src/main/java/racing/RacingCars.java b/src/main/java/racing/RacingCars.java new file mode 100644 index 0000000..f4034cf --- /dev/null +++ b/src/main/java/racing/RacingCars.java @@ -0,0 +1,31 @@ +package racing; + +import java.util.*; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +public class RacingCars { + private ArrayList cars = new ArrayList<>(); + + public void addRacingCars(String names) { + String[] arr = names.split(","); + for(int i =0; i e.getCount() == cars.get(0).getCount()).collect(Collectors.toList()); + } + + public ArrayList getCars() {return cars;} +} diff --git a/src/main/java/racing/RacingGame.java b/src/main/java/racing/RacingGame.java new file mode 100644 index 0000000..72cba64 --- /dev/null +++ b/src/main/java/racing/RacingGame.java @@ -0,0 +1,23 @@ +package racing; + +import java.util.Scanner; + +public class RacingGame { + final static private RacingCars cars = new RacingCars(); + + public static void main(String[] args) { + + InputView inputView = new InputView(); + + + cars.addRacingCars(inputView.askCarCount()); + + int count = inputView.askMoveCount(); + + for(int i =1; i<=count; i++) { + cars.selectMoveCount(); + ResultView.viewMovingCar(cars.getCars(),i); + } + ResultView.viewWinnerCar(cars.getWinnerCar()); + } +} diff --git a/src/main/java/racing/RandomGenerator.java b/src/main/java/racing/RandomGenerator.java new file mode 100644 index 0000000..644c0cb --- /dev/null +++ b/src/main/java/racing/RandomGenerator.java @@ -0,0 +1,10 @@ +package racing; + +import java.util.Random; + +public class RandomGenerator { + public int get() { + Random random = new Random(); + return Math.abs(random.nextInt()) % 9; + } +} diff --git a/src/main/java/racing/ResultView.java b/src/main/java/racing/ResultView.java new file mode 100644 index 0000000..13d99d5 --- /dev/null +++ b/src/main/java/racing/ResultView.java @@ -0,0 +1,22 @@ +package racing; + +import java.util.ArrayList; + +public class ResultView { + public static void viewMovingCar(ArrayList cars, int count) { + for(RacingCar car : cars) { + System.out.print(car.getName()+" : "); + for(int i =0; i cars) { + for(RacingCar car : cars) { + System.out.print(car.getName()); + } + } +} \ No newline at end of file diff --git a/src/test/java/SetCollectionTest.java b/src/test/java/SetCollectionTest.java new file mode 100644 index 0000000..fd12c5d --- /dev/null +++ b/src/test/java/SetCollectionTest.java @@ -0,0 +1,57 @@ +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 org.junit.jupiter.params.provider.ValueSource; + +import java.util.HashSet; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class SetCollectionTest { + private Set numbers; + + @BeforeEach + void setUp() { + numbers = new HashSet<>(); + numbers.add(1); + numbers.add(1); + numbers.add(2); + numbers.add(3); + } + + @DisplayName("Hash 사이즈 검사 테스트") + @Test + public void testCheckSizeTest() { + SetCollection checkSize = new SetCollection(); + Integer result = checkSize.getNumbersSize(this.numbers); + assertEquals(3, result); + } + + @DisplayName("Hash안에 포함되어있는지 검사 테스트") + @Test + public void contains() { + assertThat(numbers.contains(1)).isTrue(); + assertThat(numbers.contains(2)).isTrue(); + assertThat(numbers.contains(3)).isTrue(); + } + + @DisplayName("중복된 메소드 제거 테스") + @ParameterizedTest + @ValueSource(ints= {1, 2, 3}) + public void testContaionsTrueTest(int number) { + assertTrue(numbers.contains(number)); + } + + @DisplayName("포함된 값이 없으면 false 반환하는 테스트") + @ParameterizedTest + @CsvSource(value= {"1:true", "2:true", "3:true", "4:false", "5:false"}, delimiter = ':') + public void testContaionsTest(int input,boolean expected) { + boolean result = numbers.contains(input); + assertEquals(expected, result); + } + } \ No newline at end of file diff --git a/src/test/java/StringTest.java b/src/test/java/StringTest.java new file mode 100644 index 0000000..45907c5 --- /dev/null +++ b/src/test/java/StringTest.java @@ -0,0 +1,44 @@ +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + + +import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class StringTest { + + @DisplayName("배열의 숫자값들을트 ,을 기준으로 분리하는 테스트") + @Test + public void testSplitStringTest() { + String[] arr = {"1","2"}; + StringPs splitString = new StringPs(); + String[] result1 = splitString.stringSplit("1,2"); + assertArrayEquals(arr,result1); + String[] arr2 = {"1"}; + String[] result2 = splitString.stringSplit("1"); + assertArrayEquals(arr2,result2); + } + + @DisplayName("()를 제거하는 테스트") + @Test + public void testSubStringTest() { + String str = "1,2"; + StringPs removeString = new StringPs(); + String result = removeString.stringSub("(1,2)"); + assertEquals(str, result); + } + + @DisplayName("문자를 가져올때 위치값을 벗어나면 메세지가 발생하는 부분에 대한 테스트") + @Test + public void testCharAtStringTest() { + String str = "b"; + StringPs charAtString = new StringPs(); + String result = charAtString.stringCharAt(1,"abc"); + assertEquals(str,result); + assertThatThrownBy(() -> { + charAtString.stringCharAt(50,"abc"); + }).isInstanceOf(IndexOutOfBoundsException.class).hasMessageContaining("String index out of range:"); + } + +} diff --git a/src/test/java/calculator/CalculatorTest.java b/src/test/java/calculator/CalculatorTest.java new file mode 100644 index 0000000..de710e8 --- /dev/null +++ b/src/test/java/calculator/CalculatorTest.java @@ -0,0 +1,77 @@ +package calculator; + +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 org.junit.jupiter.params.provider.ValueSource; + +import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CalculatorTest { + private Calculator calculator; + + @BeforeEach + void setUp() { + calculator = new Calculator(); + } + + @DisplayName("계산기") + @ParameterizedTest + @CsvSource(value = {"2 + 3 * 4 / 2 :10","1:1", "0 * 10 * 11 + 3 :3"}, delimiter = ':') + public void testCalculator(String input, int result) { + assertThat(calculator.getNumber(input)).isEqualTo(result); + } + + @DisplayName("계산기의 합을 테스트한다.") + @Test + public void testAddCalculator() { + Calculator addTest = new Calculator(); + int result = addTest.addNumber("2","3"); + assertEquals(5,result); + } + + @DisplayName("계산기의 뺄셈을 테스트한다.") + @Test + public void testSubtractionCalculator() { + Calculator subTractionTest = new Calculator(); + int result = subTractionTest.subTractionNumber("4","3"); + assertEquals(1,result); + } + + @DisplayName("계산기의 나눗셈을 테스트한다.") + @Test + public void testDivideCalculator() { + Calculator divideTest = new Calculator(); + int result = divideTest.divideNumber("4","2"); + assertEquals(2,result); + } + + @DisplayName("계산기의 셈을 테스트한다.") + @Test + public void testMultiplicationCalculator() { + Calculator multiplication = new Calculator(); + int result = multiplication.multiplicationNumber("4","3"); + assertEquals(12,result); + } + + @DisplayName("not Null") + @Test + public void testNotnull() { + assertThatIllegalArgumentException().isThrownBy(() -> { + calculator.getNumber("null"); + }); + } + + @DisplayName("not Null") + @Test + public void testNotContribution() { + assertThatIllegalArgumentException().isThrownBy(() -> { + calculator.getNumber("!"); + }); + } + +} diff --git a/src/test/java/racing/RacingGameTest.java b/src/test/java/racing/RacingGameTest.java new file mode 100644 index 0000000..05a1135 --- /dev/null +++ b/src/test/java/racing/RacingGameTest.java @@ -0,0 +1,67 @@ +package racing; + +import org.assertj.core.internal.bytebuddy.build.ToStringPlugin; +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 org.junit.jupiter.params.provider.ValueSource; + +import java.util.ArrayList; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + + +public class RacingGameTest { + private RacingCars racingCars; + private RacingCar car; + + @BeforeEach + void setUp() { + racingCars = new RacingCars(); + car = new RacingCar(0,"미정"); + } + + @DisplayName("레이싱카 개수를 확인하는 테스트") + @Test + public void testCountCarTest() { + String name = "gibong,woomin"; + racingCars.addRacingCars(name); + ArrayList result = racingCars.getCars(); + assertEquals(name.split(",").length, result.size()); + } + + @DisplayName("레이싱카가 제대로 움직이는지 확인하는 테스트") + @Test + public void testMoveTest() { + car.move(6); + assertEquals(1,car.getCount()); + car.move(7); + assertEquals(2,car.getCount()); + car.move(3); + assertEquals(2,car.getCount()); + } + + + @DisplayName("자동차에 이름이 제대로 부여되는지 확인하는 테스트") + @ParameterizedTest + @CsvSource(value= {"gibong,woomin", "gibong,woomin,gibong,woomin","gibong"}) + public void testAddCarNameTest(String names) { + racingCars.addRacingCars(names); + ArrayList result = racingCars.getCars(); + assertEquals(names.split(",").length,result.size()); + } + +// @DisplayName("승자가 누구인지 알아내는 테스트") // 도저히... +// @ParameterizedTest +// @CsvSource(value = {"5"}) +// public void testWinnerCarTest() { +// racingCars.addRacingCars("기봉,영규,우민"); +// ArrayList names = racingCars.getWinnerCar(); +// assertEquals(names, new ); +// } + +}