You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin类型不匹配错误:函数参数传递问题排查

Kotlin温度控制函数调用的类型不匹配问题

我在学习Kotlin基础时遇到了温度控制相关的问题,调用printFinalTemperature函数时,传入conversionFormula相关参数始终出现类型不匹配错误:Type mismatch: inferred type is Double but (Double) -> Double was expected。以下是我的代码:

fun main() {
    var temp : Double = 10.0
    fun celsiusToFahrenheit(celsius : Double): Double {
        return 9/5 * (celsius) + 32
    }
    fun kelvinToCelsius(kelvin  : Double):Double {
        return kelvin - 273.15
    } 
    fun conversionFormula(fahrenheit: Double): Double {
        var fiveNine :Double = 0.56 
        var result :Double = (fiveNine*(fahrenheit - 32.0) + 273.15)
        return result
    } 
   printFinalTemperature(temp, "Kelvin", "Celsius", conversionFormula(temp))
}


fun printFinalTemperature(
    initialMeasurement: Double, 
    initialUnit: String, 
    finalUnit: String, 
    conversionFormula: (Double) -> Double
) {
    val finalMeasurement = String.format("%.2f", conversionFormula(initialMeasurement)) // two decimal places
    println("$initialMeasurement degrees $initialUnit is $finalMeasurement degrees $finalUnit.")
}

请问我忽略了什么?


错误原因

你调用printFinalTemperature时,传入的conversionFormula(temp)是执行函数后返回的Double类型结果,但该函数的第四个参数要求的是一个接收Double并返回Double的函数类型(即函数引用),这就导致了类型不匹配。

解决方案

直接传入函数名conversionFormula即可,不需要加括号和参数,这样传递的是函数本身,而非函数执行后的结果:

修改后的main函数中调用代码:

printFinalTemperature(temp, "Kelvin", "Celsius", conversionFormula)

另外补充两个小问题:

  • celsiusToFahrenheit函数里的9/5是整数除法,结果为1,应该改成9.0/5或者1.8才能得到正确的浮点运算结果。
  • conversionFormula里的fiveNine用5.0/9会比硬写0.56更准确,避免精度损失。

修改后的完整示例代码:

fun main() {
    var temp : Double = 10.0
    fun celsiusToFahrenheit(celsius : Double): Double {
        return 9.0/5 * celsius + 32
    }
    fun kelvinToCelsius(kelvin  : Double):Double {
        return kelvin - 273.15
    } 
    fun conversionFormula(fahrenheit: Double): Double {
        val fiveNine = 5.0/9
        return fiveNine * (fahrenheit - 32.0) + 273.15
    } 
   printFinalTemperature(temp, "Kelvin", "Celsius", conversionFormula)
}


fun printFinalTemperature(
    initialMeasurement: Double, 
    initialUnit: String, 
    finalUnit: String, 
    conversionFormula: (Double) -> Double
) {
    val finalMeasurement = String.format("%.2f", conversionFormula(initialMeasurement))
    println("$initialMeasurement degrees $initialUnit is $finalMeasurement degrees $finalUnit.")
}

内容的提问来源于stack exchange,提问作者Keb_Tse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:35:19