本文章最後由 編輯部女孩 於 2016-5-27 15:44 編輯
題目:
設計一個三角形類別,當中包含三項公用資料如下:
項目 | 名稱 | 封裝等級 | 題目要求 | 三角形類別
| CTriangle
| 非public
| 自定的類別
| 最小的邊
| edge1
| 公用
| int
| 次小的邊
| edge2
| 公用
| int
| 最大的邊
| edge2
| 公用
| int
|
在(1)-a~d共設計四個CTriangle的方法,解說如下:
方法 | 名稱 | 封裝等級 | 題目要求 | 建構子
| CTriangle()
| public
| (1)-a
| 是否為合法之3邊
| isLegal(int a,int b,int c)
| private
| (1)-b
| 建構子
| CTriangle(int a,int b,int c)
| public
| (1)-c
| 畢氏定理判斷直角
| isRightAngled()
| public
| (1)-d
|
(1)-a:設計一個無引數的建構子。功能為設定三個邊為3,4,5。
(1)-b:設計一個類別方法(class method),boolean isLegal(int a,int b,int c),用以判斷a,b,c是否能夠成為三角形的邊。其中
須符合a≦b≦c,否則回傳false。
須符合 |另兩邊的差| < 第三邊 < 另兩邊的和,否則回傳false。
(1)-c:設計一個建構子,接受三個整數引數a,b,c,內容為利用isLegal判定輸入的引數是否可構成三角形,若無法構成,則設定三個邊為3,4,5(請呼叫(1)-a來完成),若可構成三角形,則設定a,b,c為三個邊的值。
【hint:請注意在建構子中如何使用另一個建構子】
(1)-d:設計一個方法boolean isRightAngled(),使用畢氏定理判定是否為直角三角形。
題目(1)-e~h,皆為主類別的程式,解說如下:
(1)-e:撰寫一個產生三個亂數的主類別函式int [] makeThreeNum()。三個數存放於陣列中。
陣列[0]之值為介於5~29的整數。
陣列[1]之值為介於9~49的整數。
陣列[2]之值為介於29~89的整數。
(1)-f:在main()中,建立CTriangle的物件陣列objArr,並使用迴圈呼叫10次makeThreeNum(),取得10組數
值,並利用這10組數值作為objArr[0]~objArr[9]的成員值(若不合法,則該物件之成員會自動被設定為3,4,5)。
(1)-f:在main()中,手動修正objArr[9]的三個成員值為(20,21,29)。
(1)-h:在main()函式中,印出物件陣列的10個三角形的邊,並判斷是否為直角三角形。
(2) 將上一題的資料項目edge1,edge2,edge3全部改為私用,會產生無法編譯的狀況,請修正為可編譯的狀況(您可能需要新增某些功用的方法)
- 我寫的解答:
- class CTriangle {
-
- private int edge1, edge2, edge3;
- //基本上應該是set.get都要有,不過因為沒用到set所以就沒做了
- public int getEdge1() {
- return edge1;
- }
- public int getEdge2() {
- return edge2;
- }
- public int getEdge3() {
- return edge3;
- }
- //預設建構子
- public CTriangle() {
- this.edge1 = 3;
- this.edge2 = 4;
- this.edge3 = 5;
- }
- //收三個參數的建構子
- public CTriangle(int edge1, int edge2, int edge3) {
- this();
- if (this.isLegal(edge1, edge2, edge3)) {
- this.edge1 = edge1;
- this.edge2 = edge2;
- this.edge3 = edge3;
- }
- }
- //判別是否為直角三角形(兩邊平方的合等於第三邊的平方)
- public boolean isRightAngled() {
- if ((edge1 * edge1) + (edge2 * edge2) == (edge3 * edge3)) {
- System.out.println("是直角三角形");
- return true;
- } else {
- System.out.println("不是直角三角形");
- return false;
- }
- }
- //判別是否為合法的三角形
- private boolean isLegal(int edge1, int edge2, int edge3) {
- if ((edge1 <= edge2 && edge2 <= edge3) && (edge1 - edge2 < edge3 && edge3 < edge1 + edge2)) {
- return true;
- } else {
- return false;
- }
- }
- //這個其實是測試建構子是否正常用的,看看就好
- @Override
- public String toString() {
- return "CTriangle{" + "edge1=" + edge1 + ", edge2=" + edge2 + ", edge3=" + edge3 + '}';
- }
- }
- public class ch7_23 {
- //亂數選取,要不要加static都可以,不加的話必須在main裡面初始化ch7_23
- static int[] makeThreeNum() {
- int edge[] = new int[3];
- return edge;
- }
- public static void main(String[] ager) {
- int[] b;
- CTriangle[] objArr = new CTriangle[10];
- for (int i = 0; i < objArr.length; i++) {
- b = makeThreeNum();
- objArr[i] = new CTriangle(b[0], b[1], b[2]);
- }
- objArr[9] = new CTriangle(20, 21, 29);
- for (int i = 0; i < objArr.length; i++) {
- System.out.print("3邊為" + "\t");
- System.out.print(objArr[i].getEdge1() + "\t");
- System.out.print(objArr[i].getEdge2() + "\t");
- System.out.print(objArr[i].getEdge3() + "\t");
- objArr[i].isRightAngled();
- }
- }
- }
複製代碼
|