類和類之間的比較
這裡使用一個例子來體現類和類之間的比較
首先,在一行上輸入一串數字(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);
}
}
相關文章
- 集合類的比較
- 抽象類 & 介面比較抽象
- es5和es6類的比較
- Java,Go和Rust之間的比較 - DexterJavaGoRust
- Javers 比較兩個類的差異
- 類與類之間的基本關係
- UML類圖--類之間的關係
- 從java內建類和自定義類比較Comparable介面和Comparator介面實現排序的不同Java排序
- 儲存結構的種類與比較
- 一個比較float是否相等的工具類
- 介面、抽象類、普通類之間的關係抽象
- Windows、Linux 和 Mac:作業系統之間的比較WindowsLinuxMac作業系統
- 【JavaSE】集合類Collection集合Map集合的簡單介紹,List介面,中三個常用子類ArrayList、Vector、LinkedList之間的比較。Set介面。Java
- 機器學習常用的分類器比較機器學習
- 【java】類之間的關係Java
- java開發的第十五個部落格(Collections工具類和比較器)Java
- JS 物件合併與克隆方法的分類與比較JS物件
- Boost.Asio和ACE之間關於Socket程式設計的比較程式設計
- 元學習:人類與大模型比較建模大模型
- QPM 之同類 PM 對比
- 【Java】比較業務實體資訊變化的工具類Java
- js 深比較和淺比較JS
- 類之間的6種關係詳解
- Java設計模式-類之間的關係Java設計模式
- 關於Java中的物件、類、抽象類、介面、繼承之間的聯絡Java物件抽象繼承
- Go和Python比較的話,哪個比較好?GoPython
- 物件導向 -- 類的載入順序 類和物件的名稱空間物件
- Java 類載入之匿名類和主類相互依賴問題Java
- 26 比較咖啡店各類飲品的數量與熱量
- ImageMagic 和 GraphicsMagick 的比較
- ArrayList和LinkedList的比較
- ==和equals方法的比較
- c++中string類物件和字元陣列之間的相互轉換C++物件字元陣列
- Lazada好不好做?Lazada哪個類目比較好賣
- Oracle date 型別比較和String比較Oracle型別
- 聚類之K均值聚類和EM演算法聚類演算法
- day18_常用類(時間相關的類丶數字類)
- JavaScript比較兩個時間JavaScript