题目:随机生成1000个图形,包括圆形,矩形,三角形若干,要求求出这1000个图形的面积之和。
分析:创建圆形,矩形,三角形的公共父类图形(抽象类),图形类可以定义一个求面积的抽象方法,在圆形,矩形,三角形中分别实现这个方法;定义长度为1000的图形类型的数组,里面可以存入圆形,矩形,三角形,再利用多态的形式实现面积的求和
- 抽象父类
abstract public class Tuxing {
abstract public double getarea();
}
2.圆形子类
public class Yuan extends Tuxing {
double r;
public Yuan(double r) {
this.r = r;
}
@Override
public double getarea() {
return Math.PI*r*r;//Math类中的静态常量
}
}
3 矩形子类
public class Juxing extends Tuxing{
double width,height;
public Juxing(double width, double height) {
this.width = width;
this.height = height;
}
@Override
public double getarea() {
return width*height;
}
}
4.三角形子类
public class Sanjiao extends Tuxing{
double side,high;
public Sanjiao(double side, double high) {
this.side = side;
this.high = high;
}
@Override
public double getarea() {
return 0.5*side*high;
}
}
5.测试类
public class test {
public static void main(String[] args) {
Tuxing[] tuxing=new Tuxing[1000];//创建1000个图形数组
int s;
int countYuan=0,countJuxing=0,countSanjiao=0;
double sum=0;
for(int i=0;i< tuxing.length;i++){
s= (int)(Math.random()*3)+1;//随机值在1-3之间
switch (s){
case 1:
countYuan++;
tuxing[i]= new Yuan((int)(Math.random()*10)+1);//随机生成图形
break;
case 2:
countJuxing++;
tuxing[i]= new Juxing((int)(Math.random()*10)+1,(int)(Math.random()*10)+1);
break;
case 3:
countSanjiao++;
tuxing[i]= new Sanjiao((int)(Math.random()*10)+1,(int)(Math.random()*10)+1);
break;
}
}
for(int i=0;i< tuxing.length;i++){
sum+=tuxing[i].getarea();//求图形面积并累加
}
System.out.println("生成了"+countYuan+"个圆形");
System.out.println("生成了"+countJuxing+"个矩形");
System.out.println("生成了"+countSanjiao+"个三角形");
System.out.println("一千个随机图形的面积和是"+sum);
}
}
6.运行结果