我需要这项服务,如果人们停留超过30分钟,他们必须每15分钟额外支付10美元(以及15分钟的一小部分)。
到目前为止,我是这样设计的:
var checkInTime: Calendar
val totalTime: Long
get() = (Calendar.getInstance().timeInMillis - checkInTime.timeInMillis) / MIN_IN_MILISEC
fun getTime(totalTime:Long): Int{
var finalPrice = 0
var initialPrice = 20
if(totalTime<31){
finalFee = initialPrice
} else {
val extraPrice = 10
val extraTime = 15
finalFee = initialPrice
for(extraTime in totalTime){
finalFee += extraTime
}
return finalFee
}
我得到了错误&;For循环必须有一个迭代器()&;当totalTime超过30分钟时,我试着循环计算,这样每多出15分钟,我就能多出10美元。我需要一些帮助,如何添加到finalFee每额外15分钟的人停留,因为我的方法是不工作。谢谢你。
让我们来看看您的getTime
函数:
-
您使用
Long
作为totalTime
。您可以用分钟来测量它,以简化计算(因为所有的时间值都是以分钟为单位测量的)。因为在Kotlin中,Long
类型存储了一个高达9,223,372,036,854,775,807的整数,并且地球上没有灵魂会使用你的服务那么长时间(这代表170亿千年),所以你可以只使用Int
。 -
您没有声明
finalFee
变量,因此代码将引发一个"未解决的reference"错误。由于您没有使用finalPrice
变量,我假设您想使用这个。 -
你试图迭代一个数值(在这种情况下,
totalTime
,这是一个Long
)。您可以遍历List
的每个元素,但是如何遍历整数的每个元素呢?我假设你想做一个特定的动作totalTime
次。在这种情况下,您将使用范围。 -
您也没有使用变量
extraPrice
和extraTime
。 -
有两个if-else条件(
finalPrice = initialPrice
)共同的代码,因此您可以将其提取到if-语句之外。
重构函数:
fun getTime(totalTime: Int): Int {
var finalPrice = 20
if (totalTime >= 30) {
(0 until totalTime).forEach {
finalPrice += 15
}
}
return finalPrice
}
它更短,但仍然没有做它应该做的事情:让我们假设totalTime
等于45。这个人花20美元获得30分钟,每15分钟只需支付10美元,因此总共只需支付30美元。你的函数考虑到这个人每停留一分钟就要为支付15美元,因为它使用了一个从0到totalTime
的for循环。为此,您需要一个For循环,从总时间(totalTime
)开始,每15分钟从30(时间限制)开始:
fun getTime(totalTime: Int): Int {
var finalPrice = 20
if (totalTime > 30) {
(30 until totalTime step 15).forEach {
finalPrice += 10
}
}
return finalPrice
}
更好的是,你甚至不需要for循环,你可以直接使用math:
fun getTime(totalTime: Int): Int {
var finalPrice = 20
if (totalTime > 30) {
finalPrice += ((totalTime - 30) / 15) * 10
// ^^^^^^^^^^^^^^^^ Get the exceeding time
// ^^^^^^^^^^^^^^^^^^^^^^^ How many 15 minutes are there?
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Put $10 for every 15 minutes
}
return finalPrice
}
最后一部分:你的问题说你也需要考虑15的分数。因此,您需要使用实数,而不是整数。让我们把它改成Double
:
fun getTime(totalTime: Int): Double {
var finalPrice = 20.0
if (totalTime > 30) {
finalPrice += ((totalTime - 30) / 15.0) * 10
}
return finalPrice
}
让我们来测试你的函数:
fun main() {
println(getTime(0)) // Outputs 20.0
println(getTime(10)) // Outputs 20.0
println(getTime(30)) // Outputs 20.0
println(getTime(45)) // Outputs 30.0
println(getTime(60)) // Outputs 40.0
println(getTime(70)) // Outputs 46.666...
}