Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回分号错误的Scala函数_Scala_Functional Programming - Fatal编程技术网

返回分号错误的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…我也不明白为什么要更改