0

次のコードを実装しようとしていますが、非静的メソッドへの静的参照で問題が発生しています。

public class App {
  public static void main (String args[]) { 
    int result = factorial(5);
    System.out.println(result);
  }

  private int factorial(int value) {

    if (value == 0) 
      return 1;
    int sum = value * factorial(value-1);
    return sum;

  } 
}

上記のコードを実行すると、次のエラーが表示されます。

Error: Cannot make a static reference to the non-static method factorial() from the type App

メイン メソッドから static キーワードを削除すると、NullPointerException エラー スタックが発生します。

java.lang.NullPointerException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at 
edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

この問題を回避する方法がよくわかりません。助けていただければ幸いです。

編集: factorial メソッドを呼び出すときにパラメーターを含めるのを忘れていました。現在は修正されています。申し訳ありません。

4

8 に答える 8

1

static main既存のメソッドが存在する必要があります。検索され、見つからない場合は、エラーが表示されます。

factorial静的メソッドを作成することで、特定の問題を解決できます。

于 2013-04-25T06:03:05.247 に答える
1

あなたが呼び出しfactorialています - インスタンスメンバーは静的メソッドmainを形成するため、エラーが発生します。factorialこれを解決するために静的メソッドとして宣言できます。

public class App {
    public static void main(String args[]) {
        int result = factorial(5); // you need to pass a int value here
        System.out.println(result);
    }

    private static int factorial(int value) {
        if (value == 0)
            return 1;
        return value * factorial(value - 1);

    }
}
于 2013-04-25T06:03:33.813 に答える
1

静的メソッドから非静的メソッドを呼び出すには、非静的メソッドを含むクラスのオブジェクトを作成します。定義上、非静的メソッドはクラスのオブジェクトでのみ呼び出すことができますが、静的メソッドはクラス自体で呼び出すことができます。

于 2013-04-25T06:08:29.373 に答える
0

static メソッド内の通常のメソッドにはアクセスできません。

インスタンス メソッドは型の特定のインスタンスに関連付けられますが、静的メソッドは型全体に関連付けられます。

試す

 private static int factorial(int value) {

-----------

}
于 2013-04-25T06:03:53.130 に答える
0

エラーが明確に示しているように、静的メソッド内の非静的メソッドにアクセスすることはできません。このコードを機能させるにはfactorial、以下のように定義を変更してください。

private static int factorial(int value) {
  //remaining code
}
于 2013-04-25T06:03:58.350 に答える