以下是错误消息
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);
答案 0 :(得分:1)
你的英雄方法应该是
static double hero(double n1, double n2, double n3){...}
答案 1 :(得分: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
答案 2 :(得分:1)
您的方法hero
不是静态的。这意味着您只能在类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
。
答案 3 :(得分: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);
答案 4 :(得分:0)
您收到该错误是因为您尝试访问MyMath.hero
,就好像它是static
方法一样。要解决此问题,您必须将方法hero
声明为static
,或者首先创建类型为MyMath
的对象,然后从该对象调用该方法。
答案 5 :(得分:0)
main方法是static,java不允许在静态方法中引用非静态obj。 所以你应该使hero()方法也是静态的,或者从非静态方法引用它。