【问题标题】:Swift: Prime Number app: Variable initialisationSwift:素数应用程序:变量初始化
【发布时间】:2014-12-07 18:33:27
【问题描述】:

我对编程很陌生,所以希望有人能用简单的英语向我解释这个.. 我试图在 Swift 中构建一个应用程序,告诉你输入的数字是否是质数。如果它不是素数,它还应该告诉你数字的因数,例如如果用户输入 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 和它本身,这个数字可以被(倍数)整除” 代码在这里崩溃了——它说在初始化之前使用了变量“倍数”。 有人可以帮忙吗?

非常感谢!!

【问题讨论】:

  • 顺便说一句,数字不能被 0 整除。
  • OT:如果您想要更合理的主要测试,请寻找 Sieve pf Erathostenes。也仅适用于较小的素数,但绝对比您的方法更有效。有一些更先进的算法可以测试素数,但这是很难计算的。
  • Thomas,一定会调查的。谢谢你的建议!

标签: ios swift variable-initialization


【解决方案1】:

Swift 中的错误消息经常具有误导性。真正的问题是 multiples 在声明时没有初始化。

一般而言,在 Swift 中,变量需要在声明时进行初始化。有几个例外:1) 不需要初始化选项,因为它们是nil,如果它们没有显式初始化,2) 类中声明的变量可以在初始化器中初始化。

要修复错误,请为 multiples 分配一个初始值:

var multiples:Int = 0

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

var multiples:[Int] = []

然后当你有一个新的倍数时将值附加到数组中:

multiples.append(i)

【讨论】:

  • 非常感谢!将它定义为一个数组效果很好:) @vacawama 你是对的,当然!
猜你喜欢
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
相关资源
最近更新 更多