用Xcode簡(jiǎn)單實(shí)現(xiàn)了計(jì)算器的功能烂琴。
平時(shí)沒(méi)有寫(xiě)代碼(做設(shè)計(jì)),所以錯(cuò)漏百出蜕乡,代碼質(zhì)量不高奸绷。
另外很多東西只是知其然,不知其所以然层玲。
一開(kāi)始覺(jué)得很簡(jiǎn)單号醉,可是后來(lái),比我想象的復(fù)雜很多称簿,很多邏輯沒(méi)想清楚扣癣。還有就是對(duì)計(jì)算器的產(chǎn)品邏輯不了解,一些非正常的操作不熟悉憨降。
總結(jié)
寫(xiě)程序前必須做好準(zhǔn)備,理清思路该酗,邏輯清晰授药,預(yù)想各種特殊情況。
體驗(yàn)已有的產(chǎn)品呜魄,熟悉正常的產(chǎn)品邏輯悔叽,避免不合常理。
swift對(duì)變量的數(shù)據(jù)類(lèi)型要求很?chē)?yán)格爵嗅。
switch語(yǔ)句處理optional娇澎,“ ! ”和“ ? ”沒(méi)有理解,optional拆包等等睹晒。
如果要改進(jìn)程序趟庄,還需要增加更多的變量,識(shí)別是否鍵入第二操作數(shù)伪很,是否鍵入小數(shù)點(diǎn)戚啥,把顯示和計(jì)算的數(shù)據(jù)類(lèi)型分開(kāi),添加錯(cuò)誤處理锉试。
基本邏輯
鍵入按鈕分為五種:數(shù)字猫十、符號(hào)、小數(shù)點(diǎn)、等號(hào)拖云、清零
- 當(dāng)前鍵入的數(shù)字永遠(yuǎn)保存到后一個(gè)操作數(shù)里贷笛,當(dāng)鍵入符號(hào)和等號(hào)時(shí),后一個(gè)操作數(shù)推入前一個(gè)操作數(shù)宙项,新鍵入的數(shù)字依然保存在后一個(gè)操作數(shù)里昨忆。
- 通過(guò)按鈕的文字,獲取當(dāng)前點(diǎn)擊的操作杉允。
- 當(dāng)小數(shù)點(diǎn)激活時(shí)邑贴,每次鍵入數(shù)字小數(shù)點(diǎn)操作數(shù)乘以0.1,來(lái)改變當(dāng)前小數(shù)點(diǎn)位置叔磷。
- 鍵入符號(hào)拢驾,后一個(gè)操作數(shù)推入前一個(gè)操作數(shù)里,后一個(gè)操作數(shù)清零改基。
- 清零則全部清除繁疤,包括所有的操作數(shù)。
當(dāng)前程序問(wèn)題
- 連續(xù)點(diǎn)擊等號(hào),無(wú)法繼續(xù)計(jì)算
- 沒(méi)有錯(cuò)誤處理靠柑,比如除數(shù)不能為零
- 整數(shù)的計(jì)算子眶,數(shù)字帶了.0
- 分不清零和空(大問(wèn)題,汗)
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
}
}
}