7-1 jmu-Java-03面向对象基础-04-形状-继承

本题描述:

定义抽象类Shape
属性:不可变静态常量double PI,值为3.14,
抽象方法:public double getPerimeter(),public double getArea()

Rectangle与Circle类均继承自Shape类。
Rectangle类(属性:int width,length)、Circle类(属性:int radius)。
带参构造函数为Rectangle(int width,int length),Circle(int radius)。
toString方法(Eclipse自动生成)
编写double sumAllArea方法计算并返回传入的形状数组中所有对象的面积和与
double sumAllPerimeter方法计算并返回传入的形状数组中所有对象的周长和。

main方法
4.1 输入整型值n,然后建立n个不同的形状。如果输入rect,则再输入长和宽。如果输入cir,则再输入半径。
4.2 然后输出所有的形状的周长之和,面积之和。并将所有的形状信息以样例的格式输出。 提示:使用Arrays.toString。
4.3 最后输出每个形状的类型与父类型.使用类似shape.getClass()(获得类型),shape.getClass().getSuperclass()(获得父类型);
注意:处理输入的时候使用混合使用nextInt与nextLine需注意行尾回车换行问题。
代码划水中。。。。。

import java.util.Scanner;
abstract class Shape{
	final double PI=3.14;
	public abstract double getPerimeter();
	public abstract double getArea();
}
class Rectangle extends Shape{
	int width,length;
	public Rectangle(int r_width,int r_length){
		width=r_width;
		length=r_length;
	}
	public double getPerimeter(){
		return (width+length)*2;
	}
	public double getArea(){
		return (width*length);
	}
    public String toString(){
		return "[width="+width+", length="+length+"]";
	} 
}
class Circle extends Shape{
	int radius;
	public Circle(int c_radius){
		radius=c_radius;
	}
	public double getPerimeter()
	{
		return (2*PI*radius);
	}
	public double getArea()
	{
		return (PI*radius*radius);
	}
    public String toString(){
		return "[radius="+radius+"]";
	} 
}
public class Main{
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		sc.nextLine();
		Shape x[]=new Shape[n];
		double sumAllArea=0,sumAllPerimeter=0;
		for(int i=0;i<n;i++){
			String m=sc.next();
			if(m.equals("rect")){
				int width=sc.nextInt();
                int length=sc.nextInt();
				sc.nextLine();
				x[i]=new Rectangle(width,length);
			}
			else if(m.equals("cir")){
				int radius=sc.nextInt();
				sc.nextLine();
				x[i]=new Circle(radius);
			}
			sumAllArea =sumAllArea + x[i].getArea();
			sumAllPerimeter =sumAllPerimeter + x[i].getPerimeter();
		}
		sc.close();
		System.out.println(sumAllPerimeter);
		System.out.println(sumAllArea);
		System.out.print("[");
		for(int i=0;i<n;i++){
			if(i!=0){
				System.out.print(", ");
			}
			if(x[i] instanceof Rectangle){
				System.out.print("Rectangle ");
				System.out.print(x[i].toString());
			}
			else{
				System.out.print("Circle ");
				System.out.print(x[i].toString());	
			}
		}
		System.out.println("]");
		for(int i=0;i<n;i++){
			if(x[i] instanceof Rectangle){
				System.out.println("class Rectangle,class Shape");
			}
			else{
				System.out.println("class Circle,class Shape");
			}
		}
	}
	
}

好啦,差不多运行一下就可以啦,如果有优化方案,可以留下哦,祝你好运。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值