2012-04-12 3 views
2

원이 원의 중심을 나타내는 점과 원의 반경 인 정수를 원으로 가정하고 원의 개념을 캡슐화하는 클래스를 작성하십시오. 생성자, 접근 자 및 변경자 및 toString 및 equals 메소드를 포함하십시오. 또한 원의 둘레 (2 * PI * 반지름)와 면적 (PI * 반지름^2)을 반환하는 메소드가 포함됩니다. 내가 여기까지 얻을 수점 센터가있는 Java로 원 클래스 만들기?

import java.awt.*; 


public class Circle { 

    private int radius; 

    public Circle() { 

     radius = 1; 
    } 

    public Circle(int x, int y, int r) { 
     super(x, y, c); 
     radius = r; 
    } 

    public int getRadius() { 
     return radius; 
    } 

    public double getArea() { 
     return Math.PI * radius * radius; 
    } 

    public double getPerimeter() { 
     return 2 * Math.PI * radius; 
    } 
} 

은, 난 그냥 내 클래스에 추가 점 생성자, 접근 및 뮤 테이터에 조금 혼란 스러워요.

이렇게 표시 되나요?

protected int x, y; 

    public point() { 

     setPoint(0,0); 

    } 

    public point(int coordx, int coordy) { 
     setPoint(coordx,coordy); 
    } 

    public void setPoint(int coordx, int coordy) { 
     x = coordx; 
     y = coordy; 
    } 
    public int getX() { 
     return x; 
    } 

    public int getY() { 
     return y; 
    } 

    public String toPrint() { 
     return "[" + x + "," + y + "]"; 
    } 

    } 

두 클래스를 1 클래스로 결합 할 수 있습니까? 나는 그것을 시도하고 그것에있는 모든 라인 서클은 반환 유형이 없다고 오류가 발생했습니다. 모든 통찰력은 반환 할 수있는 호의가 될 것입니다. 다시 한번 감사드립니다.

+0

원에는 원의 중심을 나타내는 점과 원의 반경 인 정수가 있습니다. 그렇다면 ** Circle ** 클래스의 ** Point ** 선언은 어디에 있습니까? – sarwar026

+0

정확하게 기억한다면, 점은 반지름이 0으로 고정 된 원의 수퍼 클래스로 볼 수 있습니다. 따라서 Point 클래스를 작성한 다음 Circle 클래스를 파생시킵니다. – BigMike

+0

@BigMike Point가 Circle의 수퍼 클래스 인 경우 반지름을 갖습니까? IMHO 아니오. 제 생각에는 두 점 사이에 공통점이 거의 없다고 생각합니다. "길이가 0 인 반지름은 원입니다"... – Betlista

답변

0

당신은 생성자 내부에 슈퍼 생성자를 호출 : 당신은 하나의 클래스에 여러 개체에 대한 생성자를하는 것에 대한 얘기

super(x, y, c); 
2

. 그것은 할 수 없습니다. Java는 public point()이 리턴 유형이 없으므로 구문 적으로 올바르지 않다고 생각합니다.

포인트 용 클래스를 만들 필요는 없습니다. Java는 java.awt.Point을 이미 제공합니다. Circle 클래스에 Point의 클래스 수준 필드를 추가하면됩니다.

Circle는 다음과 같이 보일 것이다 : 약속대로

다음
public class Circle { 

    private int radius; 
    private Point point; 

    public Circle() { 
     point = new Point(0, 0); 
     radius = 1; 
    } 

    public Circle(int x, int y, int r) { 
     point = new Point(x, y); 
     radius = r; 
    } 

    public int getRadius() { 
     return radius; 
    } 

    public double getArea() { 
     return Math.PI * radius * radius; 
    } 

    public double getPerimeter() { 
     return 2 * Math.PI * radius; 
    } 
} 
+0

아아 잡았다. 그래서 하나의 클래스. 그렇다면 서클 클래스에서 (0,0) 점을 어떻게 설정합니까? 내가 GUI를 사용하고 서클을 그리지 않는 한 이런 식으로 된 것을 본 적이 없다. – user1316703

+0

방금 ​​내 대답을 편집하여 어떻게하는지 보여 줬습니다. –

+0

오 와우 그게 뭐야? 고맙습니다. – user1316703

1

일부 코드가 서클이

public class Point { 
    public Point(int x, int y) { 
     // .. set x and Y coord 
    } 

    // Getters and Setters 
    public int getX() { 
     return x; 
    } 

    public int getY() { 
     return y; 
    } 

    public String toPrint() { 
     return "[" + x + "," + y + "]"; 
    } 
    // Your other Point methods... 


    private int x = 0; 
    private int y = 0; 
} 


public class Circle extends Point { 
    int rad; 

    public Circle (int x, int y, int radius) { 
    super(x, y); 
    rad = radius; 
    } 
    // Your other Circle methods 
} 

에 반경을 추가 한 점의 확장 : 아니오 또 다른 방법 확장자는 다음과 같습니다.

class Point { 
    int x; 
    int y; 

    public Point (int x, int y) { 
    this.x = x; 
    this.y = y; 
    } 
    // Getter/Setters and other methods 
} 


public class Circle { 

    Point centre = null; 
    int radius = 0; 

    public Circle(int x, int y, int rad) { 
     centre = new Point(x, y); 
     radius = rad; 
    } 
    // Your other Circle methods 
} 
+0

아, 훨씬 의미가 있습니다. 고맙습니다. 서클에서 콜 포인트, 그리고 그 이상을 수행하십시오. 나는 그것을 1 달러 감사한다. – user1316703

+0

@ user1316703 간단한 Point 데이터 멤버를 가진 Cirlce 클래스를 사용하면 매우 똑같이 수행 할 수 있습니다. 두 가지 방법 모두 좋습니다. 다른 방법으로 추가합니다. – BigMike

+1

No - circle은 점이 아니므로 점 클래스를 확장해서는 안됩니다. 컴포지션을 대신 사용하십시오. – scibuff

0

이렇게하면

import java.awt.Point; 

public class Circle { 

    private Point center; 
    private int radius; 

    public Circle(){ 
     this(new Point(0, 0)); 
    } 

    public Circle(int x, int y, int radius){ 
     this(new Point(x, y), radius); 
    } 

    public Circle(Point center){ 
     this(center, 1); 
    } 

    public Circle(Point center, int radius){ 
     this.setCenter(center); 
     this.radius = radius; 
    } 

    public int getRadius(){ return this.radius; } 
    public Point getCenter(){ return this.center; } 

    public double getPerimeter(){ return 2 * Math.PI * this.radius; } 
    public double getArea(){ return Math.PI * this.radius * this.radius; } 

    public void setCenter(int x, int y){ 
     this.setCenter(new Point(x, y)); 
    } 

    public void setCenter(Point center){ 
     this.center = center; 
    } 

    public boolean equals(Object o){ 

     if (o == this){ return true; } 
     if (o == null || o.getClass() != this.getClass()){ return false; } 

     Circle c = (Circle) o; 
     return (o.radius == this.radius && o.center.equals(this.center)); 
    } 

    public string toString(){ 
     return "Circle[" + this.center.toString() + ", " + this.radius + "]"; 
    } 
} 
+0

Mind = blown. 나는 하하를 해석하기가 조금 어렵다. 나는 네가 나에게 보여주고 자하는 것을 얻는다고 생각한다. – user1316703

+0

그다지 많지 않습니다 ... 위의 코드는 메소드 오버로딩을 사용합니다 - 올바른 생성자가 제공된 인수를 기반으로 호출됩니다 - 장점은 코드 중복을 최소화합니다. 즉 관련 init 코드가 생성자 중 하나에 있음 다른 사람들은 그것을 부른다. – scibuff