天天看點

一個抽象類Shape 裡邊有兩個抽象方法 計算面積 和 周長; Shape由三角形和圓形繼承,利用多态的特性設計完成不同子類的功能

一個抽象類Shape 裡邊有兩個抽象方法 計算面積 和 周長; Shape由三角形和圓形繼承,利用多态的特性設計完成不同子類的功能

原意要求如圖:實作代碼如下:

package com.tiger.practice;
import java.util.Scanner;

/**
 * Shape -- 抽象類
 * @author tiger
 *
 */
abstract class Shape{
  //計算周長
  public abstract double calcuPerimeter();
  //計算面積
  public abstract double calcuArea();

  public abstract void getType();
}

/**
 * 三角形類,三角形的任意兩邊的和大于第三邊
 * @author tiger
 *
 */
class Triangle extends Shape{
  /**
   * 三角形三邊
   */
  double a;
  double b;
  double c;
  /**
   * 構造器,初始化三角形三邊
   * @param a
   * @param b
   * @param c
   */
  public Triangle(double a, double b, double c) {
    this.a = a;
    this.b = b;
    this.c = c;
  }
  /**
   * 計算三角形周長
   */
  @Override
  public double calcuPerimeter() {
    double perimeter = a + b + c;
    return perimeter;
  }
  /**
   * 計算三角形面積
   */
  @Override
  public double calcuArea() {
    double s = (a + b + c) / 2;
    double area = Math.pow(s*((s - a)*(s - b)*(s - c)), 0.5);
    return area;
  }
  @Override
  public void getType() {
    System.out.println("我是一個圓!");
  }
}

/**
 * 圓類
 * @author tiger
 *
 */
class Circle extends Shape{
  //圓半徑
  double r;
  /**
   * 構造器,初始化圓的半徑。
   * @param r
   */
  public Circle(double r) {
    this.r = r;
  }
  /**
   * 計算圓周長
   */
  @Override
  public double calcuPerimeter() {
    double perimeter = 2 * Math.PI * r;
    return perimeter;
  }
  /**
   * 計算圓面積
   */
  @Override
  public double calcuArea() {
    double are = Math.PI * r * r;
    return are;
  }
  @Override
  public void getType() {
    System.out.println("我是一個三角形!");
  }
}

public class Graphice {
  public static void main( String[] args ){
    test();
  }
  /**
   * 測試
   */
  public static void test(){
    prtMenu();
    Scanner sc = new Scanner( System.in );
    int shapeType = sc.nextInt();
    switch (shapeType) {
    case 1: createTriangle();break;
    case 2:createCircle();break;
    default: prt();break;

    }
  }
  /**
   * 菜單提示消息
   */
  public static void prtMenu(){
    System.out.println();
    System.out.println( "--------請選擇你要建立的圖形--------" );
    System.out.println( "[1] 三角形" );
    System.out.println( "[2] 圓形" );
    System.out.println();
  }
  /**
   * 錯誤提示消息
   */
  public static void prt(){
    System.err.println("輸入代号有誤,請輸入 1 或者 2 ,謝謝!");
    Graphice.main(null);
  }
  /**
   * 建立圓
   */
  public  static void createCircle(){
    System.out.println("--------------圓----------------");
    Scanner sc1 = new Scanner( System.in );
    System.out.println("請輸入圓的半徑 r ");
    double r = sc1.nextDouble();
    Shape circle = new Circle(r);
    circle.getType();
    System.out.println("圓的面積 = " + circle.calcuArea());
    System.out.println("圓的周長 = " + circle.calcuPerimeter());
  }
  /**
   * 建立三角形
   */
  public static void createTriangle(){
    Shape triangle;
    System.out.println("------------三角形---------------");
    Scanner sc2 = new Scanner( System.in );
    System.out.println("請輸入三角形三邊!");
    double a = sc2.nextDouble();
    double b = sc2.nextDouble();
    double c = sc2.nextDouble();
    //校驗三角形三邊合法性
    if (a > 0 && b > 0 && c > 0 && 
        (a + b) > c && (a + c) > b && (b + c) > a) {
      triangle = new Triangle(a,b,c);
      triangle.getType();
      System.out.println("三角形的面積 = " + triangle.calcuArea());
      System.out.println("三角形的面積 = " + triangle.calcuPerimeter());
    }else {
      System.out.println("\n三角形三邊不合法! 三角形建立失敗! "
          + "\n請重新輸入三邊\n");
      createTriangle();
    }
  }
}