2015-10-03 18 views
-7

創建具有兩個私有成員的類Point:int x和int y,表示點的座標。類點有兩個構造函數:使用類點類圓的程序java

  1. 點()指派零以變量x和y,和值x和y分配給變量this.x和這個
  2. 點(INT的x,int y)對。 y,分別。

此外,編寫一個成員方法public void move(int x,int y)將值x和y分配給私有成員並覆蓋方法public String toString()返回Point(x + 「+ y)。

創建類有兩個私有成員的圓:int radius和Point center。寫入以下counstructors:

  1. 圈() - 假定默認半徑爲1且中心(0,0)
  2. 圈(INT半徑) - 指派整數半徑this.radius(在0中心, 0)
  3. Circle(點中心) - 將點中心分配給this.center(半徑1)
  4. Circle(int radius,Point center) - 將整數半徑指定給this.radius,並將中心指定給this.center

另外,寫下面的我MBER方法:

  1. 雙區() - 其計算圓的面積
  2. 雙圓周() - 其計算的圓的周長
  3. 字符串的ToString() - 它返回圓的半徑和中心的字符串表示。

編寫一個驅動類Lab2.java,它實例化幾個Point和Circle類型的對象(至少4個,使用4個不同的構造函數)並測試所有的成員方法。

class Point { 

    private int x; 
    private int y; 

    public Point(){ 
     x = y = 0; 
    } 

    public Point(int x, int y){ 
     this.x = x; 
     this.y = y; 
    } 

    public void move (int x, int y){ 
     this.x = x; 
     this.y = y; 
    } 

    public String toString(){ 
     String s = "x: " + x + "y: " + y; 
     return s; 
    } 
} 

class Circle{ 
    private int radius; 
    private Point center; 

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

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

    public Circle(Point center){ 
     Point center = this.center(radius (1)); 
    } 

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

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

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

    String toString(){ 
     String s = "radius: " + radius + "center: " + center; 
     return s; 
    } 
} 

class Lab21{ 
    public static void main(String[] args){ 
     Circle c = new Circle(); 
     System.out.println(c); 
     c.move(4,2); 
     System.out.println(c); 
     c.resize(5,2); 
     System.out.println(c); 

     point center = new Point(3,3); 
     Circle s = new Circle (6, 1, center); 
     System.out.println(s); 
    } 
} 

這是目前我得到的錯誤:

Lab21.java:37: error: variable radius is already defined in constructor Circle(int) 
    int radius = this.radius(center(0,0)); 
     ^
Lab21.java:37: error: cannot find symbol 
    int radius = this.radius(center(0,0)); 
          ^
    symbol: method center(int,int) 
    location: class Circle 
Lab21.java:41: error: variable center is already defined in constructor Circle(Point) 
    Point center = this.center(radius (1)); 
     ^
Lab21.java:41: error: cannot find symbol 
    Point center = this.center(radius (1)); 
          ^
    symbol: method radius(int) 
    location: class Circle 
Lab21.java:45: error: variable radius is already defined in constructor Circle(int,Point) 
    int radius = this.radius; 
     ^
Lab21.java:46: error: variable center is already defined in constructor Circle(int,Point) 
    Point center = this.center; 
     ^
Lab21.java:57: error: toString() in Circle cannot override toString() in Object 
String toString(){ 
    ^
    attempting to assign weaker access privileges; was public 
Lab21.java:67: error: cannot find symbol 
    r.move(4,2); 
    ^
    symbol: variable r 
    location: class Lab21 
Lab21.java:69: error: cannot find symbol 
    r.resize(5,2); 
    ^
    symbol: variable r 
    location: class Lab21 
Lab21.java:72: error: cannot find symbol 
    point center = new Point(3,3); 
    ^
    symbol: class point 
    location: class Lab21 
+1

- 在所有應有的尊重下,您不應該先向我們展示您的代碼嘗試嗎?那麼如果這不起作用,您是不是應該問我們一個具體而且可以回答的問題,而不是簡單地在您的網站上傾銷您的任務要求?請通過[遊覽],[幫助]和[如何提出一個很好的問題](http://stackoverflow.com/help/how-to-ask)部分來查看本網站的工作原理並幫助您改善您當前和未來的問題,這可以幫助您獲得更好的答案。 –

+1

做你的功課! – mmking

+0

我正在這樣做,正如你可以在我的編輯中看到的.......但我得到這麼多的錯誤,我沒有看到實際發佈的任何一點 – I31

回答

0

的失誤大多是在你的Circle類。我想你需要一些clarifiations:

  1. 性質radiuscenter在你上課的時候已經聲明。你不應該在構造函數中再次聲明它們。聲明一個變量意味着指定它是什麼類型,如int radiusPoint center

  2. 如果你打電話給radius(1),java認爲你正在尋找一個名爲radius的方法,並將值傳遞給它。但是您沒有定義稱爲半徑或中心的方法。 center只是一個點,radius只是一個整數。

爲了給它們賦值,你需要做的是這樣

this.radius = 1; 
this.center = new Point(0, 0); 

此說,1的值賦給這個圓的半徑,並指定新的點(0,0 )作爲這個圈子的中心。

  1. 在你的構造函數中,你想要給你的屬性賦值。您可以通過調用this.radius來訪問您的屬性,這意味着當前Circle實例的半徑。你似乎在做的是將一個值分配給一個名爲radius的新變量。

那麼默認的構造函數應該是這樣的:

public Circle(){ 
    this.radius = 1; 
    this.center = new Point(0, 0); 
} 

你告訴它來設置這個圈子的半徑值1,這個圈子的中心是在一個點(0,0) 。

其他構造函數的定義類似。例如,在您指定的半徑和中心的構造應該是這樣的:

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

此說,設置這個圓的半徑是我指定的,當我調用該方法的半徑和該中心圓是我指定的中心。


這是它應該是什麼樣子:

class Circle { 
    private int radius; 
    private Point center; 

    public Circle(){ 
     this.radius = 1; 
     this.center = new Point(0,0); 
    } 

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

    public Circle(Point center){ 
     this.radius = 1; 
     this.center = center; 
    } 

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

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

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

    public String toString(){ 
     String s = "radius: " + radius + "center: " + center; 
     return s; 
    } 
} 

而且有一個在你的主要方法,一些小的失誤。

首先,

應該

Point center = new Point(3, 3); 

如果你寫的那樣,JAVA熄滅,並試圖找到一個名爲point類,然後抱怨,因爲它不能找到它。你需要告訴它來尋找Point,大寫P.

其次,

Circle s = new Circle (6, 1, center); 

應該像

Circle s = new Circle (6, center); 

你沒有一個構造函數三個論點。您只能爲半徑指定一個值,爲中心指定一個值。

最後,你不能叫

c.move(4,2); 
c.resize(5,2); 

第一種方法是Point類型的對象。你無法告訴Circle如同一個Point一樣行事。第二種方法甚至沒有定義。

+0

你的任務要求所有四個構造函數的演示。你可以自己做。創建四個不同的圓圈,一個使用每個構造函數,並打印出來。 – mmking