2016-12-20 4 views
3

the Problemスウィフト3トリビアアプリ重複これは私のコードである

に答えて、正解はボタンの数でその位置をランダム化します。しかし、現在のコードは、第4の答えを複製しているようです。

これはすべての質問とそれぞれの答えのセットでこれを行います。

ボタンタグは簡単に設定され、最初のタグは「1」とタグ付けされ、2番目のボタンは「2」とタグ付けされます。

これ以上の情報が必要な場合は、お気軽にお問い合わせください。

似たような問題を抱えている他の人が私が間違ったことを見るための基礎を持つように問題コードを残しました。

問題コード:

// 
// AnimalViewController.swift 
// It's Trival 
// 
// Created by Chris Levely on 12/18/16. 
// Copyright © 2016 ZenithNomad. All rights reserved. 
// 

import UIKit 

class AnimalViewController: UIViewController { 

    let questions = ["What is the fastest fish in the sea?", "Which animal has the most legs?"] 
    let answers = [["Sailfish", "Tuna", "Swordfish", "Marlin"], ["Millipede", "Spider", "Ant", "Octopus"]] 

    var currentQuestion = 0 
    var rightAnswerPlacement : UInt32 = 0 

    @IBOutlet weak var Question: UILabel! 

    @IBAction func AnswerQuestion(_ sender: AnyObject) 
    { 
     if (sender.tag == Int(rightAnswerPlacement)) 
     { 
      print("Right") 
     } 
     else 
     { 
      print("Wrong") 
     } 

     if (currentQuestion != questions.count) 
     { 
      newQuestion() 
     } 
    } 

    func newQuestion() 
    { 
     Question.text = questions[currentQuestion] 

     rightAnswerPlacement = arc4random_uniform(4)+1 

     var button : UIButton = UIButton() 

     var x = 1 

     for i in 1...4 
     { 
      button = view.viewWithTag(i) as! UIButton 

      if (i == Int(rightAnswerPlacement)) 
      { 
       button.setTitle(answers[currentQuestion][0], for: .normal) 
      } 
      else 
      { 
       button.setTitle(answers[currentQuestion][x], for: .normal) 
       x = 3 
      } 


     } 
     currentQuestion += 1 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     newQuestion() 
    } 

} 

新しい固定コード:

// 
// AnimalViewController.swift 
// It's Trival 
// 
// Created by Chris Levely on 12/18/16. 
// Copyright © 2016 ZenithNomad. All rights reserved. 
// 

import UIKit 

class AnimalViewController: UIViewController { 

    let questions = ["What is the fastest fish in the sea?", "Which animal has the most legs?"] 
    let answers = [["Sailfish", "Tuna", "Swordfish", "Marlin"], ["Millipede", "Spider", "Ant", "Octopus"]] 

    var currentQuestion = 0 
    var rightAnswerPlacement : UInt32 = 0 

    @IBOutlet weak var Question: UILabel! 

    @IBAction func AnswerQuestion(_ sender: AnyObject) 
    { 
     if (sender.tag == Int(rightAnswerPlacement)) 
     { 
      print("Right") 
     } 
     else 
     { 
      print("Wrong") 
     } 

     if (currentQuestion != questions.count) 
     { 
      newQuestion() 
     } 
    } 

    func newQuestion() 
    { 
     Question.text = questions[currentQuestion] 

     rightAnswerPlacement = arc4random_uniform(4)+1 

     var button : UIButton = UIButton() 

     var x = 1 

     for i in 1...4 
     { 
      button = view.viewWithTag(i) as! UIButton 

      if (i == Int(rightAnswerPlacement)) 
      { 
       button.setTitle(answers[currentQuestion][0], for: .normal) 
      } 
      else 
      { 
       button.setTitle(answers[currentQuestion][x], for: .normal) 
       x += 1 
      } 


     } 
     currentQuestion += 1 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     newQuestion() 
    } 

} 
+0

なぜ 'answers [currentQuestion] [x]'?ハードコーディングされた 'x 'は最初に1回、次に3回繰り返されます。 –

+0

x = 1は、正しい答えであるため、配列の0にアクセスしたくないためです。一度しかアクセスする必要はありません。私は値を1から始めます。しかし、最後にx = 3をハードコードしてはいけません。ボタンごとにインクリメントするだけで、文字列配列内を前進する必要があります。 –

+0

"私はハードコードされていてはなりませんx = 3_"、まあ、あなた自身の質問にあなたの答えを得ました。 :) –

答えて

0

私のソリューションは、xの値をランダムよりも少し簡単だった同じ概念です。上記の私のサンプルコードでは、x = 1、x = 3のようにnewQuestion関数で書かれています。

解決策はx + = 1になりました。配列内の4番目の解答ではなく、各ループの配列を通る。最も洗練されたソリューションではないかもしれませんが、この単純なアプリケーションにはすべてが必要です

0

あなたがランダムボタンに正解のタイトルを設定する前に、あなたが最初にすべてのボタンのタイトルを設定することを想像してみてこのランダムな位置が配列(0)の正しい答えの位置と同じでない場合は、ランダムなボタンの正しい答えの文字列を設定します。実際に起こっているのは、重複した文字列で終わります。

あなたがする必要があることは、配列のランダムな位置で別の答えでポジション0(正解)の答えを切り替えるか、答えの配列をよりよくシャッフルすることです。私は、内蔵の関数はないと思うが、新しい空の配列を作成し、元の配列からランダムな答えを削除し、新しい配列に元の配列から新しい配列に切り替えるまで、新しい配列に追加するランダムな順序。

希望します。

2

ハードコードx = 3であるため、xもランダム化する必要があります。ここで

は、私はUILabelを使用してそれをテスト私のアプローチですが、それは

func newQuestion() 
{ 
    questionLabel.text = questions[currentQuestion] 
    var label : UILabel = UILabel() 
    var xArray = [0, 1, 2, 3] 
    var x = Int(arc4random_uniform(UInt32(xArray.count))) 

    for i in 1...4 
    { 

     label = view.viewWithTag(i) as! UILabel 
     label.text = answers[currentQuestion][xArray[x]] 

     if answers[currentQuestion][xArray[x]] == answers[currentQuestion][0] 
     { 
      print(answers[currentQuestion][xArray[x]]) 
      //this is the answer, do something when user click this button 
     } 

     //remove the index x because you don't want to get a same number next time 
     xArray.remove(at: x) 
     x = Int(arc4random_uniform(UInt32(xArray.count))) 

    } 
    currentQuestion += 1 
} 

enter image description here

+0

あなたが言ったようにして、x値をランダム化しようとすると。同じように、あなたはここにいます。私はさらに重複しています。ただし、これ以外の場合はランダムな回答が重複し、時には複数回 –

+0

あなたが実装した新しい方法でコードを更新できますか? – bubibu

+0

問題を修正したものを含めるように質問を更新しました。 :) –

関連する問題