无重复地从数组中随机播放/随机化问题(SWIFT)

时间:2020-06-13 20:04:47

标签: arrays swift random shuffle non-repetitive

我已经浏览了几个小时才能找到正确的答案,但似乎无法正确地将其应用于自己的代码。
在大多数情况下,在stackoverflow上针对此问题给出的答案都是使用Strings&Int示例,而我正在为问题类型而苦苦挣扎。

我只是从Xcode和Swift入手,到目前为止已经设法制作出可以正常使用的测验应用。

我已经使用过shuffle,但是我找不到其余的代码来不重复先前提出的问题。
我到底想做什么:我现在有7个问题,我希望有人要玩测验时,可以按不同顺序一次询问这些问题。

我在另外2个swift文件中有两个课程。

这是我的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))

这是我的Question类:

}
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的功能,我认为应该发生但不会发生。

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()

1 个答案:

答案 0 :(得分:0)

每次调用list时,您似乎都在改组updateQuestion,这似乎是这里的问题。您只应该打一次shuffle,然后一个个地遍历所有问题。要解决此问题,请从updateQuestion中删除混洗,然后将其添加到viewDidLoad中,或者根据以下条件在updateQuestion中调用一次:

if questionNumber == 1 {
    allQuestions.list.shuffle()
}