2014-12-21 2 views
-3

Я пытаюсь создать программу, которая читает ввод пользователя и сохраняет его, а затем вычисляет площадь многоугольника
Когда я пытаюсь скомпилировать его, он дает мне один ошибка которым является один о .toSting не являясь статическогоНестатический метод toString не может ссылаться из статического контекста

import java.util.Scanner; 

class regularpoTest { 
    public static void main(String[] args) { 

     Scanner in = new Scanner(System.in); 
     boolean finished = false; 
     double s; 
     double n; 
     double area; 
     //starts loop to record data 
     do { 
      s =0; 
      n =0; 


      System.out.println("Enter the side length, or anything else to quit: "); 
      s = in.nextDouble(); 
      in.nextLine(); 
      if (in.hasNextDouble()) { 
       System.out.println("Enter number of sides"); 
       n = in.nextDouble(); 
       area = (s*s*n)/(4*Math.tan(Math.PI/n)); 
      } else { 
       finished = true; 

      } 
     } while(!finished); 

     //This prints out the student details 

     System.out.println(regularpo.toString()); 

    } 
} 

public class regularpo { 

    private double side; 
    private double numberOf; 
    private double area; 

    public regularpo(double side, double numberOf){ 
     side = 0; 
     numberOf = 0; 
     area = 0; 
    } 

    public double getSide(){ 
     return side; 
    } 
    public double getNumberOf(){ 
     return numberOf; 
    } 
    public String toString(){ 
     return ("area = " + area+ " side length "+side+ " number of sides "+numberOf); 
    } 
} 
+1

Вам не хватает экземпляра regularpo. – Eric

+2

По названиям классов классов начинаются с заглавной буквы. –

+1

'System.out.println (regularpo.toString());' Очевидно, 'regularpo' - это имя класса, а не ссылка на объект. 'toString' - это метод экземпляра, то есть вы должны указать * экземпляр *' regularpo', чтобы использовать его. И вы, кажется, не создаете экземпляр 'regularpo' в любом месте, поэтому больше нечего использовать. –

ответ

1

Вы пытаетесь вызвать метод класса, когда этот метод был определен для (и имеет смысл только в качестве) метод экземпляра этого класса. Возможно, вы хотите создать объект этого класса и вызвать его метод toString, хотя я не могу быть уверен в вашем коде.

1

Вы не можете получить доступ к нестационарным методам, используя classname.nonStaticMethodName. Вам необходимо создать экземпляр объекта, используя ключевое слово new. В принципе, вы создаете экземпляр своего объекта по regularpo r = new regularpo(2.0, 2.0). После этого вы можете позвонить r.toString();

Проверьте это SO-question для получения дополнительной информации.

И это Oracle-tutorial объясняет класс хорошо.

1

Предложения:

1) Ликвидация "regularpoTest". Просто переместите «main()» в «regularpo».

2) Заглавие «RegularPo» (по соглашению имена классов должны начинаться с прописной буквы).

3) Сделать конструктор RegularPo фактически сохранить начальные значения (а не просто установить их на ноль).

... и, самое главное ...

4) Ваш главный должен вызвать RegularPo regularPo = new RegularPo (...). Затем экземпляр экземпляра объекта "regularPo".

+0

привет! спасибо за помощь, единственное, что я не понимаю, это пункт 4 ... я должен поместить в свой основной класс (regularpoTest правильно?) То, что вы написали, но что вы имеете в виду со ссылкой на экземпляр regularPo? медведь со мной только начал со всего этого;) –

0

Попробуйте создать объект класса regularpo и вызвать toString над этим объектом

regularpo obj=new regularpo(); 
obj.toString(); 

Также согласно конвенции имя класса должно начинаться с заглавной, так называют свой класс как Regularpo

0

ToString () является нестационарным методом в классе regularpro, и мы знаем, что нестатический принадлежит объекту, поэтому нам нужно создать и объект одного класса и вызвать его.

toString() относится к классу Object, поэтому его нестационарный метод.

правильныйpo obj = новый правильныйpo(); obj.toString();

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