【问题标题】:If statements not executing. When changed to a switch, only the default case executes如果语句未执行。更改为开关时,仅执行默认情况
【发布时间】:2018-01-02 02:01:10
【问题描述】:

我正在创建一个刽子手应用程序,当我删除它时 if 语句不起作用,代码有效,但仅适用于一种动物。代码应该更新标签,如果单词包含该字母,则将您按下的字母放在适当的位置。我尝试创建一个开关

(随机是从动物数组中选择的单词)

switch random {
case "aardvark":
(the code for when random is aardvark)
default:
(the code for sea turtle) }

但默认情况下每次都会执行,即使 random 是土豚

@IBAction func aPressed(_ sender: Any) {

    if random == "aardvark" {
    if aardvark[0] == "a" {
        aar[0] = "a"
    };if aardvark[1] == "a" {
        aar[1] = "a"
    };if aardvark[2] == "a" {
        aar[2] = "a"
    };if aardvark[3] == "a" {
        aar[3] = "a"
    };if aardvark[4] == "a" {
        aar[4] = "a"
    };if aardvark[5] == "a" {
        aar[5] = "a"
    };if aardvark[6] == "a" {
        aar[6] = "a"
    };if aardvark[7] == "a" {
        aar[7] = "a"
    } else if aardvark[0] != "a" , aardvark[1] != "a" , aardvark[2] != "a" , aardvark[3] != "a" , aardvark[4] != "a" , aardvark[5] != "a" , aardvark[6] != "a" , aardvark[7] != "a" {
        wrong += 1
    }
        theWord.text = self.aar.joined(separator: " ")
    }

    if random == "sea turtle" {
   if seaTurtle[2] == "a" {
        sTurt[2] = "a"
        theWord.text = self.sTurt.joined(separator: " ")
   }
    }
    buttonA.isHidden = true
    updateImage()
    }

【问题讨论】:

  • if..if..if.. != switch 因为每个if 都可能被执行。也许你在想if..else if..else if..
  • 这也是 if random == "aardvark" 等不起作用的原因吗?
  • 如果那个(“aardvark”的字符串)random变量的内容,它“将是一个真实的条件”(所以也许random变量包含其他内容?)。另外,请注意,有一个 outer if 包装了所有 if..if..if..。花一些时间来应用统一的缩进/格式会使其更加清晰。此外,将每个 if.. 放在新行的开头。
  • 仅供参考 - 我真的希望您不打算为每个单词设置一个变量,并为每个单词设置一组 if 语句。到目前为止,您的逻辑是完成刽子手游戏的最不合适的方法。请考虑一下您的代码将如何处理数千个单词。
  • 了解if else 是关于什么的。更好的是,如果 switch 语句给 you 您声称的结果,请给我们 full 代码来重现它,而不是 "(当随机是土豚)”random != "aardvark 极有可能,这就是执行默认设置的原因。

标签: swift if-statement switch-statement


【解决方案1】:

除了您的代码存在的结构性问题之外,您还考虑到您不能只对每个字母的检查一个一个地进行硬编码。您的代码将需要循环(通过您编写的循环显式地,或通过使用为您循环的函数隐式地)通过答案的字母,将它们与猜测进行比较,并适当地修改游戏板。这是一个例子:

let word = "Aardvark"
var gameBoard = "XXXXXXXX"
let guess: Character = "a"

let indicies = zip(word.lowercased(), word.indices).flatMap{ (pair: (letter: Character, index: String.Index)) in
    return pair.letter == guess ? pair.index : nil
}

indicies.forEach{ gameBoard.replaceSubrange($0...$0, with: word[$0...$0]) }

print(gameBoard) //AaXXXaXX

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多