下面是快速编写的小代码段,尽管显示代码似乎没有错,但给出的错误提示如下。
致命错误:索引超出范围 非法指令:4
我不清楚问题的确切原因是什么?如果有人可以分享有关它的见解,那将真的很有帮助。
func getBinary(ValueInDecimal:Int) -> [Int]
{
var valueToPlayWith = ValueInDecimal
var aryBinary = [Int]()
var i:Int = 0
while valueToPlayWith != 0 {
aryBinary[i] = valueToPlayWith % 2
valueToPlayWith = valueToPlayWith / 2
i = i + 1
}
return aryBinary
}
// calling of function
let aryBin = getBinary(ValueInDecimal:10)
print(aryBin)
期望的答案是0和1s数组中传递的十进制数的二进制值。
所以我认为,如果我会像这样使用它,那么语法array [i] = value将起作用。
func getBinary(ValueInDecimal:Int) -> [Int:Int]
{
var valueToPlayWith = ValueInDecimal
var aryBinary = [Int:Int]()
var i:Int = 0
while valueToPlayWith != 0 {
aryBinary[i] = valueToPlayWith % 2
valueToPlayWith = valueToPlayWith / 2
i = i + 1
}
return aryBinary
}
let aryBin = getBinary(ValueInDecimal:10)
print(aryBin)
答案 0 :(得分:1)
这是一个空数组
var aryBinary = [Int]()
所以这将崩溃,因为索引0不存在
aryBinary[i] = valueToPlayWith % 2
致命错误:索引超出范围
您可能需要
func getBinary(_ valueInDecimal:Int) -> [Int] {
var valueToPlayWith = valueInDecimal
var aryBinary = [Int]()
while valueToPlayWith != 0 {
aryBinary.append(valueToPlayWith % 2)
valueToPlayWith = valueToPlayWith / 2
}
return aryBinary
}
let aryBin = getBinary(10)
print(aryBin) /// [0, 1, 0, 1]