我正在通过终端在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方法。
如何正确编码?
由于
答案 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)
主要需要static
:public 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)
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;
}
}
}