0

我正在通过终端在 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 方法中删除了“静态”,因为我正在调用 checkMod 方法。

我该如何正确编码?

谢谢

4

7 回答 7

5

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

而不是从中删除static引用main

添加staticpublic boolean checkMod(int in)iepublic 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...
}
于 2012-08-16T06:01:58.823 回答
1

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

于 2012-08-16T05:59:21.813 回答
1

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

public boolean checkMod(int in)

作为

static public boolean checkMod(int in)
于 2012-08-16T06:00:01.097 回答
1

static是 main 方法所必需的。你可以使用这样的东西来为你的主执行添加状态:

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 方法调用它。

于 2012-08-16T06:02:25.000 回答
0

您需要在 main 和 checkMod 上声明“静态”。

于 2012-08-16T05:59:56.670 回答
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;
    }
}
}
于 2012-08-16T06:01:16.113 回答
0

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

尝试跟随。

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;
    }
}
}
于 2012-08-16T06:03:53.767 回答