Swift 代码是正确的,但有时会出现运行时错误
我写了一个函数,在这个函数里面有一个开关,在任何情况下都有随机生成的数字操作 我在for循环中多次调用此函数,并将结果复制到数组中,有时在执行过程中出现EXC_BAD_指令错误,我不明白为什么 我注意到,如果周期更长,错误会更频繁地出现,为什么? 我要做什么才能在更大的周期内不出错地使用这段代码Swift 代码是正确的,但有时会出现运行时错误,swift,random,numbers,cycle,Swift,Random,Numbers,Cycle,我写了一个函数,在这个函数里面有一个开关,在任何情况下都有随机生成的数字操作 我在for循环中多次调用此函数,并将结果复制到数组中,有时在执行过程中出现EXC_BAD_指令错误,我不明白为什么 我注意到,如果周期更长,错误会更频繁地出现,为什么? 我要做什么才能在更大的周期内不出错地使用这段代码 var operationNumber = random() % 4 switch operationNumber { case 0: number1 = random() % (bigg
var operationNumber = random() % 4
switch operationNumber {
case 0:
number1 = random() % (biggestN + 1)
number2 = random() % (biggestN + 1)
result = number1 + number2
operation = "+"
case 1:
number1 = random() % (biggestN + 1)
number2 = random() % (number1 + 1)
result = number1 - number2
operation = "-"
case 2:
number1 = (random() % (biggestN + 1))+1
number2 = (random() % (number1/2))+1
result = number1 * number2
operation = "x"
case 3:
result = random()%biggestN
number1 = (random()%biggestN)*result
number2 = number1 / result
operation = "/"
default:
break
}
在编辑器中,出现错误的行是案例0的行,因此我认为错误在开关内部
感谢您的回答在案例3中,您可能会得到零除错误。在这种情况下,您应该断言
结果
不是零。一种方法是:
result = (random() % biggestN) + 1
编辑:
如果biggestN
为零,也会发生同样的情况。因此,我们可以更新到:
result = (random() % (biggestN + 1)) + 1
已解决:
case 0:
number1 = random() % (biggestN + 1)
number2 = random() % (biggestN + 1)
result = number1 + number2
operation = "+"
case 1:
number1 = random() % (biggestN + 1)
number2 = random() % (number1 + 1)
result = number1 - number2
operation = "-"
case 2:
number1 = (random() % (biggestN + 1))+1
number2 = (random() % (biggestN + 1))
result = number1 * number2
operation = "x"
case 3:
result = (random()%biggestN)+1
number1 = (random()%biggestN)*result
number2 = number1 / result
operation = "/"
Junior很接近,本质上问题是/和%的分母(左操作数)必须为非零,并且有多个情况不满足该条件。最简单的修复方法是使用
arc4random\u uniform
替换random
,这也将为您提供更好的分发:
func pick(range:Int) -> Int {
return Int(arc4random_uniform(UInt32(range)))
}
func sampler(biggestN:Int) {
var operationNumber = pick(4)
var result:Int = 0
var number1:Int = 0
var number2:Int = 0
var operation:String = "X"
switch operationNumber {
case 0:
number1 = pick(biggestN + 1)
number2 = pick(biggestN + 1)
result = number1 + number2
operation = "+"
case 1:
number1 = pick(biggestN + 1)
number2 = pick(number1 + 1)
result = number1 - number2
operation = "-"
case 2:
number1 = pick(biggestN + 1) + 1
number2 = pick(number1 / 2) + 1
result = number1 * number2
operation = "x"
case 3:
result = pick(biggestN) + 1
number1 = pick(biggestN) * result
number2 = number1 / result
operation = "/"
default:
break
}
}
“代码是正确的,但有时我会遇到运行时错误”这是一种创新的说法“代码是错误的”:-)如果你能找出错误发生的那一行,这会有所帮助。错误发生在案例0中,但我当时试图做一个长周期排除案例,我认为问题出在案例2中,但我不知道为什么:结果=(随机()%(最大值+1))+1?