Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 如何正确满足if条件_Kotlin - Fatal编程技术网

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卡住时,你不能将年龄的减少放在第一个分支中,而是放在
    之前。。。你能帮忙吗?