package com.imooc;
public abstract class Car { //所有车的父类
public String name; //车名
public int price; //价格
public abstract void showInfo(); //抽象方法,子类继承时重写,显示车名、价格、载客或载货量
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}package com.imooc;
public class Auto extends Car { //汽车类
public String name;
public int price;
public int capPerson; //载客量
public Auto(String name,int price,int capPerson){
this.name=name;
this.price=price;
this.capPerson=capPerson;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getCapPerson() {
return capPerson;
}
public void setCapPerson(int capPerson) {
this.capPerson = capPerson;
}
@Override
public void showInfo() {
// TODO 自动生成的方法存根
System.out.println(getName() + '\t' +getPrice() +"元/天" + '\t' + "载人:"+getCapPerson() +"人");
}
}package com.imooc;
public class Pickup extends Car { //皮卡类
public String name;
public int price;
public int capPerson; //载客量
public int capThings; //载货量
//构造方法
public Pickup(String name,int price,int capPerson,int capThings){
this.name = name;
this.price = price;
this.capPerson = capPerson;
this.capThings = capThings;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getCapPerson() {
return capPerson;
}
public void setCapPerson(int capPerson) {
this.capPerson = capPerson;
}
public int getCapThings() {
return capThings;
}
public void setCapThings(int capThings) {
this.capThings = capThings;
}
@Override
public void showInfo() {
// TODO 自动生成的方法存根
System.out.println(getName() + '\t' +getPrice() +"元/天" + '\t' + "载人:"+getCapPerson() +"人"+ " 载货:"+getCapThings() +"吨");
}
}package com.imooc;
public class Truck extends Car { //货车类
public String name;
public int price;
public int capThings;
//构造方法
public Truck(String name,int price,int capThings){
this.name = name;
this.price = price;
this.capThings = capThings; //载货量
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getCapThings() {
return capThings;
}
public void setCapThings(int capThings) {
this.capThings = capThings;
}
@Override
public void showInfo() {
// TODO 自动生成的方法存根
System.out.println(getName() + '\t' +getPrice() +"元/天" + '\t' + "载货:"+getCapThings() +"吨");
}
}package com.imooc;
import java.util.*;
public class DadaRent {
public static void main(String[] args) {
// TODO 自动生成的方法存根
//创建车辆信息
Car[] allRent = {new Auto("奥迪A4",500,4),new Auto("马自达6",400,4),new Pickup("皮卡雪6",450,4,2),new Auto("金龙 ",800,20),new Truck("松花江",400,4),new Truck("依维河",1000,20)};
System.out.println("欢迎使用嗒嗒租车系统:");
System.out.println("您是否想要租车:1是 0否");
//显示租车信息
Scanner input = new Scanner(System.in);
int choice = input.nextInt();
while(choice!=0||choice !=1)
{ //如果输入不为0或1,则重新输入
if(choice ==0){
System.out.println("感谢您使用嗒嗒租车系统,下次再见!");
break;
}else if(choice ==1){
System.out.println("您可租车的类型及其价目表:");
System.out.println("序号" + '\t' + "汽车名称" + '\t' + "租金" + '\t' +"容量");
for(int i=0;i<allRent.length;i++){
System.out.print((i+1) + ".\t");
allRent[i].showInfo();
}
System.out.println("请输入想要租车的数量:");
break;
}else {
System.out.println("请输入正确的数字:1是 0否");
choice = input.nextInt();
}
}
int carNum = input.nextInt(); //租车数量
Car[] choiceCar = new Car[carNum]; //将客户选择的车辆对象放入choiceCar数组
for(int i=0;i<carNum;i++){
System.out.println("请输入第" + (i+1) +"辆车的序号:");
int num =input.nextInt();//每辆车的序号
choiceCar[i]=allRent[num-1];
}
System.out.println("请输入想要租车的天数:");
int rentDay = input.nextInt(); //租车天数
//计算并显示账单
System.out.println("********************您的账单信息如下:********************");
int dayPrice=0; //每天租车总价
System.out.println(">>>>>>>您要租的车是: ");
for(int i=0;i<choiceCar.length;i++){
dayPrice=choiceCar[i].getPrice()+dayPrice;
choiceCar[i].showInfo();
}
//System.out.println("每天总价:"+dayPrice);
System.out.println(">>>>>>>您总共要租借: " + rentDay + " 天");
//计算总载客载货量
int totalCapPerson = 0; //总载客量
int totalCapThings = 0; //总载货量
for(int i = 0; i < choiceCar.length; i++){
//判断所选车是Auto、Truck还是Pickup
if(choiceCar[i] instanceof Auto){ //汽车载客量
totalCapPerson += ((Auto)choiceCar[i]).getCapPerson();
}
if(choiceCar[i] instanceof Truck){ //货车载货量
totalCapThings += ((Truck)choiceCar[i]).getCapThings();
}
if(choiceCar[i] instanceof Pickup){ //皮卡载客和载货量
totalCapPerson +=((Pickup)choiceCar[i]).getCapPerson();
totalCapThings +=((Pickup)choiceCar[i]).getCapThings();
}
}
//输出总载货量和总载客量
System.out.println(">>>>>>>您所要租借的总载客量为: " + totalCapPerson + "人\t" + "总载货量为:" + totalCapThings + "吨");
int totalPrice = dayPrice*rentDay; //总价
System.out.println(">>>>>>>您总共需要支付: " + totalPrice + " 元");
System.out.println("感谢您使用嗒嗒租车系统,下次再见!");
input.close();
}
}写的不错哦~~学习了……将客户选择的车辆对象放入choiceCar数组这点很棒,我就觉得自己学的太死板了
提点小建议:
1、楼主的instanceof用法不是特别推荐啊,没有好好利用面向对象中的多态性,可以在父类里面直接定义属性——载客量和载货量
2、还有关于异常的处理,如果能加上就更完美了~~~
choiceCar[i]=allRent[num-1]; 请问这一句可以解释一下吗
厉害,我最近也在看慕客网,菜鸟阶段,大三了,希望好好学习一下,请多帮助。
好多病句!整个抄下来了!不过还是谢谢了!我一点不会写!最重要的你没抓dayprice!晕
为什么我自己写的是这样的?

这个程序有不足的地方吗? 子类中可以不写父类里的属性了
要输出序号的时候,输出的序号数大于车的数量这个怎么没有加个判断?
感谢楼主的代码,给了很大的启发。不然都觉得无从下手
谢谢 非常好
我想了一下午都没想好怎么写。。。
同问,Car[] allRent是什么?是不是用父类名定义子类组成的数组?
牛B 牛B
厉害,学的蛮好的
楼主,你父类为什么要用get与set的方法呢?get与set不是针对封闭类的吗?
Car[] allRent =
这样的写法是数组还是什么?如果是数组的话前面应该是类型才对。
如果是方法的话,那么【】代表数组的意思吗?
写得不错,值得我去借鉴
这个while循环写的好
你的main方法里面的while循环条件可以直接为true
不错不错
楼主写的很好 给了我很大的帮助 说声谢谢
为什么父类的属性name 和price 在子类中重新定义?
父类中有get和set,还有变量申明的,子类可以不用重复写,个人感觉是这样吧,新人,说错了别打脸
太棒了!
。。。
这个程序执行后,在输入0后,应该退出,但是还是提示用户选择租车数量
mark 写的很棒 学习了!!!!
额,看着起码是比我刚写的好些。