我的代码没有运行这段代码是著名的“FizzBu​​zz”问题

问题描述

我正在尝试运行此代码,但它不起作用。我不知道如何将输入 j 作为字符串返回。 这是错误 /tmp/D2FFE31F-B533-48DF-AC15-F1EA8A029FCF.q0h9za/main.swift:15:1:错误:预期返回“字符串”的函数中缺少返回

func FizzBuzz(j:Int) -> String {
if j % 5 == 0 && j % 3 == 0 {
    return "FizzBuzz"
}

else if j % 3 == 0 {
    return "Buzz"
}

else if j % 5 == 0 {
    return "Fizz"
}
}

for i in 0...100 {
print(FizzBuzz(j:i))
}

解决方法

除了@rob mayoff 的回答之外,问题还在于您必须 return 在该函数中包含一个字符串,因为您是这么说的:

                        // must return a String
func FizzBuzz(j:Int) -> String { 

所以看看你的函数。如果 j 不能被 5 或 3 整除怎么办?您的代码只会通过 if else,并且不会调用任何 return

要解决这个问题,只需在函数结束时返回即可。

func FizzBuzz(j:Int) -> String {
    if j % 5 == 0 && j % 3 == 0 {
        return "FizzBuzz"
    } else if j % 3 == 0 {
        return "Buzz"
    } else if j % 5 == 0 {
        return "Fizz"
    }

    return "\(j)" /// return the number
}
,

Swift 字符串有一个名为 “string interpolation” 的特性。当字符串包含字符 \( 后跟某个表达式后跟 ) 时,Swift 会计算(运行)该表达式并将结果转换为字符串,并将该结果字符串替换为封闭字符串。例如:

"two plus three is \(2 + 3)"

上面,Swift 计算 2 + 3,得到 Int 5,然后将 Int 5 转换成字符串 "5",然后替换进入封闭的字符串,得到 "two plus three is 5"

因此将 j 作为字符串返回的一种方法是使用这样的字符串插值:

return "\(j)"
,

简短回答:“if”语句总是需要一个“else”来返回结果。

您有 3 个 if/else if 语句,但如果这些语句失败,则没有最后的“else”。

您需要添加其中之一

else {
   return “”
}

或者只是一个决赛

return “”