For循环必须有一个迭代器()



我需要这项服务,如果人们停留超过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次。在这种情况下,您将使用范围。

  • 您也没有使用变量extraPriceextraTime

  • 有两个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...
}

相关内容

  • 没有找到相关文章

最新更新