2012-04-18 2 views
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

Возможный дубликат [Java - статическая ссылка на нестатический список полей] (http://stackoverflow.com/questions/10200740/java-making-a-static-reference-to-the-non- static-field-list) – Perception

ответ

1

Ваш метод герой должен поставить в

static double hero(double n1, double n2, double n3){...} 
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 
0

Вы получаете эту ошибку, потому что вы пытаетесь получить доступ к MyMath.hero, как если бы это был static метод. Чтобы исправить это, вы должны либо объявить метод hero, либо static, либо сначала создать объект типа MyMath и вызвать метод из этого объекта.

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.

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); 
+0

Спасибо, Karthik. В – Hrfpkj

0

Основной метод является статическим, а java не позволяет ссылаться на нестатический объект obj в статическом методе. Итак, вы должны либо сделать метод hero() статическим, либо ссылаться на него нестатический.

Смежные вопросы