3

写一个类来封装圆的概念,假设圆有以下属性:一个Point表示圆的中心,圆的半径是一个整数。包括构造函数、访问器和修改器,以及 toString 和 equals 方法。还包括返回圆的周长 (2*PI*radius) 和面积 (PI*radius^2) 的方法。

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 类中?我试了一下,里面的每一行都有一个错误,说 Circle 没有返回类型。任何洞察力都将是一种回报。再次感谢各位。

4

4 回答 4

2

这里有一些代码,一个圆是一个点的扩展,向它添加一个半径

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
}
于 2012-04-12T15:01:35.167 回答
2

您正在谈论在单个类中具有多个对象的构造函数。那是做不到的。Java 认为这public point()是一个没有返回类型的方法,因此在语法上是不正确的。

你不需要为了点而上课。Java 已经提供java.awt.Point了。Point只需为您的班级添加一个班级级别字段,Circle您就可以了。

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;
    }
}
于 2012-04-12T14:59:11.317 回答
1

我会这样做

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 + "]";
    }
}
于 2012-04-12T15:09:19.470 回答
0

您在构造函数中调用超级构造函数:

super(x, y, c); 
于 2012-04-12T14:58:24.047 回答