【三角形类】设计一个扩展自抽象类GeometriObject的新的Triangle类。绘制Triangle类和GeometricObject类的UML图并实现Triangle类。编写一个测试程序,提示用户输入三角形的三条边、一种颜色以及一个表明该三角形是否填充的布尔值。程序应该根据用户的输入,使用这些边以及颜色和是否填充的信息,创建一个Triangle对象。程序应该显示面积、周长、颜色以及真或者假来表明是否被填充。
测试一:
通过计算可得周长与面积分别为12和6
测试二:
由于第一次输入的三条边15+17<80,故三条边无法构成三角形,重新输入后经计算无误。
此题为抽象类的简单运用,相对于下两道题较为基础,值得注意的是三角形三边关系,无法构成三角形时需要重新输入
Program1:
package 实验8;
import java.util.Scanner;
public class Program1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double side1=0;
double side2=0;
double side3=0;
String color;
boolean flag = true;
while(flag){
System.out.println("请分别输入三角形的三条边");
side1 = input.nextDouble();
side2 = input.nextDouble();
side3 = input.nextDouble();
if(side1+side2>side3&&side1+side3>side2&&side2+side3>side1) flag = false;
else System.out.println("您输入的三条边无法构成三角形,请重新输入");
}
Triangle triangle = new Triangle(side1,side2,side3);
System.out.println("请分别输入三角形的颜色");
color = input.next();
triangle.setColor(color);
System.out.println("请输入三角形是否被填充(1代表已填充,0代表未填充)");
int flag2 = input.nextInt();
if(flag2==0) triangle.isFilled(false);
else if(flag2==1) triangle.isFilled(true);
System.out.println(triangle.toSting());
}
}
GeometicObject类:
package 实验8;
public abstract class GeometricObject {
String color;
boolean isFilled;
protected GeometricObject(){
}
protected GeometricObject(String color,boolean isFilled){
this.color = color;
this.isFilled = isFilled;
}
public void setColor(String color){
this.color = color;
}
public String getColor(){
return color;
}
public void isFilled(boolean isFilled){
this.isFilled = isFilled;
}
public boolean isFilled(){
return isFilled;
}
public String toString(){
return "颜色:"+color+" 是否被填充:"+isFilled;
}
public abstract double getPerimeter();
public abstract double getArea();
}
Triangle类:
package 实验8;
public class Triangle extends GeometricObject{
double side1;
double side2;
double side3;
public Triangle(){
}
public Triangle(double side1,double side2,double side3){
this.side1 = side1;
this.side2 = side2;
this.side3 = side3;
}
public double getPerimeter() {
return side1+side2+side3;
}
public double getArea() {
double p = (side1+side2+side3)/2.0;
double s = Math.sqrt(p*(p-side1)*(p-side2)*(p-side3));
return s;
}
public String toSting(){
return "三角形的颜色为:"+color+" 是否被填充:"+isFilled+" 周长:"+getPerimeter()+" 面积:"+getArea();
}
}
【ComparableCircle类】创建名为ComparableCircle的类,它继承自Circle类,并实现Comparable接口。画出UML图并实现compareTo方法,使其根据面积比较两个圆。编写一个测试程序求出ComparableCircle对象的两个实例中的较大者。
比较的是半径,结果不难看出
弄清楚各个类之间的关系尤为重要,然后也要弄清楚接口中抽象类方法的定义与接口的实现。
Program2:
package 实验8;
import java.util.Scanner;
public class Program2 {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
double radius1 = input.nextDouble();
double redius2 = input.nextDouble();
//采用有参构造函数创建一个半径为radius1的圆
Circle circle1 = new Circle(radius1);
//采用有参构造函数创建一个半径为redius2的ComparableCirlce对象,并传入circle1作比较
ComparableCircle circle2 = new ComparableCircle(circle1,redius2);
circle2.compareTo(circle1);
}
}
Circle类:
package 实验8;
public class Circle{
public static double PI = 3.14;
double radius;
Circle(){
radius = 1;
}
Circle(double radius){
this.radius = radius;
}
public void setRadius(){
this.radius = radius;
}
public double getRadius(){
return radius;
}
public double getPerimeter(){
return 2*PI*radius;
}
public double getArea(){
return radius*PI*PI;
}
}
ComparableCircle类:
package 实验8;
public class ComparableCircle extends Circle implements Comparable{
Circle circle1;
ComparableCircle(Circle circle1,double radius){
this.circle1 = circle1;
this.radius = radius;
}
@Override
public void compareTo(Circle circle1) {
// TODO Auto-generated method stub
this.circle1 = circle1;
if(circle1.radius>radius) System.out.println("circle1>circle2");
else if(circle1.radius==radius) System.out.println("circle1=circle2");
else System.out.println("circle1);
}
}
Comparable接口:
package 实验8;
public interface Comparable {
public void compareTo(Circle circle1);
}
可着色接口Colorable】设计一个名为Colorable的接口,其中有名为howToColor()的void方法。可着色对象的每个类必须实现Colorable接口。设计一个扩展GeometricObject类并实现Colorable接口的名为Square的类。实现howToColor方法,显示消息“给所有的四条边着色”。
画出包含Colorable、Square和GeometricObject的UML图。编写一个测试程序,创建有五个GeometricObject对象的数组。对于数组中的每个对象而言,如果对象是可着色的,那就调用howToColor方法。
第二个和第五个为Square的对象,只有Square类实现了Colorable接口,故只有这两个可着色
本题是对接口的进一步运用,完成此题必须要理
解清楚各类之间的关系,另外注意此题直接用了第一题中的GeometricObject类,故也必须重写此抽象类中的抽象方法。
Program3:
package 实验8;
public class program3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
GeometricObject[] geometricObject ={
new Triangle(),new Square(),new Triangle(),new Triangle(),new Square()};
for(int i=0;i<5;i++){
if(geometricObject[i] instanceof Colorable){
System.out.println("geometricObject"+(i+1)+"是可着色的");
}
}
}
}
GeometricObject类同第一题不赘述
Square类:
package 实验8;
public class Square extends GeometricObject implements Colorable{
@Override
public void howToColor() {
// TODO Auto-generated method stub
}
@Override
public double getPerimeter() {
// TODO Auto-generated method stub
return 0;
}
@Override
public double getArea() {
// TODO Auto-generated method stub
return 0;
}
}
Colorable接口:
package 实验8;
public interface Colorable {
public void howToColor();
}