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

Kotlin中Unresolved reference: Coin错误求助——Android新手练手问题

解决「Unresolved reference: Coin」错误的方案

嘿,刚看了你的代码,问题很明确——你把Coin类定义成Dice类的嵌套内部类了,这就导致在main函数里直接调用Coin(2)时,Kotlin找不到这个类,因为它的作用域被限制在Dice类内部啦。

问题根源

你原代码里的Coin类是嵌套在Dice类的大括号里的:

class Dice(val numSides :Int){
    fun roll() : Int{
        return (1..numSides).random()
    }
    // Coin被嵌套在Dice内部,外部无法直接访问
    class Coin(val numSides :Int) {
        fun roll() :Int{
            return (1..numSides).random()
        }
    }
}

修复方案

最合理的做法是把Coin类移到Dice类外面,变成顶层类,这样main函数就能直接访问它了。另外我还帮你整理了代码格式(原代码太紧凑啦,可读性很差),顺便修正了拼写错误(fliped应该是flipped):

fun main() {
    val myFirstDice = Dice(6)
    println("Your ${myFirstDice.numSides} sided dice rolled ${myFirstDice.roll()}!")
    
    val mySecondDice = Dice(20)
    println("Your ${mySecondDice.numSides} sided dice rolled ${mySecondDice.roll()}!")
    
    val myCoin = Coin(2)
    println("Your ${myCoin.numSides} coin flipped ${myCoin.flip()}")
}

class Dice(val numSides: Int) {
    fun roll(): Int {
        return (1..numSides).random()
    }
}

// 将Coin类移到Dice外部,成为顶层类
class Coin(val numSides: Int) {
    // 这里把方法名改成flip更贴合硬币的场景,当然继续用roll也没问题
    fun flip(): Int {
        return (1..numSides).random()
    }
}

额外优化建议

如果想让代码更优雅,其实可以考虑用接口来统一Dice和Coin的行为,比如定义一个Rollable接口,让两者都实现它:

interface Rollable {
    fun roll(): Int
}

class Dice(val numSides: Int) : Rollable {
    override fun roll(): Int {
        return (1..numSides).random()
    }
}

class Coin : Rollable {
    // 硬币只有正反两面,不需要传入numSides,直接固定为2
    override fun roll(): Int {
        return (1..2).random()
    }
}

这样代码的扩展性更好,后续如果要加其他可投掷的物品(比如骰子、卡牌),都可以实现这个接口~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:12:55