我是所有编程的完全初学者,所以请原谅你可能发现的任何明显的错误。我正在编写一个程序,它接受一个输入数字并告诉用户该数字是否为素数。
@IBOutlet weak var textfield: UITextField!
@IBOutlet weak var label: UILabel!
@IBAction func button(sender: AnyObject) {
if (textfield.text.isEmpty) {
label.text = "Please enter a number!"
} else if (textfield.text == "0" || textfield.text == "1"){
label.text = "The answer is undefined."
textfield.text = nil
} else {
var input = textfield.text.toInt()
if (input! % 2 == 0 && input! != 2) {
label.text = "The number is not prime, one of its divisors is 2."
textfield.text = nil
} else if (input! == 2){
label.text = "The number is indeed prime!"
textfield.text = nil
} else {
var factor = 3
while (factor <= input) {
if (input! % factor == 0 && input! != factor) {
label.text = "The number is not prime, one of its divisors is \(factor)"
} else if (input! % factor != 0){
factor += 2
} else if (input! % factor == 0 && input! == factor) {
label.text = "The number is indeed prime!"
textfield.text = nil
}
}
}
}
}
我的代码看起来像这样,但如果输入是非0,1或2的任何内容,则会崩溃。我知道有更好的方法来编写这个程序,但我只想弄清楚这个程序到底出了什么问题。 。提前谢谢!
答案 0 :(得分:2)
如果您要更新label.text
,则不会增加导致无限循环的factor
break
。为这些案例添加 while (factor <= input!) {
if (input! % factor == 0 && input! != factor) {
label.text = "The number is not prime, one of its divisors is \(factor)"
break
} else if (input! % factor != 0){
factor += 2
} else if (input! % factor == 0 && input! == factor) {
label.text = "The number is indeed prime!"
textfield.text = nil
break
}
}
以打破while循环,一切都会好起来:
{{1}}
答案 1 :(得分:1)
这不是你的快速。这是你的编程逻辑。你没有崩溃,你是无限的 循环。
在循环中放入println。
while(factor&lt; = input){
println(&#34;因子(输入!%因子)&#34;)
因子0 因素0 因素0 因子0
你永远不会最终增加因子。在我的测试用例中,我输入3作为输入。
大卫
答案 2 :(得分:0)
我认为输入返回一个可选变量。
var input = textfield.text.toInt()
//and you force unwrap the input on the this statement:
if (input! % 2 == 0 && input! != 2) {}
如果文字不是数字,我认为它在这里崩溃了。
看一下String
extension String {
/// If the string represents an integer that fits into an Int, returns
/// the corresponding integer. This accepts strings that match the regular
/// expression "[-+]?[0-9]+" only.
func toInt() -> Int?
}