我注意到在else if(r1 == 0 || divisors.tail.isEmpty || !divisors.tail.contains(r1)){newAcc}
行中导致类型不匹配。因为我的else
]没有if ... else if ...
子句
def euclidianDivision(dividend:Int,divisor:Int):(Int,Int)={ val quotient = dividend/divisor val remainder = dividend%divisor (quotient,remainder) } def firstExpansion(dividend:Int,divisors:List[Int]):List[(Int,Int)]={ def firstExpansionIter(dividend:Int,divisors:List[Int], acc:List[(Int,Int)]):List[(Int,Int)]= { val div1:Int = divisors.head val (q1,r1):(Int,Int) = euclidianDivision(dividend,div1) val newAcc:List[(Int,Int)] = acc:::List((div1,q1)) if (divisors.tail.contains(r1)){ firstExpansionIter(r1,divisors.tail,newAcc) }else if(r1 == 0 || divisors.tail.isEmpty || !divisors.tail.contains(r1)){newAcc} } firstExpansionIter(dividend,divisors,List((0,0))).tail }
这里是错误代码:
错误:(32,15)类型不匹配;找到:所需单位:列表[(Int,Int)]}其他if(r1 == 0 || divisors.tail.isEmpty ||!divisors.tail.contains(r1)){newAcc}
我可以通过添加
else
子句来纠正此问题,但是如果默认情况下未处理任何结果,该函数将尝试返回Unit
怎么办?
NB:更正后的代码:
def firstExpansion(dividend:Int,divisors:List[Int]):List[(Int,Int)]={
def firstExpansionIter(dividend:Int,divisors:List[Int], acc:List[(Int,Int)]):List[(Int,Int)]= {
val div1:Int = divisors.head
val (q1,r1):(Int,Int) = euclidianDivision(dividend,div1)
val newAcc:List[(Int,Int)] = acc:::List((div1,q1))
if (divisors.tail.contains(r1)){
firstExpansionIter(r1,divisors.tail,newAcc)
}else if(r1 == 0 || divisors.tail.isEmpty || !divisors.tail.contains(r1)){newAcc}
else throw new RuntimeException("Something unexpected happened.")
}
firstExpansionIter(dividend,divisors,List((0,0))).tail
}
我注意到在该行中存在类型不匹配,否则if(r1 == 0 || divisors.tail.isEmpty ||!divisors.tail.contains(r1)){newAcc}。因为我的if ... else if ... def ...
通过@JörgWMittag:
我可以通过添加
else
子句来纠正此问题,但是如果默认情况下未处理任何结果,该函数将尝试返回Unit
怎么办?