抽象類和物件的上轉型物件
答答租車系統(面向物件綜合練習)
Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic DiscussProblem Description
各位面向物件的小夥伴們,在學習了面向物件的核心概念——類的封裝、繼承、多型之後,答答租車系統開始營運了。
請你充分利用面向物件思想,為公司解決智慧租車問題,根據客戶選定的車型和租車天數,來計算租車費用,最大載客人數,最大載載重量。
公司現有三種車型(客車、皮卡車、貨車),每種車都有名稱和租金的屬性;其中:客車只能載人,貨車只能載貨,皮卡車是客貨兩用車,即可以載人,也可以載貨。
下面是答答租車公司的可用車型、容量及價目表:
序號 名稱 載客量 載貨量 租金
(人) (噸) (元/天)
1 A 5 800
2 B 5 400
3 C 5 800
4 D 51 1300
5 E 55 1500
6 F 5 0.45 500
7 G 5 2.0 450
8 H 3 200
9 I 25 1500
10 J 35 2000
要求:根據客戶輸入的所租車型的序號及天數,計算所能乘載的總人數、貨物總數量及租車費用總金額。
Input
首行是一個整數:代表要不要租車 1——要租車(程式繼續),0——不租車(程式結束);第二行是一個整數,代表要租車的數量N;
接下來是N行資料,每行2個整數m和n,其中:m表示要租車的編號,n表示租用該車型的天數。
Output
若成功租車,則輸出一行資料,資料間有一個空格,含義為:載客總人數 載貨總重量(保留2位小數) 租車金額(整數)
若不租車,則輸出:
0 0.00 0(含義同上)
Example Input
1 2 1 1 2 2
Example Output
15 0.00 1600
import java.util.Scanner;
abstract class car //抽象類
{
String name;
int rentPrice;
abstract int getPerson(); //抽象成員函式在繼承的子類中必須被重寫
abstract double getPickup();
abstract int getPrice();
}
class KCar extends car
{
int person;
KCar(String name,int person,int rentPrice)
{
this.name=name;
this.person=person;
this.rentPrice=rentPrice;
}
String getName()
{
return this.name;
}
int getPerson()
{
return this.person;
}
int getPrice()
{
return this.rentPrice;
}
@Override
double getPickup() {
// TODO Auto-generated method stub
return 0;
}
}
class PCar extends car
{
int person;
double pickup;
PCar(String name,int person,double pickup,int rentPrice)
{
this.name=name;
this.person=person;
this.pickup=pickup;
this.rentPrice=rentPrice;
}
String getName()
{
return this.name;
}
int getPerson()
{
return this.person;
}
double getPickup()
{
return this.pickup;
}
int getPrice()
{
return this.rentPrice;
}
}
class HCar extends car
{
double pickup;
HCar(String name,double pickup,int rentPrice)
{
this.name=name;
this.pickup=pickup;
this.rentPrice=rentPrice;
}
String getName()
{
return this.name;
}
double getPickup()
{
return this.pickup;
}
int getPrice()
{
return this.rentPrice;
}
@Override
int getPerson() {
// TODO Auto-generated method stub
return 0;
}
}
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
car[]rentCar={ //物件的上轉型物件的定義
new KCar("A",5,800),
new KCar("B",5,400),
new KCar("C",5,800),
new KCar("D",51,1300),
new KCar("E",55,1500),
new PCar("F",5,0.45,500),
new PCar("G",5,2.0,450),
new HCar("H",3,200),
new HCar("I",25,1500),
new HCar("J",35,2000)
};
int f=in.nextInt();
int sumPerson=0;
double sumPickup=0;
int sumPrice=0;
int n;
int N,m;
if(f==1)
{
N=in.nextInt();
while(N>0)
{
N--;
m=in.nextInt();
n=in.nextInt();
sumPerson+=rentCar[m-1].getPerson()*n;
sumPickup+=rentCar[m-1].getPickup()*n;
sumPrice+=rentCar[m-1].getPrice()*n;
}
}
System.out.printf("%d %.2f %d",sumPerson,sumPickup,sumPrice);
}
}