用Xcode簡單實現(xiàn)了計算器的功能。
平時沒有寫代碼(做設(shè)計),所以錯漏百出,代碼質(zhì)量不高。
另外很多東西只是知其然,不知其所以然。
一開始覺得很簡單,可是后來,比我想象的復(fù)雜很多,很多邏輯沒想清楚。還有就是對計算器的產(chǎn)品邏輯不了解,一些非正常的操作不熟悉。
總結(jié)
寫程序前必須做好準(zhǔn)備,理清思路,邏輯清晰,預(yù)想各種特殊情況。
體驗已有的產(chǎn)品,熟悉正常的產(chǎn)品邏輯,避免不合常理。
swift對變量的數(shù)據(jù)類型要求很嚴(yán)格。
switch語句處理optional,“ ! ”和“ ? ”沒有理解,optional拆包等等。
如果要改進(jìn)程序,還需要增加更多的變量,識別是否鍵入第二操作數(shù),是否鍵入小數(shù)點,把顯示和計算的數(shù)據(jù)類型分開,添加錯誤處理。
基本邏輯
鍵入按鈕分為五種:數(shù)字、符號、小數(shù)點、等號、清零
- 當(dāng)前鍵入的數(shù)字永遠(yuǎn)保存到后一個操作數(shù)里,當(dāng)鍵入符號和等號時,后一個操作數(shù)推入前一個操作數(shù),新鍵入的數(shù)字依然保存在后一個操作數(shù)里。
- 通過按鈕的文字,獲取當(dāng)前點擊的操作。
- 當(dāng)小數(shù)點激活時,每次鍵入數(shù)字小數(shù)點操作數(shù)乘以0.1,來改變當(dāng)前小數(shù)點位置。
- 鍵入符號,后一個操作數(shù)推入前一個操作數(shù)里,后一個操作數(shù)清零。
- 清零則全部清除,包括所有的操作數(shù)。
當(dāng)前程序問題
- 連續(xù)點擊等號,無法繼續(xù)計算
- 沒有錯誤處理,比如除數(shù)不能為零
- 整數(shù)的計算,數(shù)字帶了.0
- 分不清零和空(大問題,汗)
import UIKit
class ViewController: UIViewController {
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.
}
@IBOutlet weak var xianshi: UILabel!
var qianyige:Double = 0
var houyige:Double = 0
var jieguo:Double = 0
var point:Double = 0.0
var fuhao:String?
@IBAction func shuzi(sender: AnyObject) {
if (point == 0.0) {
switch sender.currentTitle! {
case "1"?:
houyige = 1 + houyige * 10
case "2"?:
houyige = 2 + houyige * 10
case "3"?:
houyige = 3 + houyige * 10
case "4"?:
houyige = 4 + houyige * 10
case "5"?:
houyige = 5 + houyige * 10
case "6"?:
houyige = 6 + houyige * 10
case "7"?:
houyige = 7 + houyige * 10
case "8"?:
houyige = 8 + houyige * 10
case "9"?:
houyige = 9 + houyige * 10
case "0"?:
houyige = houyige * 10
default:
print("shuzi")
}
} else if (point != 0.0) {
switch sender.currentTitle! {
case "1"?:
houyige = (point * 1) + houyige
case "2"?:
houyige = (point * 2) + houyige
case "3"?:
houyige = (point * 3) + houyige
case "4"?:
houyige = (point * 4) + houyige
case "5"?:
houyige = (point * 5) + houyige
case "6"?:
houyige = (point * 6) + houyige
case "7"?:
houyige = (point * 6) + houyige
case "8"?:
houyige = (point * 6) + houyige
case "9"?:
houyige = (point * 6) + houyige
case "0"?:
point = point * 0.1
default:
print("shuzi")
}
point = point * 0.1
}
xianshi.text = String(houyige)
}
@IBAction func add(sender: AnyObject) {
if houyige != 0 {
qianyige = houyige
houyige = 0
}
point = 0.0
fuhao = sender.currentTitle
}
@IBAction func clear(sender: AnyObject) {
qianyige = 0
houyige = 0
jieguo = 0
point = 0.0
xianshi.text = "0"
}
@IBAction func output(sender: AnyObject) {
if (qianyige != 0) && (houyige != 0) && (fuhao != "") {
switch fuhao! {
case "加":
jieguo = qianyige + houyige
case "減":
jieguo = qianyige - houyige
case "乘":
jieguo = qianyige * houyige
case "除":
jieguo = qianyige / houyige
default:
print("output")
}
xianshi.text = String(jieguo)
fuhao = ""
houyige = 0
qianyige = jieguo
point = 0.0
}
}
@IBAction func point(sender: AnyObject) {
if point == 0.0 {
point = 0.1
}
}
}