類和類之間的比較

谷谷穀子。發表於2020-11-21

這裡使用一個例子來體現類和類之間的比較
首先,在一行上輸入一串數字(1~4,整數),其中,1代表圓形卡片,2代表矩形卡片,3代表三角形卡片,4代表梯形卡片。各數字之間以一個或多個空格分隔,以“0”結束。例如: 1 3 4 2 1 3 4 2 1 3 0
然後根據第一行數字所代表的卡片圖形型別,依次輸入各圖形的相關引數,例如:圓形卡片需要輸入圓的半徑,矩形卡片需要輸入矩形的寬和長,三角形卡片需要輸入三角形的三條邊長,梯形需要輸入梯形的上底、下底以及高。各資料之間用一個或多個空格分隔。
輸出格式:
如果圖形數量非法(小於0)或圖形屬性值非法(數值小於0以及三角形三邊不能組成三角形),則輸出Wrong Format。
如果輸入合法,則正常輸出,所有數值計算後均保留小數點後兩位即可。輸出內容如下:
排序前的各圖形型別及面積,格式為圖形名稱1:面積值1圖形名稱2:面積值2 …圖形名稱n:面積值n,注意,各圖形輸出之間用空格分開,且輸出最後存在一個用於分隔的空格;
排序後的各圖形型別及面積,格式同排序前的輸出;
所有圖形的面積總和,格式為Sum of area:總面積值。
輸入樣例1:
在這裡給出一組輸入。例如:

1 5 3 2 0
輸出樣例1:
在這裡給出相應的輸出。例如:

Wrong Format
輸入樣例2:
在這裡給出一組輸入。例如:

4 2 1 3 0
3.2 2.5 0.4 2.3 1.4 5.6 2.3 4.2 3.5
輸出樣例2:
在這裡給出相應的輸出。例如:

The original list:
Trapezoid:1.14 Rectangle:3.22 Circle:98.52 Triangle:4.02
The sorted list:
Circle:98.52 Triangle:4.02 Rectangle:3.22 Trapezoid:1.14
Sum of area:106.91
輸入樣例3:
在這裡給出一組輸入。例如:

4 2 1 3 0
3.2 2.5 0.4 2.3 1.4 5.6 2.3 4.2 8.4
輸出樣例3:
在這裡給出相應的輸出。例如:

Wrong Format

程式碼:

package TEST;

import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;

abstract class Shape implements Comparable<Shape>{
	abstract double getArea();
	abstract boolean validate();
	abstract double returnarea();
	abstract String name();

}

class Circle extends Shape{
	private double radius;
	private double area;
	public Circle(double radius) {
		this.radius=radius;
	}
	
	String name() {
		return "Circle:";
	}
	double returnarea() {
	
		return area;
	}
	@Override
	double getArea() {
		area= 3.1415926*(radius*radius);
		return area;
	}

	@Override
	boolean validate() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public int compareTo(Shape arg0) {
		
		return (int)arg0.returnarea()-(int)area;
	}
}
class Rectangle extends Shape{
	double width,length,area;
	public Rectangle(double width,double length) {
		this.length=length;
		this.width=width;
	}
	String name() {
		return "Rectangle:";
	}
	double returnarea() {
		
		return area;
	}
	@Override
	double getArea() {
		// TODO Auto-generated method stub
		area=width*length;
		return area;
	}

	@Override
	boolean validate() {
		// TODO Auto-generated method stub
		return false;
	}
	@Override
	public int compareTo(Shape arg0) {
		return (int)arg0.returnarea()-(int)area;
	}
}
class Triangle extends Shape{
	double side1,side2,side3,area;
	public Triangle(double side1,double side2,double side3) {
		this.side1=side1;
		this.side2=side2;
		this.side3=side3;
	}
	String name() {
		return "Triangle:";
	}
	double returnarea() {
		
		return area;
	}
	@Override
	double getArea() {
		double p=(side1+side2+side3)/2;
		area=Math.sqrt((p*(p-side1)*(p-side2)*(p-side3)));
		return area;
	}

	@Override
	boolean validate() {
		// TODO Auto-generated method stub
		return false;
	}
	@Override
	public int compareTo(Shape arg0) {
		return (int)arg0.returnarea()-(int)area;
	}
	
}
class Trapezoid extends Shape{
	double topSide,bottomSide,height,area;

	public Trapezoid(double topSide,double bottomSide,double height) {
			this.topSide=topSide;
			this.bottomSide=bottomSide;
			this.height=height;
	}
	String name() {
		return "Trapezoid:";
	}
	double returnarea() {
		
		return area;
	}
	@Override
	double getArea() {
		area= ((topSide+bottomSide)*height)/2;
		return area;
		}

	@Override
	boolean validate() {
		// TODO Auto-generated method stub
		return false;
	}
	@Override
	public int compareTo(Shape arg0) {
		return (int)arg0.returnarea()-(int)area;
	}
}
public class Main
{
	public static void main(String[] args)
	{
		
		int data[] =new int [100],k=0;
		Scanner in=new Scanner(System.in);
		int n=in.nextInt();
		while(n!=0)
		{
			if(n==1|| n==2|| n==3 || n==4)
			{
				data[k++]=n;
			}
			else {
				System.out.println("Wrong Format");
				return;
			}
			n=in.nextInt();
		}
		Shape nshape[] = new Shape[k];
		for(int i=0;i<k;i++)
		{
			if(data[i]==1)
			{
				double a=in.nextDouble();
				if(a>0)
				{
				nshape[i]=new Circle(a);
				nshape[i].getArea();
				}
				else {
					System.out.println("Wrong Format");
					return;
				}
			}
			if(data[i]==2)
			{
				double a=in.nextDouble();
				double b=in.nextDouble();
				if(a>0&&b>0)
				{
				nshape[i]=new Rectangle(a,b);
				nshape[i].getArea();
				}
				else {
					System.out.println("Wrong Format");
					return;
				}
			}
			if(data[i]==3)
			{
				
				double a=in.nextDouble();
				double b=in.nextDouble();
				double c=in.nextDouble();
				if(a>0&&b>0&&c>0)
				{
					if(a+b>c&& a+c>b&& c+b>a)
					{
					nshape[i]=new Triangle(a, b, c);
					nshape[i].getArea();
					}
					else {
						System.out.println("Wrong Format");
						return;
					}
				}	
				else {
					System.out.println("Wrong Format");
					return;
				}
			}
			if(data[i]==4)
			{
				double a=in.nextDouble();
				double b=in.nextDouble();
				double c=in.nextDouble();
				if(a>0&& b>0 && c>0)
				{
				nshape[i]=new Trapezoid(a, b, c);
				nshape[i].getArea();
				}
				else {
					System.out.println("Wrong Format");
					return;
				}
			}
		}
		System.out.println("The original list:");
		for(int i=0;i<k;i++)
		{
			System.out.printf("%s%.2f ",nshape[i].name(),nshape[i].returnarea());
		}
		Arrays.sort(nshape);
		System.out.println();
		System.out.println("The sorted list:");
		for(int i=0;i<k;i++)
		{
			System.out.printf("%s%.2f ",nshape[i].name(),nshape[i].returnarea());
		}
		double sum=0;
		for(int i=0;i<k;i++)
		{
			sum=sum+nshape[i].returnarea();
		}
		System.out.println();
		System.out.printf("Sum of area:%.2f",sum);
	}
}

相關文章