java 基础编程练习19

题目描述:
KiKi理解了继承可以让代码重用,他现在定义一个基类shape,私有数据为坐标点(x,y)

由它派生Rectangle类和Circle类,它们都有成员函数GetArea()求面积。派生类Rectangle类有数据:矩形的长和宽;派生类Circle类有数据:圆的半径。Rectangle类又派生正方形Square类,定义各类并测试。

输入三组数据,分别是矩形的长和宽、圆的半径、正方形的边长,输出三组数据,分别是矩形、圆、正方形的面积。圆周率按3.14计算。

输入描述:
输入三行,
第一行为矩形的长和宽,
第二行为圆的半径,
第三行为正方形的边长。

输出描述:
三行,分别是矩形、圆、正方形的面积。

示例1
输入

7 8
10
5

输出

56
314
25

import java.util.Scanner;
import java.text.DecimalFormat;

//图形类,基类
class Shape{
    private int x;
    private int y;
    
    public Shape(int x,int y){
        this.x=x;
        this.y=y;
    }
}

//长方形
class Rectangle extends Shape{
    private int length;
    private int width;
    
    public Rectangle(int length, int width){
        super(length, width);
        this.length = length;
        this.width = width;
    }
    
    public int GetArea(int x,int y){
        return x*y;
    }
}

//圆
class Circle extends Shape{
    int r;
 
    public Circle(int r){
        super(r, r);
        this.r = r;
    }
 
    public double GetArea(int r){
        double Area;
        Area = 3.14 * r * r;
        return Area;
    }
}

//正方形
class Square extends Rectangle{
    int length;
 
    public Square(int length){
        super(length, length);
        this.length = length;
    }
 
    public int GetArea(int length){
        int Area;
        Area = length * length;
        return Area;
    }
}

//主类
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int length = sc.nextInt();
        int width = sc.nextInt();
        int r = sc.nextInt();
        int side = sc.nextInt();
 		
 		//创建三个图形的对象
        Rectangle rectangle = new Rectangle(length, width);
        Circle circle = new Circle(r);
        Square square = new Square(side);
        
        //输出长方形面积
        System.out.println(rectangle.GetArea(length, width));
        
        //输出圆形面积:
        //1)小数点后没有小数,则按照int型整数格式输出
        //2)小数点后仅一位小数,则直接输出
        //3)小数点后如果有两位或者大于两位,则保留两位小数输出
        
        double AreaCircle = circle.GetArea(r);//圆的面积
        int AreaCircle1 = (int)circle.GetArea(r);//面积的整数部分
        DecimalFormat df = new DecimalFormat("###.0");//保留一位小数
        
        double temp;
        if (AreaCircle > AreaCircle1){//这个表示,面积带有小数
            temp = Double.parseDouble(df.format(AreaCircle));
            if (temp != AreaCircle){//如果不是一位小数的,输出两位小数,大于两位小数,也保留两位
                System.out.println(String.format("%.2f", AreaCircle));
            }
            else{//只有一位小数,直接输出
                System.out.println(AreaCircle);
            }
        }
        else{//面积不带小数
            System.out.println(AreaCircle1);
        }
        
        //正方形面积
        System.out.println(square.GetArea(side));
    }
}