0

これがエラーメッセージです

non static method hero(double,double,double) cannot be reference from a static context

これがクラスメソッドです。

class MyMath {
  double hero(double n1, double n2, double n3)
  {
    double n4;
    double n5;
    n4 = (n1 + n2 + n3) / 2;
    n5 = Math.sqrt((n4 * (n4 - n1) * (n4 - n2) * (n4 - n3)));
    return n5;
  }
}

これがメインプログラムです

double length_of_a;
double length_of_b;
double length_of_c;
double area_of_triangle;

area_of_triangle = (double) MyMath.hero(length_of_a,length_of_b,length_of_c);
4

6 に答える 6

1

hero()メソッドが静的に設定されていません。hero()次のような静的メソッドを作成できます。

static double hero(double n1, double n2, double n3)
{
    ...

または、次のようにMyMathの新しいインスタンスを作成できます。

MyMath newMath = new MyMath();

次に、次のように呼び出します。

newMyMath.hero(length_of_a,length_of_b,length_of_c);
于 2012-04-18T06:36:46.213 に答える
1

あなたのヒーローメソッドは次のように置く必要があります

static double hero(double n1, double n2, double n3){...}
于 2012-04-18T06:34:56.437 に答える
1

heroクラス名を使用してメソッドを呼び出す場合は、 にしstaticます。それ以外の場合は、オブジェクトを作成しMyMathて関数を呼び出します。

MyMath m = new MyMath();
area_of_triangle = m.hero(length_of_a,length_of_b,length_of_c); //No need to typecast too
于 2012-04-18T06:35:19.647 に答える
1

あなたのメソッドheroは静的ではありません。つまり、 class のインスタンスでのみ呼び出すことができますMyMath。ここで静的メソッドであるかのように呼び出そうとしています:

area_of_triangle = (double) MyMath.hero(length_of_a,length_of_b,length_of_c);

heroメソッドを作成するかstatic、 のインスタンスを作成しMyMathてメソッドを呼び出します。

// Solution 1: Make hero static
class MyMath {
    static double hero(double n1, double n2, double n3)
        // ...

// Solution 2: Call hero on an instance of MyMath
MyMath m = new MyMath();

area_of_triangle = m.hero(length_of_a,length_of_b,length_of_c);

注: メソッドの結果を にキャストするdouble必要はありません。メソッドは既に を返しますdouble

于 2012-04-18T06:36:25.403 に答える
0

mainメソッドは静的であり、javaは静的メソッドで非静的objの参照を持つことを許可しません。したがって、hero()メソッドも静的にするか、非静的メソッドから参照する必要があります。

于 2012-04-18T06:37:54.763 に答える
0

MyMath.heroメソッドであるかのようにアクセスしようとするため、このエラーが発生しますstatic。これを修正するには、メソッドheroを として宣言するかstatic、最初にタイプのオブジェクトを作成して、MyMathそのオブジェクトからメソッドを呼び出す必要があります。

于 2012-04-18T06:36:22.300 に答える