Shuffle/Randomize 没有重复的数组问题 (SWIFT)
Shuffle/Randomize Questions from an Array with no Repetition (SWIFT)
我浏览了几个小时才找到正确答案,但似乎无法将其正确应用到我自己的代码中。
大多数时候,在 Whosebug 上给出的这个问题的答案是字符串和整数示例,我正在为问题类型而苦苦挣扎。
我刚刚开始 Xcode & Swift 并且到目前为止设法制作了一个运行良好的测验应用程序。
我用过 shuffle 但我找不到其余的代码不重复以前问过的问题。
我真正想做的事:我现在有 7 个问题,我希望有人想玩测验时,我希望这些问题以不同的顺序被问一次。
我在另外 2 个 swift 文件中有两个 classes。
这是我的 QuestionBank 类型,有 7 个问题全部正确完成:
class QuestionBank {
var list = [Question]()
init () {
list.append(Question(questionNumber: 0, image: "a", questionText: "a", choiceA: "a", choiceB: "a", choiceC: "a", choiceD: "a", answer: 1))
这是我的问题class:
}
class Question {
let number : Int
let questionImage: String
let question: String
let optionA: String
let optionB: String
let optionC: String
let optionD: String
let correctAnswer: Int
init(questionNumber: Int, image: String, questionText: String, choiceA: String, choiceB: String, choiceC: String, choiceD: String, answer: Int) {
number = questionNumber
questionImage = image
question = questionText
optionA = choiceA
optionB = choiceB
optionC = choiceC
optionD = choiceD
correctAnswer = answer
}
以及 updateQuestion 的函数,我认为 sh*t 应该发生但没有发生。
func updateQuestion() {
if questionNumber <= allQuestions.list.count - 1 {
imageView.image = UIImage(named:(allQuestions.list[questionNumber].questionImage))
QuestionLabel.text = allQuestions.list[questionNumber].question
optionA.setTitle(allQuestions.list[questionNumber].optionA, for: UIControl.State .normal)
optionB.setTitle(allQuestions.list[questionNumber].optionB, for: UIControl.State .normal)
optionC.setTitle(allQuestions.list[questionNumber].optionC, for: UIControl.State .normal)
optionD.setTitle(allQuestions.list[questionNumber].optionD, for: UIControl.State .normal)
selectedAnswer = allQuestions.list[questionNumber].correctAnswer
questionNumber += 1
allQuestions.list.shuffle()
每次调用 updateQuestion
时,您似乎都在洗牌 list
,这似乎是这里的问题所在。您只应调用 shuffle
一次并逐个遍历问题。要解决此问题,请从 updateQuestion
中删除随机播放并将其添加到 viewDidLoad
中,或者根据如下条件在 updateQuestion
中调用一次:
if questionNumber == 1 {
allQuestions.list.shuffle()
}
我浏览了几个小时才找到正确答案,但似乎无法将其正确应用到我自己的代码中。
大多数时候,在 Whosebug 上给出的这个问题的答案是字符串和整数示例,我正在为问题类型而苦苦挣扎。
我刚刚开始 Xcode & Swift 并且到目前为止设法制作了一个运行良好的测验应用程序。
我用过 shuffle 但我找不到其余的代码不重复以前问过的问题。
我真正想做的事:我现在有 7 个问题,我希望有人想玩测验时,我希望这些问题以不同的顺序被问一次。
我在另外 2 个 swift 文件中有两个 classes。
这是我的 QuestionBank 类型,有 7 个问题全部正确完成:
class QuestionBank {
var list = [Question]()
init () {
list.append(Question(questionNumber: 0, image: "a", questionText: "a", choiceA: "a", choiceB: "a", choiceC: "a", choiceD: "a", answer: 1))
这是我的问题class:
}
class Question {
let number : Int
let questionImage: String
let question: String
let optionA: String
let optionB: String
let optionC: String
let optionD: String
let correctAnswer: Int
init(questionNumber: Int, image: String, questionText: String, choiceA: String, choiceB: String, choiceC: String, choiceD: String, answer: Int) {
number = questionNumber
questionImage = image
question = questionText
optionA = choiceA
optionB = choiceB
optionC = choiceC
optionD = choiceD
correctAnswer = answer
}
以及 updateQuestion 的函数,我认为 sh*t 应该发生但没有发生。
func updateQuestion() {
if questionNumber <= allQuestions.list.count - 1 {
imageView.image = UIImage(named:(allQuestions.list[questionNumber].questionImage))
QuestionLabel.text = allQuestions.list[questionNumber].question
optionA.setTitle(allQuestions.list[questionNumber].optionA, for: UIControl.State .normal)
optionB.setTitle(allQuestions.list[questionNumber].optionB, for: UIControl.State .normal)
optionC.setTitle(allQuestions.list[questionNumber].optionC, for: UIControl.State .normal)
optionD.setTitle(allQuestions.list[questionNumber].optionD, for: UIControl.State .normal)
selectedAnswer = allQuestions.list[questionNumber].correctAnswer
questionNumber += 1
allQuestions.list.shuffle()
每次调用 updateQuestion
时,您似乎都在洗牌 list
,这似乎是这里的问题所在。您只应调用 shuffle
一次并逐个遍历问题。要解决此问题,请从 updateQuestion
中删除随机播放并将其添加到 viewDidLoad
中,或者根据如下条件在 updateQuestion
中调用一次:
if questionNumber == 1 {
allQuestions.list.shuffle()
}