类中的方法不能应用于给定类型的错误

时间:2014-02-05 11:45:14

标签: java methods constructor default override

// CentredBall class:
  2 //   Class attribute: quantity - number of balls created
  3 //   Instance attributes: colour, radius, centre
  4 import java.awt.*;
  5 
  6 class CentredBall {
  7 
  8     /************** Data members **********************/
  9     private static int quantity = 0;
 10 
 11     private String colour;
 12     private double radius;
 13     private Point  centre;
 14     private int xCoord, yCoord;
 15 
 16     /************** Constructors **********************/
 17     //  Default constructor creates a yellow, radius 10.0 ball centred at origin (0,0)
 18     public CentredBall()    {
 19         this.colour = "yellow";
 20         this.radius = 10.0;
 21     }   
 22     
 23     public CentredBall(String colour, double radius, Point centre)  {
 24         setColour(colour);
 25         setRadius(radius);
 26         setCentre(xCoord, yCoord);
 27         quantity++;
 28     }   
 29     
 30     public CentredBall(String colour, double radius, int xCoord, int yCoord)    {
 31         setColour(colour);
 32         setRadius(radius);
 33         setxCoord(xCoord);
 34         setyCoord(yCoord);
 35         quantity++;
 36     }   
 37     
 38     /**************** Accessors ***********************/
 39     public static int getQuantity() {
 40         return quantity;
 41     }   
 42     public String getColour()   {
 43         return this.colour;
 44     }   
 45     public double getRadius()   {
 46         return this.radius;
 47     }
 48     public Point getCentre()    {
 49         return this.centre;
 50     }
 51     public int getxCoord()  {
 52         return this.xCoord;
 53     }
 54     public int getyCoord()  {
 55         return this.yCoord;
 56     }
 57 
 58     /**************** Mutators ************************/
 59     public void setColour(String colour)    {
 60         this.colour = colour;
 61     }
 62     public void setRadius(double radius)    {
 63         this.radius = radius;
 64     }
 65     public void setCentre(Point centre) {
 66         this.centre = centre;
 67     }
 68     public void setxCoord(int xCoord)   {
 69         this.xCoord = xCoord;
 70     }
 71     public void setyCoord(int yCoord)   {
 72         this.yCoord = yCoord;
 73     }
 74 
 75     /***************** Overriding methods ******************/
 76     // Overriding toString() method
 77     public String toString() {
 78         return "[" + getColour() + ", " + getRadius() + ", " + getxCoord() + ", " + getyCoord() + "]";
 79     }
 80 
 81     // Overriding equals() method
 82     public boolean equals(Object obj) {
 83         if  (obj instanceof CentredBall)    {
 84             CentredBall ball = (CentredBall) obj;
 85             return  this.getColour().equals(ball.getColour()) &&
 86                     this.getRadius() == ball.getRadius() &&
 87                     this.getxCoord() == ball.getxCoord() &&
 88                     this.getyCoord() == ball.getyCoord();
 89         }
 90         else
 91             return false;
 92     }

我一直收到此错误

CentredBall.java:26: error: method setCentre in class CentredBall cannot be applied to given types;
            setCentre(xCoord, yCoord);
            ^
required: Point
found: int,int
reason: actual and formal argument lists differ in length
1 error

我有几个问题。请帮助。

  1. 为什么默认构造函数在原点没有中心参数?我试过这个(“黄色”,10.0,(0,0));但它不起作用

  2. 覆盖方法的用途是什么?我创建的toStringequals覆盖方法是否有任何错误?

3 个答案:

答案 0 :(得分:1)

使用参数中的Point centre或创建一个新的点Point p = new Point(xCoord, yCoord)

答案 1 :(得分:0)

您收到错误是因为setCentre()方法需要Point而不是2 ints:

setCentre(new Point(xCoord, yCoord));

也适用于:

1.你为什么不为原点添加另一个构造函数:

public CentredBall(String colour, double radius) {
setCentre(0,0);

2.你写过这个,但你不知道为什么写这个?您可以覆盖它们,使它们按照您希望的方式运行对象。

答案 2 :(得分:0)

您正在尝试传递xCoord,yCoord来代替Point类型的参数。而是通过

new Point(xCoord, yCoord)

这构造了该方法可以处理的Point对象。