字符数Java程序提供了java.lang.nosuch方法

时间:2014-03-28 13:09:12

标签: java

有人可以解释为什么此代码会导致以下错误

Exception in thread "main" java.lang.NoSuchMethodError: main


class count_chars {

    int countit(String word, char ch) {
        int count = 0;
        int index = 0;
        while (index < word.length()) {
            if (word.charAt(index) == ch) {
                count = count + 1;
            }
            index = index + 1;
            return count;
        }
        return count;
    }

    public void main(String argv[]) {
        count_chars count = new count_chars();
        System.out.println("shit");
        System.out.println(countit("hello", 'o'));
    }
}

2 个答案:

答案 0 :(得分:1)

首先,你的主要方法应该是静态的,如:

public static void main(String args[]){
}

更正您的代码:

public class CountChars {

    public int countit(String word, char ch) {
        int count = 0;
        int index = 0;
        while (index < word.length()) {
            if (word.charAt(index) == ch) {
               count = count + 1; 
            }
            index = index + 1;
            return count;
        }
        return count;
    }

    public static void main(String args[]) {
        CountChars count = new CountChars();
        System.out.println(count.countit("hello", 'o'));
    }
}

如果要在不实例化该类的对象的情况下引用类中的方法,则该方法必须是静态的。因此,如果要在main方法中调用方法countit(),则应将该方法设为静态:

public static int countit(...){}

答案 1 :(得分:0)

public static int countit(String word, char ch) {
    int count = 0;
    int index = 0;
    while (index < word.length()) {
        if (word.charAt(index) == ch) {
            count = count + 1;
        }

        index = index + 1;
    }
    return count;
}

public static void main(String argv[]) {

    System.out.println("shit");
    System.out.println(countit("hello", 'e'));
}

您的主要方法必须是静态的,否则您的程序甚至无法启动。此外,如果您将countit方法声明为静态,则可以从main方法访问它,而无需创建新对象。

你的countit中的逻辑也是错误的,如果它应该计算字符串中char的外观。在你的版本中,它将返回0或1,因为你的while循环内部返回(可以用for循环替换,因为你现在是字符串的长度)。