陷入困境。非常奇怪,因为代码有时会工作,有时会冻结

时间:2015-09-07 17:51:51

标签: ios swift

我正在为IOS写一个益智游戏。在我的代码中,我需要用一些代表主数据结构的随机(和非随机数)填充数组。

func Random(r :  Range<Int>) -> Int {
    return Int(arc4random_uniform(UInt32(r.endIndex  - r.startIndex))) + r.startIndex
} // function to generate random number

var arrWithColors = [Int]() // array that will hold the numbers

//function to that check if an array contains a number in a range already

func checkForNumberInArrayWithRange(r: Range <Int>, n: Int ) -> Bool {
    for i in r.startIndex..<r.endIndex {
        if arrWithColors[i] == n { return true }
    }
    return false
}

// here is the main function where i keep getting stuck. Out of let's say five times it would only work 3 or even less. 


func randHexWithTag() {
    var rNumber : Int = Random(0...5)
        for i in 0...5 {
            while (true) {
                rNumber = Random(0...5)
                if !checkForNumberInArrayWithRange(0...5, n: rNumber) { 
                    break
                }
            }
            arrWithColors[i] = rNumber
        }

        arrWithColors[10] = arrWithColors[1]

        for i in 6...11 {   
            while(true) {
                rNumber = Random(0...5)
                if ((rNumber == arrWithColors[0] && i == 9) || (rNumber == arrWithColors[2] && i == 11)) {
                    continue
                }

                if !checkForNumberInArrayWithRange(6...11, n: rNumber) {
                    break
                }
            }

            if (i != 10) {
                arrWithColors[i] = rNumber
            }

        }

        arrWithColors[13] = arrWithColors[4]

        for i in 12...17 {

            while(true) {
                rNumber = Random(0...5)

                if (rNumber == arrWithColors[3] && i == 12) || (rNumber == arrWithColors[5] && i == 14) {
                    continue
                }
                if !checkForNumberInArrayWithRange(12...17, n: rNumber) {
                    break
                } 
            }

            if (i != 13) {
                arrWithColors[i] = rNumber
            }

        }
}

1 个答案:

答案 0 :(得分:0)

在此行第一次调用checkForNumberInArrayWithRange期间,上述代码将始终失败:

if arrWithColors[i] == n { return true }

这是因为arrWithColors为空,索引i超出范围