定义一个抽象基类Shape,它包含抽象方法getArea(),从Shape类派生出Circle和Rectangle类,这两个类都用getArea()方法计算对象的面积。在主函数中,定义一个Shape数组,存入n个Rectangle类和Circle类的对象,并找出数组中面积最小的元素。
我的问题主要在于,如何输出这个元素?
输出元素可以重写toString方法;
下面是具体得实现,分别用到了【抽象工厂设计模式】【冒泡排序】
public abstract class Shape {
public abstract int getArea();
}
public class Rectangle extends Shape {
private int area;
//假设这个形状得面积为传进来得值”假设“
public Rectangle(int i){
this.area =i;
}
@Override
public int getArea() {
//具体计算面积的参数,得看你业务中得参数,可以通过构造函数在创建对象时传参进来进行计算面积
//具体你业务中计算长方形的面积, 最后返回的是这个面积的值,
return this.area;
}
@Override
public String toString() {
return "Rectangle{" +
"area=" + area +
'}';
}
}
public class Circle extends Shape {
private int area;
//假设这个形状得面积为传进来得值”假设“
public Circle(int i){
this.area =i;
}
@Override
public int getArea() {
//具体计算面积的参数,得看你业务中得参数,可以通过构造函数在创建对象时传参进来进行计算面积
//具体你业务中计算长方形的面积 最后返回的是这个面积的值...
return this.area;
}
@Override
public String toString() {
return "Circle{" +
"area=" + area +
'}';
}
}
public class TestMain {
public static void main(String[] args){
//定义一个Shape数组
Shape[] shapes = new Shape[10];
//模拟存入10个/n个Rectangle类和Circle类的对象
for(int i =0;i<5;i++){
shapes = addElement(shapes,new Rectangle(randomArea()));
shapes = addElement(shapes,new Circle(randomArea()));
}
System.out.println("Shape数组中得所有元素列表:"+Arrays.asList(shapes));
//并找出数组中面积最小的元素。
for(int i=0;i<shapes.length-1;i++)
{
for(int j=0;j<shapes.length-1-i;j++)
{
if(shapes[j].getArea()>shapes[j+1].getArea())
{
Shape temp=shapes[j];
shapes[j]=shapes[j+1];
shapes[j+1]=temp;
}
}
}
System.out.println("Shape数组面积经过冒泡排序后得元素列表:"+Arrays.asList(shapes));
System.out.println("Shape数组面积最小得元素是:"+shapes[0]);
}
/**
* 随机一个数作为形状对象得面积(真正得面积是你自己再类得getArea计算,我这里只是模拟)
* @return
*/
public static int randomArea(){
return new Double(Math.random()*100).intValue();
}
/**
*
* @param shapes
* @param shape 需要添加得元素
* @return
*/
public static Shape[] addElement(Shape[] shapes,Shape shape){
for(int i =0;i<shapes.length;i++){
if(shapes[i] == null){
shapes[i] = shape;
break;
}
}
return shapes;
}
}
Shape数组中得所有元素列表:[Rectangle{area=19}, Circle{area=72}, Rectangle{area=61}, Circle{area=17}, Rectangle{area=3}, Circle{area=69}, Rectangle{area=39}, Circle{area=66}, Rectangle{area=63}, Circle{area=96}]
Shape数组经过冒泡排序后得元素列表:[Rectangle{area=3}, Circle{area=17}, Rectangle{area=19}, Rectangle{area=39}, Rectangle{area=61}, Rectangle{area=63}, Circle{area=66}, Circle{area=69}, Circle{area=72}, Circle{area=96}]
Shape数组最小得元素是:Rectangle{area=3}