我正在尝试测试我的代码,我得到的只是一个类型错误。我是scala的新手,但据我所知,ide指向括号。
我已经从主函数中移除了函数(不确定其用途是什么,这是面向对象编程的初衷。)并且我用声明来充实了工具
class FirstObject {
def computeShippingCosts(weight: Double): Double = {
var init: Double = 5.0
var overW: Double = weight - 30.0
if (weight >= 30) {
var total: Double = init + (overW * .25)
} else {
var total: Double = 5.0
}
}
println(computeShippingCosts(31.0))
}
我希望println的结果为5.25,但是除了错误以外没有其他打印内容,所以我不知道该怎么办。
答案 0 :(得分:1)
首先,不要在Scala中使用return
,它会导致一些非常奇怪的错误。函数中的最后一个值将是结果,因此不需要return
。
由于上一个值为val ...
并且声明没有返回值(或者它的值为Unit
,它与{{1} )。
如果有一个函数可以做同样的事情,最好避免使用void
。在这种情况下,您可以使用if/else
:
max
我认为这也更好地表达了逻辑,因为它清楚地表明存在一个具有最小值的计算成本。这样可以确保较重的包裹永远不会比较轻的包裹便宜,而采用原始逻辑很难保证。
如果要保留原始代码形式,则如下所示:
def computeShippingCosts(weight: Double): Double =
math.max(5, weight*.25 - 2.5)
安德烈(Andrey)提供了一个替代版本,如果您将计算视为基本成本,而超重项目则超出了该成本,那么该版本更有意义:
def computeShippingCosts(weight: Double): Double = {
val init: Double = 5
val overW: Double = weight - 30.0
if (weight >= 30) {
init + (overW*.25)
} else {
5.0
}
}