2014-12-21 3 views
-3

사용자 입력을 읽고 저장 한 다음 다각형 영역을 계산하는 프로그램을 만들려고합니다.
시도해보고 컴파일하면 오류 느릅 나무는 .toSting 당신은 그 방법에 대해 정의 (단지로 의미가) 된 클래스의 메소드를 호출하려고하는 비 정적non-Static 메서드 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 생성자를 실제로 으로 저장하십시오 (0으로 설정하지 않고)을 초기 값으로 저장하십시오.

... 그리고, 가장 중요한 ...

4) 귀하의 주요 RegularPo regularPo = new RegularPo (...)를 호출해야합니다. 그런 다음 객체 인스턴스 "regularPo"를 참조하십시오.

+0

안녕하세요! 도움을 주셔서 감사합니다. 제가 이해하지 못하는 것은 포인트 4입니다 ... 내 메인 클래스 (regularpoTest 맞습니까?)에 넣어야합니다. 당신이 쓴 것은 무엇입니까? 그러나 레퍼런스 인 인스턴스 regularPo는 무엇을 의미합니까? 나와 함께 곰이 시작되었습니다.) –

0

봅니다 클래스 regularpo의 객체를 만드는 등 (Regularpo

0

toString로 클래스의 이름을, 그 객체 클래스 이름은 대문자로 시작해야합니다 규칙에 따라 또한

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

이상 toString를 호출)는 regularpro 클래스에서 정적이 아닌 메소드이며 정적이 아닌 클래스가 객체에 속해 있으므로 동일한 클래스를 만들고 객체화해야합니다.

toString()은 Object 클래스에 속해 있으므로 비 정적 메서드입니다.

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

관련 문제