【发布时间】:2017-04-05 13:51:45
【问题描述】:
我想做一个数学测验应用。当程序加载时,标签设置为第一个问题,该问题是随机创建的,不使用数组来保存问题。
正确答案和“假答案”已正确分配给 4 个按钮,我现在要做的是单击其中一个按钮时,我想检查按钮当前标题是否与正确的相同回答,然后继续生成新的问题和答案。
这是我编写的代码,我认为它会做我想做的事,但事实并非如此。
@IBAction func button1Press(_ sender: Any) {
if button1.currentTitle == ("\(answer)")
{
rightAnswerCount = rightAnswerCount + 1
generateQuestion()
generateAnswer()
displayButtonValues()
}
else {
wrongAnswerCount = wrongAnswerCount + 1
generateQuestion()
generateAnswer()
displayButtonValues()
}
}
我可以对此代码进行哪些改进以使其正常工作?
谢谢!
添加自 OP 的评论
要分配按钮标题,我这样做;
if buttonNo == 4 {
button4.setTitle("(answer)", for: .normal)
} else {
button4.setTitle("(answer + 5)", for: .normal)
}
其他功能;
func generateQuestion(){
switch symbolNo {
case 1:
operatorSymbol = "+"
self.lbl.text = "\(firstNo) + \(secondNo) = ?"
question = "\(firstNo) + \(secondNo) = ?"
case 2 :
operatorSymbol = "-"
self.lbl.text = "\(firstNo) - \(secondNo) = ?"
question = "\(firstNo) - \(secondNo) = ?"
case 3 :
operatorSymbol = "/"
self.lbl.text = "\(firstNo) / \(secondNo) = ?"
question = "\(firstNo) / \(secondNo) = ?"
case 4 :
operatorSymbol = "x"
self.lbl.text = "\(firstNo) x \(secondNo) = ?"
question = "\(firstNo) x \(secondNo) = ?"
default:
self.lbl.text = ""
}
}
func generateAnswer(){
switch symbolNo {
case 1:
answer = firstNo + secondNo
case 2:
answer = firstNo - secondNo
case 3:
answer = firstNo / secondNo
case 4:
answer = firstNo * secondNo
default:
answer = 0
}
}
func displayButtonValues(){
if buttonNo == 1 {
button1.setTitle("\(answer)", for: .normal)
}
else {
button1.setTitle("\(answer - 4)", for: .normal)
}
if buttonNo == 2 {
button2.setTitle("\(answer)", for: .normal)
}
else {
button2.setTitle("\(answer - 2)", for: .normal)
}
if buttonNo == 3 {
button3.setTitle("\(answer)", for: .normal)
}
else {
button3.setTitle("\(answer + 3)", for: .normal)
}
if buttonNo == 4 {
button4.setTitle("\(answer)", for: .normal)
}
else {
button4.setTitle("\(answer + 5)", for: .normal)
}
}
我这里也有这3个函数,所以当应用第一次加载时,这些函数会立即执行;
override func viewDidLoad() {
super.viewDidLoad()
generateQuestion()
generateAnswer()
displayButtonValues()
// Do any additional setup after loading the view, typically from a nib.
}
变量
let firstNo = Int(arc4random_uniform(10)+1)
let secondNo = Int(arc4random_uniform(10)+1)
let symbolNo = Int(arc4random_uniform(4)+1)
let buttonNo = Int(arc4random_uniform(4)+1)
var operatorSymbol = ""
var answer = Int()
var question = ""
var rightAnswerCount = 0
var wrongAnswerCount = 0
【问题讨论】:
-
当前代码有什么问题?不编译?崩溃?没有按预期工作?
-
代码没有按预期工作,按下按钮时调用的函数没有被调用,我不确定为什么..它编译完美,不会崩溃。
-
如何分配按钮上的标题?
-
我可以给小费。让我们使用 sender 参数。这样,所有按钮按下都可以订阅此 1 功能。 (即。sender.currentTitle == ...)对于执行相同操作的 4 个按钮,拥有 4 个相同的功能是没有用的。也可以将(_ sender: Any) 做成(_ sender: UIButton)
-
@Shen 我将“let”更改为“var”,并创建了一个新函数,它随机化所有这些变量并使其正常工作!