(1)設計一個名為Geometric的幾何圖形的抽象類,該類包括:
①兩個名為color、filled屬性分別表示圖形顏色和是否填充。
②一個無參的構造方法。
③一個能創建指定顏色和填充值的構造方法。
④一個名為getArea()的抽象方法,返回圖形的面積。
⑤一個名為getPerimeter()的抽象方法,返回圖形的周長。
⑥一個名為toString()的方法,返回圓的字符串描述。
代碼部分:
package com.sdbi.edu.zhaojiaao; /*(1)設計一個名為Geometric的幾何圖形的抽象類,該類包括: ①兩個名為color、filled屬性分別表示圖形顏色和是否填充。 ②一個無參的構造方法。 ③一個能創建指定顏色和填充值的構造方法。 ④一個名為getArea()的抽象方法,返回圖形的面積。 ⑤一個名為getPerimeter()的抽象方法,返回圖形的周長。 ⑥一個名為toString()的方法,返回圓的字符串描述。 */ abstract class Geometric { //①兩個名為color、filled屬性分別表示圖形顏色和是否填充。 String color;// 表示圖形顏色 boolean filled;// 表示是否填充 //②一個無參的構造方法。 public Geometric() { } //③一個能創建指定顏色和填充值的構造方法。 public Geometric(String color, boolean filled) { this.color = color; this.filled = filled; } //④一個名為getArea()的抽象方法,返回圖形的面積。 abstract double getArea(); //⑤一個名為getPerimeter()的抽象方法,返回圖形的周長。 abstract double getPerimeter(); //⑥一個名為toString()的方法,返回圓的字符串描述。 @Override public String toString() { return "Geometric [color=" + color + ", filled=" + filled + ", getArea()=" + getArea() + ", getPerimeter()=" + getPerimeter() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString() + "]"; } }
效果截圖:
(2)設計一個名為Circle的圓類來實現Geometric類,該類包括:
①一個名為radius的double屬性表示半徑。
②一個無參構造方法創建圓。
③一個能創建指定radius的圓的構造方法。
④radius的訪問器方法。
⑤一個名為getArea()的方法,返回該圓的面積。
⑥一個名為getPerimeter()的方法,返回圓的周長。
⑦一個名為toString()的方法,返回該圓的字符串描述。
代碼部分:
package com.sdbi.edu.zhaojiaao; /*(2)設計一個名為Circle的圓類來實現Geometric類,該類包括: ①一個名為radius的double屬性表示半徑。 ②一個無參構造方法創建圓。 ③一個能創建指定radius的圓的構造方法。 ④radius的訪問器方法。 ⑤一個名為getArea()的方法,返回該圓的面積。 ⑥一個名為getPerimeter()的方法,返回圓的周長。 ⑦一個名為toString()的方法,返回該圓的字符串描述。 */ public class Circle extends Geometric { //①一個名為radius的double屬性表示半徑。 double radius;// 表示半徑 //②一個無參構造方法創建圓。 public Circle() { } //③一個能創建指定radius的圓的構造方法。 public Circle(double radius) { this.radius = radius; } //④radius的訪問器方法。 public double getRadius() { return radius; } public void setRadius(double radius) { this.radius = radius; } //⑤一個名為getArea()的方法,返回該圓的面積。 @Override double getArea() { return radius * radius * 3.14; } //⑥一個名為getPerimeter()的方法,返回圓的周長。 @Override double getPerimeter() { return radius * 2 * 3.14; } //⑦一個名為toString()的方法,返回該圓的字符串描述。 @Override public String toString() { return "Circle [radius=" + radius + ", color=" + color + ", filled=" + filled + ", getRadius()=" + getRadius() + ", getArea()=" + getArea() + ", getPerimeter()=" + getPerimeter() + ", toString()=" + super.toString() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + "]"; } }
效果截圖:
(3)設計一個名為Rectangle的矩形類來實現Geometric類,該類包括:
①兩個名為side1、side2的double屬性表示矩形的兩條邊。
②一個無參構造方法創建矩形。
③一個能創建指定side1和side2的矩形的構造方法。
④side1和side2的訪問器方法。
⑤一個名為getArea()的方法,返回該矩形的面積。
⑥一個名為gelPerimeter()的方法,返回該矩形的周長。
⑦一個名為toString()的方法,返回該矩形的字符串描述。
代碼部分:
package com.sdbi.edu.zhaojiaao; /*(3)設計一個名為Rectangle的矩形類來實現Geometric類,該類包括: ①兩個名為side1、side2的double屬性表示矩形的兩條邊。 ②一個無參構造方法創建矩形。 ③一個能創建指定side1和side2的矩形的構造方法。 ④side1和side2的訪問器方法。 ⑤一個名為getArea()的方法,返回該矩形的面積。 ⑥一個名為gelPerimeter()的方法,返回該矩形的周長。 ⑦一個名為toString()的方法,返回該矩形的字符串描述。 */ public class Rectangle extends Geometric { //①兩個名為side1、side2的double屬性表示矩形的兩條邊。 double side1;// 表示矩形的兩條邊 double side2; //②一個無參構造方法創建矩形。 public Rectangle() { } //③一個能創建指定side1和side2的矩形的構造方法。 public Rectangle(double side1, double side2) { this.side1 = side1; this.side2 = side2; } //④side1和side2的訪問器方法。 public double getSide1() { return side1; } public void setSide1(double side1) { this.side1 = side1; } public double getSide2() { return side2; } public void setSide2(double side2) { this.side2 = side2; } //⑤一個名為getArea()的方法,返回該矩形的面積。 @Override double getArea() { return side1 * side2; } //⑥一個名為gelPerimeter()的方法,返回該矩形的周長。 @Override double getPerimeter() { return (side1 + side2) * 2; } //⑦一個名為toString()的方法,返回該矩形的字符串描述。 @Override public String toString() { return "Rectangle [side1=" + side1 + ", side2=" + side2 + ", color=" + color + ", filled=" + filled + ", getSide1()=" + getSide1() + ", getSide2()=" + getSide2() + ", getArea()=" + getArea() + ", getPerimeter()=" + getPerimeter() + ", toString()=" + super.toString() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + "]"; } }
效果截圖:
(4)設計一個名為Triangle的三角形類來實現Geometric類,該類包括:
①三個名為side1,side2和side3的double屬性表示三角形的三條邊。
②一個無參構造方法創建三角形。
③一個能創建指定side1,side2和side3的矩形的構造方法。
④side1,side2和side3的訪問器方法。
⑤一個名為getArea()的方法,返回該三角形的面積。
⑥一個名為getPerimeter()的方法,返回該三角形的周長。
⑦一個名為isTriangle()的方法,判斷三邊是否能構成三角形。
⑧一個名為toString()的方法,返回三邊較小的字符串描述。
代碼部分:
package com.sdbi.edu.zhaojiaao; /*(4)設計一個名為Triangle的三角形類來實現Geometric類,該類包括: ①三個名為side1,side2和side3的double屬性表示三角形的三條邊。 ②一個無參構造方法創建三角形。 ③一個能創建指定side1,side2和side3的矩形的構造方法。 ④side1,side2和side3的訪問器方法。 ⑤一個名為getArea()的方法,返回該三角形的面積。 ⑥一個名為getPerimeter()的方法,返回該三角形的周長。 ⑦一個名為isTriangle()的方法,判斷三邊是否能構成三角形。 ⑧一個名為toString()的方法,返回三邊較小的字符串描述。 */ public class Triangle extends Geometric { //①三個名為side1,side2和side3的double屬性表示三角形的三條邊。 double side1;// 表示三角形的三條邊 double side2; double side3; //②一個無參構造方法創建三角形。 public Triangle() { } //③一個能創建指定side1,side2和side3的矩形的構造方法。 public Triangle(double side1, double side2, double side3) { this.side1 = side1; this.side2 = side2; this.side3 = side3; } //④side1,side2和side3的訪問器方法。 public double getSide1() { return side1; } public void setSide1(double side1) { this.side1 = side1; } public double getSide2() { return side2; } public void setSide2(double side2) { this.side2 = side2; } public double getSide3() { return side3; } public void setSide3(double side3) { this.side3 = side3; } //⑤一個名為getArea()的方法,返回該三角形的面積。 @Override double getArea() { double s = (side1 + side2 + side3) / 2; return Math.sqrt(s * (s - side1) * (s - side2) * (s - side3)); } //⑥一個名為getPerimeter()的方法,返回該三角形的周長。 @Override double getPerimeter() { return side1 + side2 + side3; } //⑦一個名為isTriangle()的方法,判斷三邊是否能構成三角形。 boolean isTriangle(double side1, double side2, double side3) { if ((side1 + side2) > side3 && (side1 + side3) > side2 && (side2 + side3) > side1) { return true;// 能構成三角形 } else { return false;// 不能構成三角形 } } //⑧一個名為toString()的方法,返回三邊較小的字符串描述。 @Override public String toString() { // 求較小的邊 // (1)利用if語句使得side1 <= side2 double temp; if (side1 >= side2) { temp = side1; side1 = side2; side2 = temp; } // (2)利用if語句使得side1 <= side3 if (side1 >= side3) { temp = side1; side1 = side3; side3 = temp; } // (3)此時side1變量里存儲的數值最小,即為較小的邊 return "Triangle [side1=" + side1 + "]"; } }
效果截圖:
(5)編寫測試類,測試圖形的面積和周長。
代碼部分:
package com.sdbi.edu.zhaojiaao; import java.util.Scanner; //(5)編寫測試類,測試圖形的面積和周長。 public class Demo { private static Scanner sc; public static void main(String[] args) { sc = new Scanner(System.in); // Circle類(圓) // 創建一個Circle類的對象(圓),並為其半徑賦初始值 System.out.println("請為圓的半徑賦值:"); double radius = sc.nextDouble(); Circle circle = new Circle(radius); // 測試圓的面積和周長 System.out.println("圓的面積為:" + circle.getArea()); System.out.println("圓的周長為:" + circle.getPerimeter()); // 返回該圓的字符串描述 System.out.println(circle.toString()); System.out.println("--------------------------"); // Rectangle類(矩形) // 創建一個Rectangle類的對象(矩形),並分別為其兩邊長賦初始值 System.out.println("請分別為矩形的兩條邊長賦值:"); double side1 = sc.nextDouble(); double side2 = sc.nextDouble(); Rectangle rectangle = new Rectangle(side1, side2); // 測試矩形的面積和周長 System.out.println("矩形的面積為:" + rectangle.getArea()); System.out.println("矩形的周長為:" + rectangle.getPerimeter()); // 返回該矩形的字符串描述 System.out.println(rectangle.toString()); System.out.println("--------------------------"); // Triangle類(三角形) // 創建一個Triangle類的對象(三角形),並分別為其三邊長賦初始值 To: while (true) { System.out.println("請分別為三角形的三條邊長賦值:"); double side01 = sc.nextDouble(); double side02 = sc.nextDouble(); double side03 = sc.nextDouble(); Triangle triangle = new Triangle(side01, side02, side03); // 判斷能否構成三角形 if (triangle.isTriangle(side01, side02, side03)) { // 能構成三角形 // 測試三角形的面積和周長 System.out.println("三角形的面積為:" + triangle.getArea()); System.out.println("三角形的周長為:" + triangle.getPerimeter()); // 返回三邊較小的字符串描述 System.out.println(triangle.toString()); break To; } else { // 不能構成三角形 System.out.println("不能構成三角形,請重新為其三條邊長賦值"); } } } }
效果截圖:
運行結果: