Java NoSuchMethodError:main

时间:2012-08-16 05:56:28

标签: java macos

我正在通过终端在OS X上学习Java。当我编译下面的代码时,我没有得到任何错误,但当我尝试运行它时,我得到了

  

线程“main”中的异常java.lang.NoSuchMethodError:main

我的代码:

public class Problem5{
public void main(String[] args) {
    int n = 1;
    while(!checkMod(n)){
        n++;
    }

}
public boolean checkMod(int in)
{
    int count = 0;
    for(int i=1; i<20; i++)
    {
        if(in%i == 0)
        {
            count = count + 1; 
        }
    }
    if(count ==19)
    {
        return true;
    }
    else{
        return false;
    }
}
}

我从main方法中删除了“static”,因为我正在调用checkMod方法。

如何正确编码?

由于

7 个答案:

答案 0 :(得分:5)

每个可执行Java程序至少需要一个实现public static void main(String args[])的类才能运行。

而不是从static移除main引用,

static添加到public boolean checkMod(int in),即public static boolean checkMod(int in)

从实例级别调用方法checkMod

public class Problem5{
    public void main(String[] args) {
        new Problem5();
    }

    public Problem5() {
        int n = 1;
        while(!checkMod(n)){
            n++;
        }

    }

    // Rest of code...
}

答案 1 :(得分:1)

主要需要staticpublic static void main(String[] args)

答案 2 :(得分:1)

“入口点”方法是静态main而不是main。他们有不同的方法签名。 JVM只搜索静态main。 你可以做你的

public boolean checkMod(int in)

as

static public boolean checkMod(int in)

答案 3 :(得分:1)

main方法需要

static。您可以使用类似的东西将状态添加到主执行中:

public class Problem5 {
  public static void main(String[] args) {
    new Problem5().start();
  }

  private void start() {
    int n = 1;
    while(!checkMod(n)){
      n++;
    }
  }

  private boolean checkMod(int in) {
    ..
  }
}

另一方面,您的checkMod(int)方法不需要状态。您也可以只添加static关键字。然后可以通过静态main方法调用它。

答案 4 :(得分:0)

你需要在main和checkMod上声明'static'。

答案 5 :(得分:0)

你需要使checkMod静态,因为你是从另一个静态方法调用它。您无法从静态方法调用实例方法:

public class Problem5{
public static void main(String[] args) {
    int n = 1;
    while(!checkMod(n)){
        n++;
    }

}
public static boolean checkMod(int in)
{
    int count = 0;
    for(int i=1; i<20; i++)
    {
        if(in%i == 0)
        {
            count = count + 1; 
        }
    }
    if(count ==19)
    {
        return true;
    }
    else{
        return false;
    }
}
}

答案 6 :(得分:0)

主要方法应始终声明为static。您也在主方法中访问checkMod,因此要么将checkMod声明为static,要么使用对象访问它,因为您无法从静态方法访问非静态方法。

尝试以下操作。

public class Problem5{
public static void main(String[] args) {
    int n = 1;
    while(!new Problem5().checkMod(n)){
        n++;
    }

}
public boolean checkMod(int in)
{
    int count = 0;
    for(int i=1; i<20; i++)
    {
        if(in%i == 0)
        {
            count = count + 1;
        }
    }
    if(count ==19)
    {
        return true;
    }
    else{
        return false;
    }
}
}