Swift:Prime Number app:可变初始化

时间:2014-12-07 18:33:27

标签: ios swift variable-initialization

我对编程很新,所以希望有人可以用简单的英语向我解释。 我试图在Swift中构建一个应用程序,告诉你输入的数字是否为素数。如果它不是素数,它也应该告诉你数字的因素,e.x。如果用户输入6,它告诉你6不是素数,除了可被0,1和它自身整除外,它也可以被2和3整除。到目前为止所写的代码如下:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var outputMessage: UILabel!
    @IBAction func checkButton(sender: AnyObject) {

        var isPrime = true
        var inputNumber = textField.text.toInt()
        var multiples:Int


        if (inputNumber != nil) {

            if (inputNumber <= 0) {

                outputMessage.text = "Neither 0 nor negative numbers are considered prime numbers!"
                textField.resignFirstResponder()

            } else {

                if (inputNumber == 1) {

                    outputMessage.text = "1 isn't a prime number!"
                    textField.resignFirstResponder()

                }
                else {

                    for var i = 2; i < inputNumber; ++i {

                        if (inputNumber! % i == 0) {

                            // Number is not prime
                            isPrime = false
                            multiples = i

                        }   
                    }
                }

                if (isPrime == true) {

                    outputMessage.text = "Yup, that's a prime number!"
                    textField.resignFirstResponder()

                } else {

                    outputMessage.text = "That number isn't prime. Apart from 1, 0 and itself, the number is also divisible by \(multiples) "
                    textField.resignFirstResponder()

                }
            }

        } else {

            outputMessage.text = "Please enter a number!"
            textField.resignFirstResponder()

        }

    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

接近最后,输出消息显示“那不是素数。除了0,1和它本身,数字可以被(倍数)整除” 代码在这里崩溃了 - 它表示在初始化之前使用的变量'倍数'。 有人可以帮忙吗?

非常感谢!!

1 个答案:

答案 0 :(得分:0)

Swift中的错误消息经常会产生误导。真正的问题是,multiples在您声明时未初始化。

通常,在Swift中,变量在声明时需要初始化。有几个例外:1)如果未明确初始化选项,则不需要初始化选项,因为它们是nil,2)在类中声明的变量可以在初始化程序中初始化。

要修正错误,请为multiples分配初始值:

var multiples:Int = 0

这只会显示该数字的1倍。如果您想要所有这些,请将multiples设为数组:

var multiples:[Int] = []

当您有一个新的倍数时,将值附加到数组:

multiples.append(i)