Kotlin 如何正确满足if条件
我对这项任务有问题。我的目标是根据里程计算汽车价格。 公式是:Kotlin 如何正确满足if条件,kotlin,Kotlin,我对这项任务有问题。我的目标是根据里程计算汽车价格。 公式是: 每行驶10000公里,价格就会降低200美元。例如,19999公里的价格下降了200美元,但20000公里的价格下降了400美元。此外,由于车龄乘以200,价格也会降低。 我所做的是: when (input) { in 0..9999 -> { moneyToRemove = 2000 price -= mone
每行驶10000公里,价格就会降低200美元。例如,19999公里的价格下降了200美元,但20000公里的价格下降了400美元。此外,由于车龄乘以200,价格也会降低。
我所做的是:
when (input) {
in 0..9999 -> {
moneyToRemove = 2000
price -= moneyToRemove
}
else -> {
var counter = 0
moneyToRemove = old * 2000
for (x in 10000..input) {
if (x % 10000 == 0 ) {
counter++
if (x == input) {
println(counter)
price = price - moneyToRemove - counter*200
}
}
}
}
}
输入-从扫描仪提供的里程数
在第一种情况下,moneyToRemove变量设置为2000(5年*200)
在其他情况下,我试图计算有多少额外的美元将降低汽车价格使用计数器。但我有一个问题,例如值299 999。调试器模式下的计数器显示29,这是正确的,但我不能满足第二个条件并正确计算汽车的价格。你能帮忙吗
这是JetBrains academy Kotlin dev track提供的。您不需要任何
条件。你可以把它放在一个简单的公式里
import kotlin.math.*
fun main() {
var originalprice = 30000; // the original price
var miles = 12345.6; // the mileage
var age = 7; //the age in years
var reducedprice = originalprice -
(floor(miles / 10000.0)) * 200 - //substract 200$ for each full 10000 miles
age * 200 //substract 200$ foreach year
print(reducedprice);
}
floor(miles/10000.0)
将英里数除以10000并向下四舍五入到下一个整数。因此,0-9999为0,10000-19999为1,依此类推
如果miles
是整数值,您甚至不需要floor
,因为整数除法只返回整数。Ie 9999/10000=0、19999/10000=1等等
var reducedprice = originalprice -
(miles / 10000) * 200 - //substract 200$ for each full 10000 miles
age * 200 //substract 200$ foreach year
编辑
尽管我认为你的方法很复杂,但不易维护。
您有年龄部分的代码复制
对于从10000到输入的每个值,您都要进行大量不必要的%
计算
因为在第一个分支中执行的所有代码也在第二个分支中执行,所以不需要使用when
。只需执行循环,从10000开始,因此如果输入<10000,则不会执行
但总而言之,你的方法原则上也会起作用。但有两个问题
你不考虑车龄,当里程低于10000时,你只要收回固定数量。< /P>
当里程数超过10000时,仅当输入是10000的精确倍数时,才计算降价。你必须把这个计算放在循环之后
您不需要任何if
条件。你可以把它放在一个简单的公式里
import kotlin.math.*
fun main() {
var originalprice = 30000; // the original price
var miles = 12345.6; // the mileage
var age = 7; //the age in years
var reducedprice = originalprice -
(floor(miles / 10000.0)) * 200 - //substract 200$ for each full 10000 miles
age * 200 //substract 200$ foreach year
print(reducedprice);
}
floor(miles/10000.0)
将英里数除以10000并向下四舍五入到下一个整数。因此,0-9999为0,10000-19999为1,依此类推
如果miles
是整数值,您甚至不需要floor
,因为整数除法只返回整数。Ie 9999/10000=0、19999/10000=1等等
var reducedprice = originalprice -
(miles / 10000) * 200 - //substract 200$ for each full 10000 miles
age * 200 //substract 200$ foreach year
编辑
尽管我认为你的方法很复杂,但不易维护。
您有年龄部分的代码复制
对于从10000到输入的每个值,您都要进行大量不必要的%
计算
因为在第一个分支中执行的所有代码也在第二个分支中执行,所以不需要使用when
。只需执行循环,从10000开始,因此如果输入<10000,则不会执行
但总而言之,你的方法原则上也会起作用。但有两个问题
你不考虑车龄,当里程低于10000时,你只要收回固定数量。< /P>
当里程数超过10000时,仅当输入是10000的精确倍数时,才计算降价。你必须把这个计算放在循环之后
如果有办法吗?我正试着用我自己的方式来做。当然,你可以在这里和那里添加一些。但是,当不需要条件时,增加条件的目的是什么?编码也是关于编写可读、可维护和干净的代码。我认为这是解决这项任务的最干净的方法。你们最初的方法的问题是:你们需要在两个分支机构中调整护理年龄。即在if
中,年龄是唯一的减少因素。此外,在else
分支中,除milage之外,还必须在定价中考虑年龄。这会导致代码重复。或者,您也可以完全独立地处理这两个因素。也就是说,先减年龄,然后减英里。但是,当
Im卡住时,你不能将年龄的减少放在第一个分支中,而是放在之前。。。你能帮忙吗?有什么办法吗?我正试着用我自己的方式来做。当然,你可以在这里和那里添加一些。但是,当不需要条件时,增加条件的目的是什么?编码也是关于编写可读、可维护和干净的代码。我认为这是解决这项任务的最干净的方法。你们最初的方法的问题是:你们需要在两个分支机构中调整护理年龄。即在if
中,年龄是唯一的减少因素。此外,在else
分支中,除milage之外,还必须在定价中考虑年龄。这会导致代码重复。或者,您也可以完全独立地处理这两个因素。也就是说,先减年龄,然后减英里。但是,当
Im卡住时,你不能将年龄的减少放在第一个分支中,而是放在之前。。。你能帮忙吗?