2016-03-05 17 views
-3

嗨,大家好我很難搞清楚什麼是錯的。在下面的函數中,當類別是Subtraction並且Hard水平時,它跳過該函數並轉到分割部分。我認爲我所說的所有措辭都是正確的,但我認爲我的括號內容有問題。花了一個多小時試圖找到它。仍然不能。順便說一句,所有其他類別和級別的工作,即使在減法。唯一虛假的是減法,我無法找到括號內有什麼問題。缺少一個支架等(斯威夫特)

代碼:

func generate(){ 


    if category == "Multiplication"{ 
     if level == "Easy"{ 
    part1 = Int(arc4random_uniform(UInt32(4))) 
    part2 = Int(arc4random_uniform(UInt32(4))) 
    questionsLbl.text = "\(part1) x \(part2)?" 
    answer = part1 * part2 
    createExtraAnswers() 
     } 
     if level == "Medium"{ 
      part1 = Int(arc4random_uniform(UInt32(10))) 
      part2 = Int(arc4random_uniform(UInt32(10))) 
      questionsLbl.text = "\(part1) x \(part2)?" 
      answer = part1 * part2 
      createExtraAnswers() 
     } 
     if level == "Hard"{ 
      part1 = Int(arc4random_uniform(UInt32(14))) 
      part2 = Int(arc4random_uniform(UInt32(14))) 
      questionsLbl.text = "\(part1) x \(part2)?" 
      answer = part1 * part2 
      createExtraAnswers() 
     } 
    }else{ 
     if category == "Addition"{ 
      if level == "Easy"{ 
      part1 = Int(arc4random_uniform(UInt32(6))) 
      part2 = Int(arc4random_uniform(UInt32(6))) 
      questionsLbl.text = "\(part1) + \(part2)?" 
      answer = part1 + part2 
      createExtraAnswers() 
      } 
      if level == "Medium"{ 
       part1 = Int(arc4random_uniform(UInt32(20))) 
       part2 = Int(arc4random_uniform(UInt32(20))) 
       questionsLbl.text = "\(part1) + \(part2)?" 
       answer = part1 + part2 
       createExtraAnswers() 
      } 
      if level == "Hard"{ 
       part1 = Int(arc4random_uniform(UInt32(100))) 
       part2 = Int(arc4random_uniform(UInt32(100))) 
       questionsLbl.text = "\(part1) + \(part2)?" 
       answer = part1 + part2 
       createExtraAnswers() 
      } 
     }else{ 
      if category == "Subtraction"{ 
       if level == "Easy"{ 
       part1 = Int(arc4random_uniform(UInt32(10))) 
       part2 = Int(arc4random_uniform(UInt32(10))) 
       questionsLbl.text = "\(part1) - \(part2)?" 
       answer = part1 - part2 
        if answer <= -1{ 
         generate() 
        } 
       createExtraAnswers() 
       } 
       if level == "Medium"{ 
        part1 = Int(arc4random_uniform(UInt32(25))) 
        part2 = Int(arc4random_uniform(UInt32(25))) 
        questionsLbl.text = "\(part1) - \(part2)?" 
        answer = part1 - part2 
        if answer <= -1{ 
         generate() 
        } 
        createExtraAnswers() 
       } 
       if level == "Hard"{ 
        part1 = Int(arc4random_uniform(UInt32(100))) 
        part2 = Int(arc4random_uniform(UInt32(100))) 
        questionsLbl.text = "\(part1) - \(part2)?" 
        answer = part1 - part2 

        createExtraAnswers() 

       } 

      }else{ 
       if category == "Division"{ 
        if level == "Easy"{ 
        part1 = Int(arc4random_uniform(UInt32(37))) 
        part2 = Int(arc4random_uniform(UInt32(37))) 
        questionsLbl.text = "\(part1)/\(part2)?" 
        answerDub = Double(Double(part1)/Double(part2)) 
        if (answerDub % 1 == 0) { 
         print("whole number confirmed") 
        print(answerDub) 
         answer = Int(answerDub) 
        print(answer) 
         createExtraAnswers() 
        } else { 
         generate() 
        } 
       } 
       } 
       if level == "Medium"{ 
        part1 = Int(arc4random_uniform(UInt32(80))) 
        part2 = Int(arc4random_uniform(UInt32(80))) 
        questionsLbl.text = "\(part1)/\(part2)?" 
        answerDub = Double(Double(part1)/Double(part2)) 
        if (answerDub % 1 == 0) { 
         print("whole number confirmed") 
         print(answerDub) 
         answer = Int(answerDub) 
         print(answer) 
         createExtraAnswers() 
        } else { 
         generate() 
        } 
       } 
      } 
      if level == "Hard"{ 
       part1 = Int(arc4random_uniform(UInt32(140))) 
       part2 = Int(arc4random_uniform(UInt32(140))) 
       questionsLbl.text = "\(part1)/\(part2)?" 
       answerDub = Double(Double(part1)/Double(part2)) 
       if (answerDub % 1 == 0) { 
        print("whole number confirmed") 
        print(answerDub) 
        answer = Int(answerDub) 
        print(answer) 
        createExtraAnswers() 
       } else { 
        generate() 
       } 
      } 


     } 
    } 
} 
+4

您是否嘗試過單步調試器中的代碼?執行流程在什麼時候並不像您期望的那樣? –

+0

你從哪裏得到'category'和'label'?設置那些選擇減法的值實際上將值設置爲除法或其他值時可能會遇到問題。另外,看看'else if' [swift中的語法](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/ if-statement) – shamsup

+1

不要更改您的問題的全部內容,它會使現有答案無效。如果您有新的不同的問題,請創建一個新問題。這一點應該停留在現有的話題上。謝謝。 – Moritz

回答

2

的問題是在你的if category = "Division"代碼:

if category == "Division"{ 
    if level == "Easy"{ 
     part1 = Int(arc4random_uniform(UInt32(37))) 
     part2 = Int(arc4random_uniform(UInt32(37))) 
     questionsLbl.text = "\(part1)/\(part2)?" 
     answerDub = Double(Double(part1)/Double(part2)) 
     if (answerDub % 1 == 0) { 
      print("whole number confirmed") 
      print(answerDub) 
      answer = Int(answerDub) 
      print(answer) 
      createExtraAnswers() 
     } else { 
      generate() 
     } 
    } 
} // the if category == "Division" statement is ending here. 

卸下支架(一個我把旁邊的註釋)和移動它下面的if level == "Hard"聲明。

作爲一個方面說明,你的代碼格式很差。如果將所有塊排在一起,則發現錯誤要容易得多。

+0

當你的意思是「那個支架」是否指你複製/粘貼的最後一個支架時,我喜歡我的塊的格式很差 –

+0

? –

+1

@AndyLebowitz,是的,看到我最新的編輯。爲什麼你喜歡你的塊格式不好。它使你成爲效率更低的程序員。 –

1

嵌套if-else聲明是地獄。你爲什麼不使用switch聲明是這樣的:

switch (category, level) { 
case ("Multiplication", "Easy"): 
    part1 = Int(arc4random_uniform(UInt32(4))) 
    part2 = Int(arc4random_uniform(UInt32(4))) 
    questionsLbl.text = "\(part1) x \(part2)?" 
    answer = part1 * part2 
    createExtraAnswers() 
case ("Multiplication", "Medium"): 
    part1 = Int(arc4random_uniform(UInt32(10))) 
    part2 = Int(arc4random_uniform(UInt32(10))) 
    questionsLbl.text = "\(part1) x \(part2)?" 
    answer = part1 * part2 
    createExtraAnswers() 
// ... 
} 

它更可讀的這種方式。

+0

我是一個像這樣的球員。這就是爲什麼 –

+0

加我是一個14歲,剛學會代碼 –

+0

你的個人資料說你是18?無論如何,這個問題是修辭的。 – courteouselk

1

我認爲if-else語句會導致醜陋的不可讀代碼。您的用例需要你有一些類型的代碼「醜陋」的,由於這樣的事實,你必須硬編碼的東西,所以這裏是我想出了一個小操場:

enum Difficulty{ 
    case Easy 
    case Medium 
    case Hard 
} 

protocol ExerciseProtocol{ 

    var difficulty : Difficulty {get} 
    var description : String {get} 
    var answer : Int {get} 

} 

class MathExercise : ExerciseProtocol { 

    enum ExerciseType : String { 
    case Multiplication = "x" 
    case Addition = "+" 
    case Subtraction = "-" 
    case Division = "/" 

    } 

    var difficulty : Difficulty 
    var type : ExerciseType 
    var operand1 : Int 
    var operand2 : Int 
    var description : String{ 

    return "\(operand1) \(self.type.rawValue) \(operand2)" 

    } 

    init(type: ExerciseType, difficulty: Difficulty){ 

    self.difficulty = difficulty 
    self.type = type 

    switch difficulty{ 
    case .Easy: 
     switch type{ 
     case .Addition: 
     operand1 = Int(arc4random_uniform(UInt32(6))) 
     operand2 = Int(arc4random_uniform(UInt32(6))) 
     case .Subtraction: 
     operand1 = Int(arc4random_uniform(UInt32(10))) 
     operand2 = Int(arc4random_uniform(UInt32(10))) 
     case .Multiplication: 
     operand1 = Int(arc4random_uniform(UInt32(4))) 
     operand2 = Int(arc4random_uniform(UInt32(4))) 
     case .Division: 
     operand1 = Int(arc4random_uniform(UInt32(37))) 
     operand2 = Int(arc4random_uniform(UInt32(37))) 

     } 
    case .Medium: 
     switch type{ 
     case .Addition: 
     operand1 = Int(arc4random_uniform(UInt32(20))) 
     operand2 = Int(arc4random_uniform(UInt32(20))) 
     case .Subtraction: 
     operand1 = Int(arc4random_uniform(UInt32(25))) 
     operand2 = Int(arc4random_uniform(UInt32(25))) 
     case .Multiplication: 
     operand1 = Int(arc4random_uniform(UInt32(10))) 
     operand2 = Int(arc4random_uniform(UInt32(10))) 
     case .Division: 
     operand1 = Int(arc4random_uniform(UInt32(80))) 
     operand2 = Int(arc4random_uniform(UInt32(80))) 

     } 
    case .Hard: 
     switch type{ 
     case .Addition: 
     operand1 = Int(arc4random_uniform(UInt32(100))) 
     operand2 = Int(arc4random_uniform(UInt32(100))) 
     case .Subtraction: 
     operand1 = Int(arc4random_uniform(UInt32(100))) 
     operand2 = Int(arc4random_uniform(UInt32(100))) 
     case .Multiplication: 
     operand1 = Int(arc4random_uniform(UInt32(14))) 
     operand2 = Int(arc4random_uniform(UInt32(14))) 
     case .Division: 
     operand1 = Int(arc4random_uniform(UInt32(140))) 
     operand2 = Int(arc4random_uniform(UInt32(140))) 

     } 
    } 

    } 

    var answer : Int{ 
    switch self.type{ 
    case .Addition: 
     return operand1 + operand2 
    case .Subtraction: 
     return operand1 - operand2 
    case .Multiplication: 
     return operand1 * operand2 
    case .Division: 
     return operand1/operand2 
    } 
    } 
} 

而且使用它是這樣的:

let division = MathExercise(type: .Division, difficulty: .Hard) 
division.description // prints something like "5/5" 
division.answer // prints "1"