討論區快速選單
知識庫快速選單
網路投保旅行平安險 軟體開發過程中有哪些資安漏洞? 掌握Salesforce雲端管理秘訣
[ 回上頁 ] [ 討論區發言規則 ]
用繼承做一個計算矩形面積體積的程式碼
更改我的閱讀文章字型大小
作者 : steven820908(小白)
[ 貼文 15 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/4/11 下午 10:04:52
撰寫程式碼完成下列敘述 :
1.定義一個矩形類別CRectangle,含有 leng、wide 兩個資料成員,以及CalArea() (計算面積)方法成員。
2.定義一個立方體類別 CCube 繼承矩形類別 CRectangle 的所有成員,
    並新增一個GetFaceArea()(求得面積) 方法成員。
    求表面積的方式是利用父類別的CalArea() 方法取得並累加立方體每個面的面積。
3.在主程式 main()中,分別建立 Crectangle 類別物件與 CCube 類別物件,
    並分別顯示矩形的面積與立方體的表面積
完成圖如下
--------------------------------------------------------------------------
| 長 = 20, 寬 = 10 |
| 矩形面積 = 200 |
| 長 = 20, 寬 = 10, 高 = 5 |
| 立方體表面積 = 700 |
---------------------------------------------------------------------------

謝謝各位的解答,我看不太懂題目要我用什麼方式去寫
所以我一直寫不出來...
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人steven820908註記此篇回應為很有道理 2013/4/11 下午 11:34:34
>撰寫程式碼完成下列敘述 :
>1.定義一個矩形類別CRectangle,含有 leng、wide 兩個資料成員,以及CalArea() (計算面積)方法成員。

定義一個 CRectangle class
  class CRectangle {
    protected long length;
    protected long width;

    /* 也許需要建構子, 自己決定 */

    public long calArea() {
      /* 自己寫 */
    }
  }

>2.定義一個立方體類別 CCube 繼承矩形類別 CRectangle 的所有成員,

CCube 繼承 CRectangle:
  class CCube extends CRectangle {
    /* 也許需要新成員, 自己決定 */
    public getFaceArea() {
      /* 呼叫 calArea() 來得到立方體的表面積 */
    }
  }

> 並新增一個GetFaceArea()(求得面積) 方法成員。
> 求表面積的方式是利用父類別的CalArea() 方法取得並累加立方體每個面的面積。


>3.在主程式 main()中,分別建立 Crectangle 類別物件與 CCube 類別物件,

上面的兩個 class 特意忽略了一些成員, 讓你自己決定要還是不要加, 及怎麼加. 決定的因素就是看你打算在 main() 裡怎麼用. 如果在 main() 測試時你覺得現有的成員不足, 或不方便, 那就再回到原 class 去做適當的修改. 這裡教一個重要的概念, class 的設計不是天馬行空, 用自己的想像就能設計好的. 設計到某個程度後, 就要寫個測試程式來實際上的使用它, 如果使用上覺得不方便, 有不足, 就要檢討原先的設計.

  class HomeWork {
    public static void main(String arg[]) {
      CRectangle rect = new CRegtangle();
      /* 自己看看要怎麼設定及獲得rect 裡 length 跟 width 的值 */

      System.out.println("area = " + rect.calAraa());

      CCube cube = new CCube();
      /* 自己看要怎麼設定及獲得 cube 裡各成員的值 */
      System.out.println("face area = " + cube.getFaceArea());
    }
  }

> 並分別顯示矩形的面積與立方體的表面積
>完成圖如下
>--------------------------------------------------------------------------
>| 長 = 20, 寬 = 10 |
>| 矩形面積 = 200 |
>| 長 = 20, 寬 = 10, 高 = 5 |
>| 立方體表面積 = 700 |
>---------------------------------------------------------------------------
>
>謝謝各位的解答,我看不太懂題目要我用什麼方式去寫
>所以我一直寫不出來...

我不相信你一行也寫不出來.

作者 : steven820908(小白)
[ 貼文 15 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/4/15 下午 05:45:11
謝謝~你說的很有道理
因該是我問的範圍太大了...
大部分我都寫得出來
只是因為GetFaceArea()要利用CalArea()來求表面積
但是我只想的到怎麼用CalArea()算出第一次的長*寬的面積
卻不知道要怎麼把高加進去在算出長*高、寬*高
能否請你給我點提示,或是示範給我看看。
謝謝
作者 : ozzy123(ozzy) VC++優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4498 | 人氣 37262 | 評價 11100 | 評價/貼文 2.47 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/4/15 下午 07:23:14
add a member height to base class and you may calculate its surface area .
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人steven820908註記此篇回應為最佳解答 2013/4/15 下午 08:52:07
>但是我只想的到怎麼用CalArea()算出第一次的長*寬的面積
>卻不知道要怎麼把高加進去在算出長*高、寬*高

你想的沒有錯, 因為CCube 跟 CRectangle 的關係才造成這樣的情況:

  class CCube extends CRectangle {
    protected long height;
    public getFaceArea() {
      return super.calArea() * 2 +
          length * height * 2 +
          width * height * 2;
    }
  }

除非你要把 {length, height} 及 {width, height} 也用 CRectangle 來包:
  class CCube extends CRectangle {
    protected long height;
    public getFaceArea() {
      return super.calArea() * 2 +
          new CRectangle(length, height).calArea() * 2
          new CRectangel(width, height).calArea() * 2;
    }
  }

如果要這樣, 需要什麼樣的constructor 自己加.

作者 : steven820908(小白)
[ 貼文 15 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/4/16 上午 11:31:26
我照了您的方法寫出來的程式碼 :
class CRectangle{
  protected int wide;
  protected int leng;

  public int CalArea(int l, int w){
    leng = l;
    wide = w;
    return leng * wide;
  }

class CCube extends CRectangle{
  private int height;
  public int GetFaceArea(int h){
    height = h
    return super.CalArea() * 2+
     height * wide *2+
     height * leng *2;
  }
}
}
他出現一個錯誤,但是我不太懂錯誤的意思

CRectangle.java:16 CalArea(int,int) int CRectangle cannot be applied to ()
     return super.CalArea() * 2;
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/4/16 下午 12:05:06
>他出現一個錯誤,但是我不太懂錯誤的意思
>
>CRectangle.java:16 CalArea(int,int) int CRectangle cannot be applied to ()
> return super.CalArea() * 2;

你 CRectangle 的 CalArea() 有兩個參數 (int l, int w), 但你在呼叫 super.CalArea() 沒有參數.

CRectangle 的 CalArea() 不需參數, 這個 class 的 'leng' 跟 'wide' 設定應該是透過 constructor 來做. 我上面的回覆特意沒寫 constructor 是希望你能夠自己寫, 並不表示不需要.

同樣的, CCube 裡的 height 設定也應該透過 constructor 來做.

〔建議〕
1. 用正確的英文拼法, 文法來做成員的名字, 'wide' 是「寬」, 「寬度」是 width; 'leng' 的正確拼法是 length. 用適當的名字方便閱讀, 提升你程式碼的可讀性.

2. Java 語言沒有規定成員函式的格式, 但傳統習慣上是第一個字母用小寫, 後面個別單字的第一個字母用大寫. 如 calArea(), getFaceArea(). 習慣傳統的格式寫法讓你在看別人的程式, 或別人看你的程式都不會覺得突兀.



作者 : steven820908(小白)
[ 貼文 15 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/4/16 下午 08:46:16
這是我加上Constructor後的程式碼
在經過多次偵錯修改後剩下最後一個問題,我無法解答
class cRectangle{
  protected int width;
  protected int length;
  
  public cRectangle(int l, int w){
    this.length = l;
    this.width = w;
  }
  public int calArea(){
    return length * width;
  }
}

class cCube extends cRectangle{
  private int height;
  
  public cCube(int h){
    this.height = h;
  }
  public int getFaceArea(){
    return super.calArea() * 2+
height * width * 2+
     height * length * 2;
   
  }
}
出現的錯誤碼是 :
cRectangle.java:17: cannot find symbol
symobl : constructor cRectangle()
location: class cRectangle
  public cCube(int h){

不好意思因為正在初學繼承建構子這些東西
所以問題可能很多...
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/4/16 下午 10:13:50
>這是我加上Constructor後的程式碼
>在經過多次偵錯修改後剩下最後一個問題,我無法解答
>class cRectangle{

Java 的習慣: class 的名字, 每一個單詞的第一個字母是大寫. 所以 CRectangle 是 OK 的.

目的是要能夠把 class 名跟其它名字分辨開來. 請參考http://java.about.com/od/javasyntax/a/nameconventions.htm

Java 標準是這麼建議:
http://www.oracle.com/technetwork/java/codeconv-138413.html


> protected int width;
> protected int length;
>
> public cRectangle(int l, int w){

這是建構子, 它有兩個參數, 用來初始化本 class 的兩個成員. 這裡很好, 沒有問題.

> this.length = l;
> this.width = w;
> }
> public int calArea(){
> return length * width;
> }
>}
>
>class cCube extends cRectangle{
> private int height;
>
> public cCube(int h){

因為 cCube 繼承自 cRectangle, 所以在建構 cCube 時, 在進入 cCube 建構子的主體前 (在進入 cCube 的 '{' 前), cRectangle 必須得先建構 (這是 Java 語言標準的定義, 編譯器會自行產生相應的動作).

但因為你沒有明確的呼叫 parent 的建構子, 所以編譯器會嘗試呼叫 parent class 的預設建構子 (default constructor).

一個 class 的預設建構子是跟 class 同名, 沒有任何參數的函式: 如:
  class MyClass {
    MyClass() {} // default constructor
  }

如果你的 class 沒有任何建構子, 那編譯器會自動的產生一個, 並把它的 access level 設為 public.

但如果一旦你寫了任何有參數的建構子, 那編譯器就不會自動的產生預設建構子.

之前的 cRectangle 已寫了一個非預設建構子 (既 cRectangle(int l, int w)), 所以編譯器就不會自動的產生 cRectangle 的預設建構子了. 所以當 cCube 的建構子欲建構 parent class 時, 編譯器找不到 cRectangle 的預設建構子來呼叫. 所以它告訴你這個訊息:

  cRectangle.java:17: cannot find symbol
  symobl : constructor cRectangle()

但我在上面 cRectangle 的建構子那堣ㄛO說沒有問題嗎? 那問題在哪裡?

看看你原來的 cCube 的建構:
  public cCube(int h){
    ...
  }

cCube 是什麼? 它是個立方體, 你只用一個參數來初始化它夠嗎? 立方體不是有「長」, 「寬」, 「高」嗎?

你的 cCube 建構子的參數不足, 應該是:
  public cCube(int length, int width, int height) {
    super(length, width);
    this.height = height;
  }

〔要點〕
 - 參數的次序不重要, 但最好是盡量跟它的 parent 類似, 不要差太遠.
  - 明確的呼叫 parent 的建構子, 這個必須是第一行.

 板主 : 風月
 > Java入門一般區 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Java入門一般區 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Java入門一般區
1 洋將 2410 
2 Aron 2130 
3 Aries 1510 
4 DEMO999 1310 
5 Ben 990 
6 ramb 620 
7 ozzy 570 
8 tand 460 
9 Huah 410 
10 vindy 400 
Java入門一般區
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.0625