返回分号错误的Scala函数
我无法找出此函数的错误,它告诉我应该使用分号。问题是您使用返回分号错误的Scala函数,scala,functional-programming,Scala,Functional Programming,我无法找出此函数的错误,它告诉我应该使用分号。问题是您使用else启动了一个语句 对于if块,如果只有一条语句,则只能省略{花括号}。由于放置了第二条语句,编译器假定它不是if块的一部分,因此后面的else是一个全新表达式的开始。由于else不是表达式的有效开始,编译器会感到困惑,并给出该错误 由于您希望在初始的if块中有多行/语句,因此应该用括号将其括起来。您还应该缩进这两行(这里没有适当的缩进不是问题,但仍然很重要) (哦,您正在使用赋值运算符=,其中应该有一个相等运算符=) 下面是它应该是
else
启动了一个语句
对于if
块,如果只有一条语句,则只能省略{
花括号}
。由于放置了第二条语句,编译器假定它不是if
块的一部分,因此后面的else
是一个全新表达式的开始。由于else
不是表达式的有效开始,编译器会感到困惑,并给出该错误
由于您希望在初始的if
块中有多行/语句,因此应该用括号将其括起来。您还应该缩进这两行(这里没有适当的缩进不是问题,但仍然很重要)
(哦,您正在使用赋值运算符=
,其中应该有一个相等运算符=
)
下面是它应该是什么样子:
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")}
}
问题是您用
else
启动了一个语句
对于if
块,如果只有一条语句,则只能省略{
花括号}
。由于放置了第二条语句,编译器假定它不是if
块的一部分,因此后面的else
是一个全新表达式的开始。由于else
不是表达式的有效开始,编译器会感到困惑,并给出该错误
由于您希望在初始的if
块中有多行/语句,因此应该用括号将其括起来。您还应该缩进这两行(这里没有适当的缩进不是问题,但仍然很重要)
(哦,您正在使用赋值运算符=
,其中应该有一个相等运算符=
)
下面是它应该是什么样子:
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")}
}
在做了一些改变之后
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")
}
(使用
=
而不是=
进行比较时,请使用{}
在if-else
周围,返回if/else
每个部分的计算结果,在typeDeg
没有预期值时执行操作,在进行一些更改后,将far
和celsit
的声明移动到相关块内(并将它们更改为VAL))
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")
}
(使用
=
而不是=
进行比较时,请使用{}
在if-else
周围,返回if/else
每个部分的计算结果,在typeDeg
没有预期值时执行操作,将far
和celsit
的声明移动到相关块内(并将它们更改为VAL))@Dylan用if-else
和=
解决了一些问题。下面介绍如何使用模式匹配使其更加简洁。您可以添加其他事例来处理到其他度量单位的转换,以及一个用于无效typeDeg
输入的事例
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
和=
解决了一些问题。下面介绍如何使用模式匹配使其更加简洁。您可以添加其他事例来处理到其他度量单位的转换,以及一个用于无效typeDeg
输入的事例
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语句中,需要使用布尔比较器“==”。当前,您正在对值typeDeg进行赋值。此外,还需要在条件代码周围放置一些代码块{}。首先,在if语句中,需要执行布尔比较器“==”。当前,您正在对值typeDeg进行赋值。另外,你还需要在条件代码周围放置一些代码块{},当你从函数返回单元时,仍然会出现错误哦,我的错;我的注意力集中在if/else块上。由于OP似乎是一个初学者,而这个问题并不是他真正想问的,我将把它作为“练习留给读者”,而不是解决这个问题;我的注意力集中在if/else块上。由于OP似乎是个初学者,而这个问题并不是他真正想问的,我将把它作为“读者练习”,而不是解决这个问题。丢失printlns(然后需要val)。但是更整洁的是,无需打印(然后需要val)。但是更整洁,没什么好的,谢谢,我看到这是工作,这是伟大的。我在开始的时候放了一些括号和==符号,但是我尝试了很多不同的版本,最后我出于绝望把最后一个放在这里,没有想到我会得到这么多的帮助……。),我不明白为什么要调用变量使其工作…far和celsit…我也不明白为什么将它们更改为val>>它不应该是一种常量吗?Paul,这far和celsit行确实让我感到困惑…你能给我一点启发吗?首先
val
并不意味着常量。这意味着它们在初始化后无法更改。因为您不需要在这里重新分配它们,所以更清楚的是将它们设置为val
s。其次,在Scala中,if
/else
是一个表达式,它返回if
或else
部分中的最后一个值。在这种情况下,需要将其转换为温度值,far
或celsit
好的,谢谢,我看到这是可行的,这很好。我在开始的时候放了一些括号和==符号,但是我尝试了很多不同的版本,最后我出于绝望把最后一个放在这里,没有想到我会得到这么多的帮助……。),我不明白为什么要调用变量使其工作…far和celsit…我也不明白为什么要更改