class BaseballGame {
func start() {
print("환영합니다! 원하시는 번호를 입력해주세요.")
print("1. 게임 시작하기, 2. 게임 기록 보기, 3. 종료하기")
if let userNum = readLine(), let numChoice = Int(userNum) {
switch numChoice {
case 1:
start1()
// case 2:
// record()
// case 3:
// logOut()
default:
start()
}
}
}
func start1() {
// print("""
//<게임을 시작합니다>
//숫자를 입력하세요
//""") // 두줄로 작성하는법 찾음.
print("<게임을 시작합니다>")
print("숫자를 입력하세요") // 두줄로 작성하는 방법 찾아보기
let answer = makeAnswer() // 정답 만들기
while true {
let userInput = userInput() // 유저값 계속 입력하기
if userInput.contains(where: { $0 < 1 || $0 > 9 }) { // 0~9 까지 숫자인지 확인, AND가 아니라 OR 임
print("0~9 까지 입력 가능해요!") // 마이너스를 입력해도, 두자리를 입력해도 반응X
continue
}
if userInput.count != 3 { // 숫자 3개 아닌지 확인, 참이면(3개가 아니면) 계속 반복, 거짓이면(3이면) 다음단계
print("3자리를 입력하세요!")
continue
}
if Set(userInput).count != 3 { // set으로 변경시키면 중복이 사라지므로 중복이 있는 경우 갯수가 줄어듦.
print("중복은 안돼요!")
continue
}
var strikeCount = 0
var ballCount = 0
for (index, value) in userInput.enumerated() { // 값과 인덱스를 튜플형식으로 바꿔줌
if answer[index] == value {
strikeCount += 1
} else if answer.contains(value) {
ballCount += 1
}
}
print("Strike: \(strikeCount)")
print("ball: \(ballCount)")
if strikeCount == 3 {
print("OUT!")
break
}
}
}
func makeAnswer() -> [Int] {
var numbers: [Int]
repeat {
numbers = Array(0...9).shuffled().prefix(3).map { $0 }
} while numbers.first == 0
return numbers
}
func userInput() -> [Int] {
if let input = readLine() { // if let 옵셔널 바인딩 사용, readLine()의 반환타입이 String? 이기 때문
return input.split(separator: " ").compactMap { Int($0) }
}
return []
}
// func record() {
// print("<게임 기록 보기>")
//
// let recordManager
// }
//
// func recordManager() {
//
// }
}
트러블 슈팅 TIL
문제 상황
- 발생일시 : 2025.03.20
- 발생환경 : Command Line Tool, Swift 5, macOS 사용
- 기능 : contains 로 배열 안의 숫자가 조건에 맞는지 확인
- 문제 내용 : 작동불가
원인 분석
해결과정
- 조건 자체가 AND가 아니라 OR이 들어가야 만족한다는 것을 발견함.(튜터님 조언)
// 기존 코드
if userInput.contains(where: { $0 < 1 && $0 > 9 }) { // 0~9 까지 숫자인지 확인
print("0~9 까지 입력 가능해요!") // 마이너스를 입력해도, 두자리를 입력해도 반응X
continue
}
// 수정된 코드
if userInput.contains(where: { $0 < 1 || $0 > 9 }) { //AND가 아니라 OR 임
print("0~9 까지 입력 가능해요!") //
continue
}
결과
향후 개선 사항