package lotto;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
class LottoTest {
@DisplayName("로또 번호의 개수가 6개가 넘어가면 예외가 발생한다.")
@Test
void createLottoByOverSize() {
assertThatThrownBy(() -> new Lotto(List.of(1, 2, 3, 4, 5, 6, 7)))
.isInstanceOf(IllegalArgumentException.class);
}
@DisplayName("로또 번호에 중복된 숫자가 있으면 예외가 발생한다.")
@Test
void createLottoByDuplicatedNumber() {
// TODO: 이 테스트가 통과할 수 있게 구현 코드 작성
assertThatThrownBy(() -> new Lotto(List.of(1, 2, 3, 4, 5, 5)))
.isInstanceOf(IllegalArgumentException.class);
}
// 아래에 추가 테스트 작성 가능
@DisplayName("로또 번호가 1~45 범위를 벗어나면 예외가 발생한다.")
@Test
void createLottoByOutOfRangeNumber() {
assertThatThrownBy(() -> new Lotto(List.of(0, 2, 3, 4, 5, 6))) // 0
.isInstanceOf(IllegalArgumentException.class)
.hasMessage("[ERROR] 로또 번호는 1~45 사이여야 합니다.");
assertThatThrownBy(() -> new Lotto(List.of(1, 2, 3, 4, 5, 46))) // 46 이상
.isInstanceOf(IllegalArgumentException.class)
.hasMessage("[ERROR] 로또 번호는 1~45 사이여야 합니다.");
}
}
1. Lotto 와 LottoTest 코드
-1번째 코드 (오류 남)
package lotto;
/*
Lotto 클래스
1.6개 숫자 저장하기
2.숫자 검사
-중복 확인
-범위(1~45) 확인
*/
import java.util.*;
import camp.nextstep.edu.missionutils.Randoms;
import camp.nextstep.edu.missionutils.Console;
public class Lotto {
private final List<Integer> numbers;
public Lotto(List<Integer> numbers) {
validate(numbers);
range(numbers); //수정 1
duplication(numbers); //수정 2
this.numbers = numbers;
}
private void validate(List<Integer> numbers) {
if (numbers.size() != 6) {
throw new IllegalArgumentException("[ERROR] 로또 번호는 6개여야 합니다.");
}
}
// TODO: 추가 기능 구현
private void range(List<Integer> numbers) {
for(int number : numbers){
if (number < 1 || number > 45) {
throw new IllegalArgumentException("[ERROR] 로또 번호는 1~45 사이여야 합니다.");
}
}
}
private void duplication(List<Integer> numbers) {
if (new HashSet<>(numbers).size() != numbers.size()) {
throw new IllegalArgumentException("[ERROR] 로또 번호는 중복될 수 없습니다.");
}
}
}
range()랑 duplication()을 따로 호출하지 않아서 오류가 남
생성자에서 range() 와 duplication() 을 호출함.
validate 에 호출해도 되지만 그냥 생성자에 호출하는게 더 이뻐서 그렇게 했음
Lotto랑 LottoTest 완료~
LottoBuy 코드 짜기
split 과 join 차이
// 1. 사용자 입력 받기 (쉼표로 구분된 문자열)
String input = Console.readLine();
// 2. 쉼표 기준으로 문자열 나누기
String[] lottoNumbersIn = input.split(",");
// 3. 숫자로 변환하여 리스트에 저장
List<Integer> lottoNumbers = new ArrayList<>();
for (String num : lottoNumbersIn) {
lottoNumbers.add(Integer.parseInt(num.trim())); // 공백 제거 후 숫자로 변환
}
// 4. List<Integer>를 List<String>으로 변환
List<String> lottoNumbersStr = new ArrayList<>();
for (Integer num : lottoNumbers) {
lottoNumbersStr.add(String.valueOf(num)); // 숫자를 문자열로 변환
}
// 5. join()을 사용하여 문자열로 변환
String joinedNumbers = String.join(",", lottoNumbersStr);
System.out.println(joinedNumbers); // 예: "1,2,3,4,5,6"
// 1. 사용자 입력 받기 (쉼표로 구분된 문자열)
String input = Console.readLine(); // 예: "1,2,3,4,5,6"
// 2. 쉼표 기준으로 문자열 나누기
String[] lottoNumbersIn = input.split(",");
// 3. 숫자로 변환하여 리스트에 저장
List<Integer> lottoNumbers = new ArrayList<>();
for (String num : lottoNumbersIn) {
lottoNumbers.add(Integer.parseInt(num.trim())); // 공백 제거 후 숫자로 변환
}
// 4. 최종 리스트 출력 (디버깅용)
System.out.println(lottoNumbers); // 예: [1, 2, 3, 4, 5, 6]
차이 :
'백엔드 > 멋쟁이사자처럼' 카테고리의 다른 글
[충남대학교 멋쟁이사자처럼] 백엔트 트랙 2회 (0) | 2025.03.18 |
---|---|
[충남대학교 멋쟁이사자처럼] 백엔트 트랙 1회 (0) | 2025.03.11 |
[충남대학교 멋쟁이사자처럼] 백엔드 13기 합격 (0) | 2025.03.04 |