远赴山河万里
2020-03-17 22:28
package com.stduy; import java.util.Scanner; //从功能上分,总共分为三种,载人汽车,载货汽车,既载人又载货。 //对应Bus,Truck,PickUp public class Initail { private static int choice; static Scanner input = new Scanner(System.in); private static Car[] cars= new Car[]{ new Bus("巴士车",500,10), new Truck("卡车",300,5), new PickUp("皮卡车", 600, 6, 7) }; public static void main(String[] args) { System.out.println("欢迎使用租车系统"); //Java不需要先声明,和C不同。 // 原因是:类加载编译时就把程序的入口初始化了,执行时是JAVA虚拟机所识别的特定字节码, // C却是处理器可直接执行的二进制指令,编译的原理不一样,语言独特的特性与运行环境不一样。 IsNeed();//判断是否要租车 if(choice==1){ DisplayList(); //显示可租车清单 int num=RentNum();//获取租车的种类数 RentList[] rentLists=new RentList[num];//填写出租信息表 rentLists=RentForm(num); Pay(rentLists,cars);//生成账单 } } public static void IsNeed() { System.out.println("您是否要租车:1是 0否"); choice = input.nextInt(); if (choice == 0) { System.out.println("感谢使用,再见"); } else if (choice != 1) { System.out.println("输入错误,请重新输入"); } } //关键字instanceof,测试一个对象是否为一个类的实例 public static void DisplayList(){ System.out.println("您可租车的型号和价格表"); for(int i = 0; i<cars.length; i++){ if(cars[i] instanceof Bus){ Bus car=(Bus)cars[i];//强制类型转换 System.out.println((i + 1) + " " + car.name+" "+car.rent+"元/天"+" "+"核载"+car.person+"人"); } else if(cars[i] instanceof Truck){ Truck car=(Truck)cars[i]; System.out.println((i + 1) + " " + car.name+" "+car.rent+"元/天"+" "+"核载"+car.goods+"吨"); } else if(cars[i] instanceof PickUp){ PickUp car=(PickUp)cars[i]; System.out.println((i + 1) + " " + car.name+" "+car.rent+"元/天"+" "+"核载"+car.person+"人"+" "+"核载"+car.goods+"吨"); } } } //以下为输入部分 //获取租车数量 private static int RentNum(){ System.out.println("请输入您要总共租车的种类数:"); int RentNum=input.nextInt(); return RentNum; } //租车信息表 private static RentList[] RentForm (int num){ //租车信息对象数组 RentList[] rentLists=new RentList[num]; for(int i=0;i<num;i++){ //型号 System.out.println("请输入租的第"+(i+1)+"类车的信息"); System.out.print("型号:"); int Model=input.nextInt(); //该型号的数量 System.out.print("数量:"); int Num=input.nextInt(); //该型号租的天数 System.out.print("天数:"); int Day=input.nextInt(); //将信息存入对象数组 rentLists[i]=new RentList();//这步不能掉 rentLists[i].setModel(Model); rentLists[i].setNum(Num); rentLists[i].setDay(Day); } return rentLists; } //生成账单 private static void Pay(RentList[] rentLists,Car[] cars){ //打印清单 System.out.println("************结算清单*************"); System.out.println("型号 数量 租用天数"); double SumMoney=0; for(int i=0;i<rentLists.length;i++){ //用get方法获得数据,更好的封装RentList类 int Model=rentLists[i].getModel(); int Num=rentLists[i].getNum(); int Day=rentLists[i].getDay(); double Rent=cars[i].getRent(); SumMoney+=Num*Day*Rent; System.out.println(Model+" "+Num+" "+Day); } System.out.println("您总共要支付"+SumMoney+"元"); } //这里也可以通过重写toString方法输出 //toString方法为Object类中的方法,返回对象的哈希码,即地址 //不重写toString方法,则直接输入对象是输出该对象的地址 }
//父类,车
package com.stduy; //车 public class Car { protected String name;//车型,protect方便继承 protected double rent;//租金 public Car(String name,double rent){//用构造方法初始化 this.name=name; this.rent=rent; } public String getName() { return name; } public double getRent() { return rent; } public void setName(String name) { this.name = name; } public void setRent(double rent) { this.rent = rent; } }
//载人车
package com.stduy; //Bus,载人汽车 public class Bus extends Car { //子类的构造过程当中必须调用其父类的构造方法 //无参时隐式执行super(),子类如果没有显式调用,父类又没有无参的构造方法则编译出错 //java里一个类可以有多个构造方法 //super关键字必须放在第一行 protected int person;//载人数 //构造方法 public Bus(String name, double rent,int person) { super(name, rent); this.person=person; } public int getPerson() { return person; } public void setPerson(int person) { this.person = person; } }
//载货车
package com.stduy; //货车 public class Truck extends Car{ protected double goods;//货物 //构造方法 public Truck(String name, double rent, double goods) { super(name, rent); this.goods=goods; } public double getGoods() { return goods; } public void setGoods(double goods) { this.goods = goods; } }
//既载货又载人
package com.stduy; //皮卡,既能载货又能载人 public class PickUp extends Car { protected int person;//载人数 protected double goods;//货物 //构造方法 public PickUp(String name, double rent,int person,double goods) { super(name, rent); this.person=person; this.goods=goods; } public int getPerson() { return person; } public double getGoods() { return goods; } public void setPerson(int person) { this.person = person; } public void setGoods(double goods) { this.goods = goods; } }
//租车信息表
package com.stduy; //租车信息表 public class RentList { private int Model;//型号 private int Num;//要租该型号的数量 private int Day;//要租该型号的天数 public int getModel() { return Model; } public int getNum() { return Num; } public int getDay() { return Day; } public void setModel(int model) { Model = model; } public void setNum(int num) { Num = num; } public void setDay(int day) { Day = day; } }
膜拜大佬,大佬学习多久了
为啥我自己就写不出来呢??难过
大神厉害!我自己按照你的这个写了一遍,发现了一个bug;如果只租两种或一种车,结果就会出现错误。建议把double Rent = cars[i].getRent();改成double Rent = cars[Model-1].getRent();
你好,想问个问题,你的Pay方法中,rentList 和 cars的型号没有判断是否匹配,如果用户不按照顺序选择车的类型,车的租金应该会匹配有误吧
写掉了要算的总核载量和总核载人数,不过大同小异,就那里加几行
附一下运行结果
Java入门第二季 升级版
530655 学习 · 6091 问题
相似问题