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 方法应为

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 回答
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 回答
0

main 方法是静态的,java 不允许在静态方法中引用非静态 obj。因此,您应该将 hero() 方法设为静态或从非静态方法引用它。

于 2012-04-18T06:37:54.763 回答
0

您会收到该错误,因为您尝试像访问方法MyMath.hero一样访问它static。为了解决这个问题,您必须将该方法声明herostatic或首先创建一个类型的对象MyMath并从该对象调用该方法。

于 2012-04-18T06:36:22.300 回答