def TempConversion(ciferTemp: Double, typeDeg: String): Double = {
var celsit: Double = 0.0
var far: Double = 0.0
if (typeDeg = "c")
far = (ciferTemp - 32) / (5.0 / 9.0)
println(far + "en farhenheit")
else if (typeDeg ="f") {
celsit = (ciferTemp * (5.0 / 9.0)) + 32
println(celsit + "en celsius")}
}
我无法弄清楚这个函数有什么问题,它告诉我预期会出现一个分号。
答案 0 :(得分:2)
问题是您使用else
开始声明。
使用if
块,如果只有一个语句,则只能省略{
大括号}
。由于您放置了第二个语句,因此编译器假定它不是if
块的一部分,因此后面的else
是一个全新表达式的开头。由于else
不是表达式的有效开头,因此编译器会感到困惑,并为您提供该错误。
由于您打算在初始if
块中包含多行/语句,因此应使用括号将其包装起来。你也应该缩进这两行(缺少适当的缩进不是问题,但仍然很重要)。
(哦,你正在使用赋值运算符=
,你应该有一个等于运算符==
)
这是它应该是什么样子:
if(typeDeg == "c"){
far = (ciferTemp - 32) / (5.0 / 9.0)
println(far + "en farhenheit")
} else if(typeDeg == "f") {
celsit = (ciferTemp * (5.0 / 9.0)) + 32
println(celsit + "en celsius")
}
答案 1 :(得分:2)
@Dylan解决了if else
和==
的一些问题。在这里,您可以通过模式匹配来实现它,使其更加简洁。您可以添加其他案例来处理与其他度量单位的转换,以及一个用于无效typeDeg
输入的转换。
def TempConversion(ciferTemp: Double, typeDeg: String): Double = typeDeg match {
case "c" => (ciferTemp - 32) / (5.0 / 9.0)
case "f" => (ciferTemp * (5.0 / 9.0)) + 32
}
答案 2 :(得分:1)
进行一些更改后
def TempConversion(ciferTemp: Double, typeDeg: String): Double = {
if (typeDeg == "c") {
val far = (ciferTemp - 32) / (5.0 / 9.0)
println(far + "en farhenheit")
far
} else if (typeDeg == "f") {
val celsit = (ciferTemp * (5.0 / 9.0)) + 32
println(celsit + "en celsius")
celsit
} else {
// throw an exception, maybe?
0.0
}
}
(使用==
而不是=
进行比较,在{}
周围使用if-else
,从if/else
的每个部分返回计算结果,当typeDeg
没有预期值时执行某些操作,在相关块内移动far
和celsit
的声明(并将其更改为val))