1. 程式人生 > >Java小程式之計算三角形/圓形/矩形的周長和麵積

Java小程式之計算三角形/圓形/矩形的周長和麵積

題目:用Java編寫一個計算隨意給定值的三角形/圓形/矩形的周長和麵積
程式碼如下:
檔名:Shape.java

/**
 * 抽象類Shape 是其他三個形狀的父類 
 * 其他三個類要繼承重寫getArea()和getPerimeter()方法
 *
 */
public abstract class Shape {
    public static final double PI=3.14;

    public abstract double getArea();

    public abstract double getPerimeter();
}

檔名:Circle.java

/**
 * 繼承Shape類
 *
 */
public class Circle extends Shape{

    double r;
    public Circle(double r){
        this.r=r;
    }

    @Override   
    public double getArea(){
        return Shape.PI*r*r;
    }

    @Override
    public double getPerimeter(){
        return Shape.PI*r*2;
    }

}

檔名:Rectangle.java

/**
 * 繼承Shape類
 *
 */

public class Rectangle extends Shape {

    double m, n;

    public Rectangle(double m, double n) {

        this.m = m;
        this.n = n;

    }

    @Override
    public double getArea() {
        return m * n;
    }

    @Override
    public double getPerimeter() {
        return
2 * (m + n); } }

檔名:Triangle.java

/**
 * 繼承Shape類
 *
 */
public class Triangle extends Shape {

    double a, b, c;

    public Triangle(double a, double b, double c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    @Override
    public double getArea() {
        double p = (a + b + c) / 2;

        if ((a + b) > c && (a + c) > b && (b + c) > c) {

            return Math.sqrt(p * (p - a) * (p - b) * (p - c));

        } else {

            System.out.println("wrong values");
            return -1;

        }
    }

    @Override
    public double getPerimeter() {
        if ((a + b) > c && (a + c) > b && (b + c) > c) {

            return a + b + c;

        } else {

            System.out.println("wrong values");
            return -1;

        }

    }
}

檔名:Test.java

package task.daily.April.TwentyFirst;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("choose the shape which is the one you want calculate it's area and Perimeter:");
        System.out.println("1.Circle\t2.Triangle\t3.Rectangle");
        try {
            int choice = sc.nextInt();
            switch (choice) {
            case 1:
                System.out.println("input r:");
                try {
                    double r = sc.nextDouble();
                    Shape s = new Circle(r);
                    System.out.println("the area of the circle is :" + s.getArea()
                            + "\nthe perimeter of the circle is :" + s.getPerimeter());
                } catch (Exception e) {
                    System.out.println("wrong");
                }
                break;
            case 2:
                System.out.println("input a,b,c:");
                double a, b, c;
                try {
                    a = sc.nextDouble();
                    b = sc.nextDouble();
                    c = sc.nextDouble();
                    Shape s = new Triangle(a, b, c);
                    System.out.println("the area of the circle is :" + s.getArea()
                            + "\nthe perimeter of the circle is :" + s.getPerimeter());

                } catch (Exception e) {
                    System.out.println("wrong");
                }
                break;
            case 3:
                System.out.println("input m,n:");
                double m, n;
                try {
                    m = sc.nextDouble();
                    n = sc.nextDouble();
                    Shape s = new Rectangle(m, n);
                    System.out.println("the area of the circle is :" + s.getArea()
                            + "\nthe perimeter of the circle is :" + s.getPerimeter());

                } catch (Exception e) {
                    System.out.println("wrong");
                }
                break;
            }
        } catch (Exception e) {
            System.out.println("please choose a correct number");
        }
        sc.close();
    }
}

通過子類繼承父類和子類的構造方法對不同的形狀需要的值進行賦值,對繼承和抽象類做了一個小小的應用

初學Java,歡迎大家對錯誤批評指正,指點迷津