편집 기록

편집 기록
  • 프로필 정토드님의 편집
    날짜2018.01.22

    [swift]index out of range 오류 //초보자 입니다..


    xcode 9.2 버전 커맨드라인으로 코딩 중입니다.

    makeLadder함수 안의 makeWall 에서 index out of range오류가 발생해서 제대로 결과를 못 받고 있습니다. 어디를 수정해야 올바른 결과가 나올까요..ㅠㅠ

    예)

    참여할 사람은 몇 명 인가요?
    3
    최대 사다리 높이는 몇 개인가요?
    4
    
    //현재 상태
    | | |
    | |-|
    |-| |
    |
    
    //나와야 하는 결과
    | | |
    | |-|
    |-| |
    |-| |
    

    코드

    import Foundation
    
    // 참여인원 입력 받기
    func getPlayer() -> Int {
        print("참여할 사람은 몇 명 인가요?")
        let player = readLine()
        return Int(player ?? "") ?? 0
    }
    
    // 사다리 높이 입력 받기
    func getLadderHeight() -> Int {
        print("최대 사다리 높이는 몇 개인가요?")
        let ladderHeight = readLine()
        return Int(ladderHeight ?? "") ?? 0
    }
    
    // 사다리 발판 준비 - 서브
    // false 값을 가지고 있는 배열을 랜덤값에 따라 랜덤하게 false를 true로 바꿈
    func randomChange(_ arrLadder:[Bool]) -> [Bool]{
        var ladderArr:[Bool] = arrLadder
    
        for val in 0 ..< ladderArr.count {
            let random = arc4random_uniform(2)
            ladderArr[val] = (random == 0)
        }
        return ladderArr
    }
    
    // 사다리 발판 준비 - 메인
    func makeLadderFrame(_ player:Int, _ ladderHeight:Int) -> [[Bool]] {
        var arrLadder: [[Bool]] = Array(repeating: Array(repeating: false, count: player - 1), count: ladderHeight)
        return arrLadder
    }
    func preparadeToMakeFootBoard(_ ladderHeight: Int, _ player: Int) -> [[Bool]] {
        var arrLadder = makeLadderFrame(player,ladderHeight)
        for row in 0 ..< ladderHeight {
            arrLadder[row] = randomChange(arrLadder[row])
        }
        return arrLadder
    }
    
    // 사다리 발판 만들기
    // 발판 요소
    enum LadderFootBoardElements: String {
        case hasFootBoard = "-"
        case noFootBoard = " "
    }
    
    // readyToMakeFootBoard에서 만든 불값2차원배열을 발판 요소들로 대체시키기
    func transferBoolToHorizon(booleanElement: Bool) -> String {
        return booleanElement ? LadderFootBoardElements.hasFootBoard.rawValue : LadderFootBoardElements.noFootBoard.rawValue
    }
    
    // 사다리 모양 완성시키기 - 서브
    func makeWall(_ readyFootBoard:[Bool],_ player: Int) {
        for val in 0 ..< player - 1 {
            let footboard = transferBoolToHorizon(booleanElement: readyFootBoard[val])
            print ("\(footboard)", terminator : "|")
        }
    }
    
    // 사다리 모양 완성시키기 - 메인
    func makeLadder(_ player: Int, _ ladderHeight:Int) {
        let readyFootBoard = preparadeToMakeFootBoard(player, ladderHeight)
        for row in 0 ..< ladderHeight {
            print ("|", terminator: "")
            makeWall(readyFootBoard[row], player)
            print()
        }
    }
    
    // main (실행 부)
    while true {
        let player = getPlayer()
        let ladderHeight = getLadderHeight()
        makeLadder(player, ladderHeight)
    
        break
    }
    
  • 프로필 Jina Kim님의 편집
    날짜2018.01.21

    [swift]index out of range 오류 //초보자 입니다..


    xcode 9.2 버전 커맨드라인으로 코딩 중입니다.

    makeLadder함수 안의 makeWall 에서 index out of range오류가 발생해서 제대로 결과를 못 받고 있습니다. 어디를 수정해야 올바른 결과가 나올까요..ㅠㅠ

    예)

    참여할 사람은 몇 명 인가요?
    3
    최대 사다리 높이는 몇 개인가요?
    4
    
    //현재 상태
    | | |
    | |-|
    |-| |
    |
    
    //나와야 하는 결과
    | | |
    | |-|
    |-| |
    |-| |
    

    코드

    import Foundation
    
    // 참여인원 입력 받기
    func getPlayer() -> Int {
        print("참여할 사람은 몇 명 인가요?")
        let player = readLine()
        return Int(player ?? "") ?? 0
    }
    
    // 사다리 높이 입력 받기
    func getLadderHeight() -> Int {
        print("최대 사다리 높이는 몇 개인가요?")
        let ladderHeight = readLine()
        return Int(ladderHeight ?? "") ?? 0
    }
    
    // 사다리 발판 준비 - 서브
    // false 값을 가지고 있는 배열을 랜덤값에 따라 랜덤하게 false를 true로 바꿈
    func randomChange(_ arrLadder:[Bool]) -> [Bool]{
        var ladderArr:[Bool] = arrLadder
    
        for val in 0 ..< ladderArr.count {
            let random = arc4random_uniform(2)
            ladderArr[val] = (random == 0)
        }
        return ladderArr
    }
    
    // 사다리 발판 준비 - 메인
    func makeLadderFrame(_ player:Int, _ ladderHeight:Int) -> [[Bool]] {
        var arrLadder: [[Bool]] = Array(repeating: Array(repeating: false, count: player - 1), count: ladderHeight)
        return arrLadder
    }
    func preparadeToMakeFootBoard(_ ladderHeight: Int, _ player: Int) -> [[Bool]] {
        var arrLadder = makeLadderFrame(player,ladderHeight)
        for row in 0 ..< ladderHeight {
            arrLadder[row] = randomChange(arrLadder[row])
        }
        return arrLadder
    }
    
    // 사다리 발판 만들기
    // 발판 요소
    enum LadderFootBoardElements: String {
        case hasFootBoard = "-"
        case noFootBoard = " "
    }
    
    // readyToMakeFootBoard에서 만든 불값2차원배열을 발판 요소들로 대체시키기
    func transferBoolToHorizon(booleanElement: Bool) -> String {
        return booleanElement ? LadderFootBoardElements.hasFootBoard.rawValue : LadderFootBoardElements.noFootBoard.rawValue
    }
    
    // 사다리 모양 완성시키기 - 서브
    func makeWall(_ readyFootBoard:[Bool],_ player: Int) {
        for val in 0 ..< player - 1 {
            let footboard = transferBoolToHorizon(booleanElement: readyFootBoard[val])
            print ("\(footboard)", terminator : "|")
        }
    }
    
    // 사다리 모양 완성시키기 - 메인
    func makeLadder(_ player: Int, _ ladderHeight:Int) {
        let readyFootBoard = preparadeToMakeFootBoard(player, ladderHeight)
        for row in 0 ..< ladderHeight {
            print ("|", terminator: "")
            makeWall(readyFootBoard[row], player)
            print()
        }
    }
    
    // main (실행 부)
    while true {
        let player = getPlayer()
        let ladderHeight = getLadderHeight()
        makeLadder(player, ladderHeight)
    
        break
    }