gpt4 book ai didi

kotlin - 在 kotlin 中重载函数时,我在一些非常基本的代码上不断得到 "Type mismatch"

转载 作者:行者123 更新时间:2023-12-05 04:28:27 30 4
gpt4 key购买 nike

在我不断得到的底部功能上类型不匹配:推断类型为 Int,但预期为 Double 我之前做过类似的事情,将输出声明为带有 Int 输入的 double。然而,这是我第一次使用“math.PI”和“math.pow”

fun main(args: Array<String>) {
val radius = 13;
println(getArea(radius));
}
fun getArea(radius: Double): Double{
val area = Math.pow(radius, radius) * Math.PI;
return area;
}

fun getArea(radius: Int): Double{
val area = Math.pow(radius, radius) * Math.PI;
return area;
}

最佳答案

我将尝试总结不同的贡献评论,以便为您的问题制定一个完整的答案。

类型不兼容

首先是您的实际问题。 Math.pow 函数具有以下签名,如 the documentation 中所示:

public static double pow(double a, double b)

然而,您试图通过将两个 Integer 传递给它来调用此函数,因此您会收到编译错误:

Type mismatch: inferred type is Int but Double was expected

与以前可能使用过的其他一些语言相比,Kotlin 不会对数字类型执行自动类型转换,您可以在 question on StackOverflow 中找到更多信息。 .

数学公式错误

假设您的目标是计算圆的面积,那么您的公式有误。

它应该是 A = r^2 * π 但你得到了 A = r^r * π

代码重用

如果您想为不同类型的参数提供相同的功能,那么实现它一次并在重载版本中使用单一实现可能会很有用。

与您的原始代码保持接近,这可能类似于以下内容。

fun main(args: Array<String>) {
val radius = 13;
println(getArea(radius));
}

fun getArea(radius: Double): Double {
val area = Math.pow(radius, 2) * Math.PI;
return area;
}

fun getArea(radius: Int): Double {
return getArea(radius.toDouble())
}

语法改进

Kotlin 是一种非常有表现力的语言,它允许您按如下方式简化代码。在 Kotlin 中不需要分号。对于作为单个表达式的简单函数,Kotlin 提供了一个 neat shortened syntax . Kotlin 的标准库还提供基本的数学功能,例如 pow function和一个 π constant .所以你不需要依赖 Java/JVM 特定的功能,例如来自数学

import kotlin.math.PI
import kotlin.math.pow

fun getArea(radius: Double): Double =
radius.pow(2) * PI

fun getArea(radius: Int): Double =
getArea(radius.toDouble())

关于kotlin - 在 kotlin 中重载函数时,我在一些非常基本的代码上不断得到 "Type mismatch",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72585699/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com