我是scala的新学习者,我正在尝试运行此示例代码
def isLast(c: Int, r: Int):Int ={
if(r == 1)
{
return 1;
}
else if (r == c){
return 1
}
}
但是它给了我编译时错误,说
Multiple markers at this line
- type mismatch; found : Unit required: Int
- type mismatch; found : Unit required: Int
请帮助我,并建议我学习scala的好网站。
答案 0 :(得分:29)
首先,让我们稍微清理你的代码:
def isLast(c: Int, r: Int):Int = {
if(r == 1)
return 1
else if (r == c)
return 1
// but what about when r is neither 1 nor c ??
}
所以你告诉scala,如果r
为1,则返回1,如果r == c
,则返回1.那很好。但是如果你想让方法返回一个Int,它必须在每个的情况下返回一个。所以Scala抱怨,因为当r
既不是1也不是c
时,它不知道返回什么Int。
修复是添加一个else
子句而不是返回其他一些Int。
作为补充说明,您可以而且应该在此处省略return
关键字,让Scala隐式知道if-else表达式的结果,作为函数体内的最后一个表达式,应该返回:
def isLast(c: Int, r: Int):Int = {
if(r == 1)
1
else if (r == c)
1
else
0 // or some other Int
}
作为最后一点,如果你有一个名称以is
开头的函数,那么它应该返回一个布尔值。换句话说,如果输入是最后一个,则返回true,否则返回false。
答案 1 :(得分:15)
我怀疑您正在尝试将1
作为true
的替代品。别;它不是。
你的逻辑是:
def isLast(c: Int, r: Int): Boolean = r == 1 || r == c
: Boolean
类型注释是可选的。在这里放弃它是安全的,因为从右边的短表达式和方法的命名来看,返回类型非常明显。当1发生时,不要使用10行代码。
答案 2 :(得分:3)
你没有“else”子句,只是一个“else if”,所以你的函数不能保证返回一个整数。如果它落在两个条件下,你将什么也不返回,这是一个“单位”返回类型。您需要明确说出else 0
。
答案 3 :(得分:0)
我们可以简单地编写If Else语句:
scala> object TestIfElse{
def main(args: Array[String]){
var id = 10
if(id == 10)
println("Id is "+id)
else
println("Id is different")
} }
使用以下方法调用主要方法:
scala>TestIfElse.main(Array())
输出为:
Id is 10