有人可以解释为什么此代码会导致以下错误
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'));
}
}
答案 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循环替换,因为你现在是字符串的长度)。