我想知道为什么此代码无法运行。错误出现在最后一行(打印语句)(最后一个“字母等级”)上并显示
“在初始化之前使用了变量'letterGrade'”
let score = 86
var letterGrade: Character
if(score >= 90)
{
letterGrade = "A"
}
else if(score >= 80)
{
letterGrade = "C"
}
else if (score >= 70)
{
letterGrade = "C"
}
else if (score >= 60)
{
letterGrade = "D"
}
else if (score > 0)
{
letterGrade = "F"
}
print("Your letter grade is \(letterGrade)")
答案 0 :(得分:2)
是的,在分配等级之前使用了它(编译器在抛出此错误之前并不知道您是否已在if语句中涵盖了所有情况-实际上,您并未涵盖零,因为@MartinR告诉您)。
通过将第2行更改为
,您可以具有默认值(在英国,“ U”为未评级)var letterGrade: Character = "U"
最好还是使用类型推断来表达
var letterGrade = "U"
您可能还希望使用开关来解决此类问题-使用此链接在Swift文档中查找-https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html
但这是我使用开关
的代码版本let score = 86
var letterGrade: Character
switch score {
case 90 ..< 100:
print("A")
case (80 ..< 90):
print("B")
case (70 ..< 80):
print("C")
case (0 ..< 70):
print("D")
default:
print("F")
}
这克服了编译器错误的问题。
希望这对您有所帮助。
答案 1 :(得分:0)
在初始化变量(为其提供初始值)之前,不能使用变量。
您处理了score >= 90
和score >= 80
和score >= 70
以及score >= 60
和score > 0
的情况。
如果分数等于0怎么办?如果发生这种情况,变量letterGrade
将保持未初始化状态。
要解决此问题,您可以使用@stevenpcurtis的答案,也可以仅将最后一个else if
语句替换为else
。
还考虑在switch
情况下使用default
语句。