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

Groovy静态main调用实例方法报MissingMethodException问题求助

问题原因及修复方案

1. 直接触发报错的核心原因

你定义的getWordsFromNumber是类的实例方法,而main是静态方法,静态方法属于类本身,无法直接访问类的实例成员。你直接在main里调用getWordsFromNumber(yourNumber)时,Groovy会默认查找该类的静态同名方法,找不到就会抛出你遇到的MissingMethodException异常。

修复该报错只需要先实例化MyClass对象,再通过实例调用方法即可:

public static void main(String[] args) {
    int yourNumber = 120
    // 先实例化类对象
    def myClass = new MyClass()
    def result = myClass.getWordsFromNumber(yourNumber)
    println result
}

2. 代码存在的其他逻辑问题

修复上述报错后,代码依然无法得到预期结果,还有两处逻辑问题需要调整:

  • 循环逻辑错误:for (i in numDigits)写法不符合需求,numDigits是数字的位数(比如120的位数是3),你需要遍历的是数字的每一位,而非循环位数这个数值本身;且你当前每次给setNumberToWord传参是完整的数字,不是每一位的单独数值。
  • 字符串截取逻辑错误:你拼接的字符串末尾是-,只截掉1位会残留多余的短横和空格,需要截掉最后3位。

3. 完整修复后的参考代码

class MyClass {
    String numberString

    String setNumberToWord(int number) {
        switch (number) {
            case 0:
                numberString = "zero"
                break
            case 1:
                numberString = "jeden"
                break
            case 2:
                numberString = "dwa"
                break
            case 3:
                numberString = "trzy"
                break
            case 4:
                numberString = "cztery"
                break
            case 5:
                numberString = "pięć"
                break
            case 6:
                numberString = "sześć"
                break
            case 7:
                numberString = "siedem"
                break
            case 8:
                numberString = "osiem"
                break
            case 9:
                numberString = "dziewięć"
                break
        }
    }

    String getWordsFromNumber(int number) {
        // 转换为字符数组遍历每一位数字
        def digits = number.toString().chars
        String result = ""
        for (char c : digits) {
            // 字符转数字值
            int digit = Integer.parseInt(c.toString())
            setNumberToWord(digit)
            result = result + "$numberString - "
        }
        // 截掉末尾多余的" - "
        result = result.substring(0, result.length() - 3);
        return result
    }

    public static void main(String[] args) {
        int yourNumber = 120
        def myClass = new MyClass()
        println myClass.getWordsFromNumber(yourNumber)
    }
}

运行后输出结果为:jeden - dwa - zero,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:06:03