There is an error in the task "doesn't match with" on hyperskill

Viewed 29

My code

fun main() {
    
print("Enter a number and a measure of length: ")
    
val (n, m) = readln().split(" ")
   
val number: Int = n.toInt()
    
val dbnum: Float = number.toFloat()

val measure: String = m.lowercase()
    
    if (measure == "km" || measure == "kilometer" || measure == "kilometers") {
        println(if (number == 1) {
            "$number kilometer is ${number * 1000} meters"
        } else {
            "$number kilometers is ${number * 1000} meters"
        })
        if (measure == "m" || measure == "meter" || measure == "meters") {
        println(if (number == 1) {
            "$number meter is ${number * 1} meter"
        } else {
            "$number meters is ${number * 1} meters"
        })
        if (measure == "cm" || measure == "centimeter" || measure == "centimeters") {
        println(if (number == 1) {
            "$number centimeter is ${number * 0.01} meter"
        } else {
            "$number centimeters is ${number * 0.01} meters"
        })
        if (measure == "mm" || measure == "millimeter" || measure == "millimeters") {
        println(if (number == 1) {
            "$number millimeter is ${number * 0.001} meter"
        } else {
            "$number millimeters is ${number * 0.001} meters"
        })
        if (measure == "mi" || measure == "mile" || measure == "miles") {
        println(if (number == 1) {
            "$number mile is ${number * 1609.35} meters"
        } else {
            "$number miles is ${number * 1609.35} meters"
        })
        if (measure == "yd" || measure == "yard" || measure == "yards") {
        println(if (number == 1) {
            "$number yard is ${number * 0.9144} meter"
        } else {
            "$number yards is ${number * 0.9144} meters"
        })
        if (measure == "ft" || measure == "foot" || measure == "feet") {
        println(if (number == 1) {
            "$number feet is ${number * 0.3048} meter"
        } else {
            "$number feets is ${number * 0.3048} meters"
        })
        if (measure == "in" || measure == "inch" || measure == "inches") {
        println(if (number == 1) {
            "$number inch is ${number * 0.0254} meter"
        } else {
            "$number inches is ${number * 0.0254} meters"
        })
    } else {
        println("Wrong input")
    }
        }
        }
        }
        }
        }
        }
    }
}

Wrong answer in test #1

Your line "Enter a number and a measure of length: 2 kilometers is 2000 meters" doesn't match with "Enter a number and a measure of length: 2.0 kilometers is 2000.0 meters" in parts "2" and "2.0".

Can you tell me where the error is?

1 Answers

To get an output of .0 at the end you should work with Doubles instead of Int, so do

val number: Double = n.toDouble()

This also requires you to replace all instances of 1 with 1.0

Note: You also nested all the if statements which is not what you would want. (It only checks for "m" if it's already in the "km" branch for example)

Here is a more compact code for what I think you want:

fun main() {
    print("Enter a number and a measure of length: ")

    val (n, m) = readln()!!.split(" ")

    val number: Double = n.toDouble()
    val measure: String = m.lowercase()
    val plural = if (number != 1.0) "s" else ""
    println(when (measure) {
        "km", "kilometer", "kilometers" -> "$number kilometer$plural is ${number * 1000} meters"
        "m", "meter", "meters" -> "$number meter$plural is ${number * 1} meter$plural"
        "cm", "centimeter", "centimeters" -> "$number centimeter$plural is ${number * 0.01} meter$plural"
        "mm", "millitimeter", "millimeters" -> "$number millimeter$plural is ${number * 0.001} meter$plural"
        "mi", "mile", "miles" -> "$number mile$plural is ${number * 1609.35} meter$plural"
        "yd", "yard", "yards" -> "$number yard$plural is ${number * 0.9144} meter$plural"
        "ft", "foot", "feet" -> "$number ${if (number != 1.0) "feet" else "foot"} is ${number * 0.3048} meter$plural"
        "in", "inch", "inches" -> "$number inch${if (number != 1.0) "es" else ""} is ${number * 0.0254} meter$plural"
        else -> "Wrong input"
    })
}
Related