0

端末を介してOS XでJavaを学習しています。以下のコードをコンパイルするとエラーは発生しませんが、実行しようとするとエラーが発生します

スレッド「メイン」での例外 java.lang.NoSuchMethodError: メイン

私のコード:

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;
    }
}
}

checkMod メソッドを呼び出しているため、main メソッドから "static" を削除しました。

これを正しくコーディングするにはどうすればよいですか?

ありがとう

4

7 に答える 7

5

すべての実行可能な Java プログラムには、実行するために実装するクラスが少なくとも 1 つ必要public static void main(String args[])です。

staticから参照を削除するのではなくmain

iestaticに追加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...
}
于 2012-08-16T06:01:58.823 に答える
1

staticmain メソッドには必須です。次のようなものを使用して、メインの実行に状態を追加できます。

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 に答える
1

主な必要性static:public static void main(String[] args)

于 2012-08-16T05:59:21.813 に答える
1

「エントリポイント」メソッドは、メインではなく静的メインです。それらは異なるメソッド シグネチャを持っています。JVM は static main のみを検索します。あなたはあなたの

public boolean checkMod(int in)

なので

static public boolean checkMod(int in)
于 2012-08-16T06:00:01.097 に答える
0

メイン メソッドは常に として宣言する必要があります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 に答える
0

main と checkMod の両方で「static」を宣言する必要があります。

于 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 に答える