close

配合Main.java撰寫Rectangle(長方形), Circle(圓形), Triangle(三角形), Cylinder(圓柱體), Sphere(球體)等5個class.

其中Rectangle(長方形), Circle(圓形), Triangle(三角形)等3個class中須有getArea method能夠回傳面積, printArea method能夠在螢幕上顯示面積.

Cylinder(圓柱體), Sphere(球體)等2個class中除了須有getArea method能夠回傳面積, printArea method能夠在螢幕上顯示面積外, 尚須有getVolume method能夠回傳體積, printVolume method能夠在螢幕上顯示體積.


各形狀面積、體積公式如下 :

Rectangle(長方形)面積公式 : 長(length) * 寬(width)

Circle(圓形)面積公式 : 圓周率*半徑(radius)平方

Triangle(三角形)面積公式 : 假設a,b,c為三角形三邊長,d=總邊長/2, 面積=開根號(d(d-a)(d-b)(d-c))

Cylinder(圓柱體)面積公式 : 2*圓周率*半徑(radius)平方+2*圓周率*半徑*高(height)
Cylinder(圓柱體)體積公式 : 高(height)*圓周率*半徑(radius)平方

Sphere(球體)面積公式 : 4*圓周率*半徑(radius)平方
Sphere(球體)體積公式 : 3分之4*圓周率*半徑(radius)3次方


圓週率可讀取 Math class中的PI變數
開根號可呼叫Math class中的sqrt() method
次方計算可呼叫Math class中的pow() method

 

 

Main:

 

package shapetest;

public class Main {
public static void main(String[] args) {
Rectangle a = new Rectangle("長方形1", 10, 5);
Circle b = new Circle("圓形1", 9);
Triangle c = new Triangle("三角形1", 5, 5, 8);
// Cylinder d = new Cylinder("圓柱體1", 7, 13);
//// Sphere e = new Sphere("球體", 7);

a.printArea();
b.printArea();
c.printArea();
// d.printArea();
// d.printVolume();
// e.printArea();
// e.printVolume();
}
}

 

 

 

Rectangle:

package shapetest;

public class Rectangle {

private String name;
private double length, width;

public Rectangle(String name, double length, double width) {
this.setName(name);
this.setLength(length);
this.setWidth(width);

}

public double getArea() {
return length * width;

}

public void printArea() {
System.out.println(name + "的面積=" + getArea());

}

public void setName(String name) {
if (name != null) {
this.name = name;

}

}

public String getName() {
return name;

}

public double getLength() {
return length;
}

public void setLength(double length) {
this.length = length;
}

public double getWidth() {
return width;
}

public void setWidth(double width) {
this.width = width;
}

}

 

Circle:

package shapetest;

class Circle {

private String name;
private double radius;

public Circle(String name, double radius) {
this.setName(name);
this.setRadius(radius);
}

public double getArea() {
return Math.pow(radius, 2) * Math.PI;

}

public void printArea() {

System.out.println(name + "的面積=" + getArea());
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public double getRadius() {
return radius;
}

public void setRadius(double radius) {
this.radius = radius;
}

}

 

Triangle:

 

package shapetest;

class Triangle {

private String name;
private double a, b, c;
public double d = a + b + c;

public Triangle(String name, double a, double b, double c) {
this.setName(name);
this.setA(a);
this.setB(b);
this.setC(c);
}

public double getArea() {
double d = a + b + c;
return Math.sqrt((d * (d - a) * (d - b) * (d - c)));

}

public void printArea() {

System.out.print(name + "的面積=" + getArea());
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public double getA() {
return a;
}

public void setA(double a) {
this.a = a;
}

public double getB() {
return b;
}

public void setB(double b) {
this.b = b;
}

public double getC() {
return c;
}

public void setC(double c) {
this.c = c;
}

}

 

 

***Cylinder:

 

package com.hellopianoman.shape;

public class Cylinder {
private String name;
private double radius, height;

public Cylinder(String name, double radius, double height) {
this.setName(name);
this.setRadius(radius);
this.setHeight(height);
}

public double getArea() {
return 2*Math.PI*Math.pow(radius, 2)+2*Math.PI*radius*height;
}

public void printArea() {
System.out.println(name+"的面積為"+getArea());
}

public double getVolume() {
return height*Math.PI*Math.pow(radius, 2);
}

public void printVolume() {
System.out.println(name+"的體積為"+getVolume());
}

public double getHeight() {
return height;
}

public void setHeight(double height) {
this.height = height;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public double getRadius() {
return radius;
}

public void setRadius(double radius) {
this.radius = radius;
}
}

 

***Sphere:

 

package com.hellopianoman.shape;

public class Sphere {
private String name;
private double radius;

public Sphere(String name, double radius) {
this.setName(name);
this.setRadius(radius);
}

public double getArea() {
return 4*Math.PI*Math.pow(radius, 2);
}

public void printArea() {
System.out.println(name+"的面積為"+getArea());
}

public double getVolume() {
return (4.0/3)*Math.PI*Math.pow(radius, 3);
}

public void printVolume() {
System.out.println(name+"的體積為"+getVolume());
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public double getRadius() {
return radius;
}

public void setRadius(double radius) {
this.radius = radius;
}
}

 

 REPEAT: 以上5個class有很多重複的程式碼,所以再開一個新的,將重複的都加進去這個新的class

 

package shapetest;

abstract public class Repeat {       //加入抽象修飾字abstract

private String name;

public Repeat() {
this.setName(name);                     //本來this.setName(name)會有紅線 用class包起來就OK
}


abstract public double getArea();    //加入抽象修飾字abstract

public void printArea() {
System.out.println(name + "的面積=" + getArea());    //有紅線 因為class內找不到getArea method 但getArea無法共用 所以必須上面加入"抽象"mehod

}

public void setName(String name) {
if (name != null) {
this.name = name;

}

}

public String getName() {
return name;

}
}

 

Rectangle V2:

package com.hellopianoman.shape;

public class Rectangle extends Shape { // 子類別(sub class)繼承不到父類別(super class)的private屬性、private method, 也繼承不到父類別建構式(constructor)

private double length, width;

public Rectangle(String name, double length, double width) {
super(name); // 執行父類別建構式
this.setLength(length);
this.setWidth(width);
}

public double getArea() { // 此為覆寫了父類別的抽象方法, 或可說是實作了父類別的抽象方法
return this.length*this.width;
}
public double getLength() {
return length;
}

public void setLength(double length) {
this.length = length;
}

public double getWidth() {
return width;
}

public void setWidth(double width) {
this.width = width;
}
}

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鈴木保齡球 的頭像
    鈴木保齡球

    Java程式學習手札

    鈴木保齡球 發表在 痞客邦 留言(0) 人氣()