本题描述:
定义抽象类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");
}
}
}
}
好啦,差不多运行一下就可以啦,如果有优化方案,可以留下哦,祝你好运。