2014-12-07 81 views
0

編程相當新,所以希望有人可以用簡單的英語向我解釋.. 我試圖在Swift中建立一個應用程序,告訴你輸入的數字是一個素數或不。如果它不是素數,它也應該告訴你數字e.x的因素。如果用戶輸入6,它告訴你6不是素數,除了可以被0,1和它自己整除之外,它也可以被2和3整除。直到現在編寫的代碼如下:Swift:Prime Number應用程序:變量初始化

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整除 – vacawama 2014-12-07 18:48:29

+0

OT:如果您想要更合理的主要測試,請查找Erathostenes篩。也適用於較小的素數,但肯定比您的方法更有效。還有一些更先進的算法來測試素數,但這是數學難題。 – 2014-12-07 20:16:28

+0

托馬斯,一定會考慮一下。感謝您的建議! – sar91 2014-12-08 12:34:37

回答

0

Swift中的錯誤消息經常會引起誤解。真正的問題是multiples在聲明時未被初始化。

一般來說,在Swift中,變量需要在聲明時被初始化。有一些例外情況:1)如果沒有明確初始化,選項無需初始化,因爲它們是nil,2)可以在初始化程序中初始化在類中聲明的變量。

要修正這個錯誤,分配multiples初始值:

var multiples:Int = 0 

這隻會告訴你1個多的數量。如果你想所有的人,讓multiples數組:

var multiples:[Int] = [] 

然後值追加到數組中,當你有一個新的多:

multiples.append(i) 
+0

非常感謝!將其定義爲一個完美的陣列:) @vacawama你是對的,當然! – sar91 2014-12-07 20:10:38

+0

做到了。再次感謝! :) – sar91 2014-12-08 12:33:54