为了账号安全,请及时绑定邮箱和手机立即绑定

来交作业了!备注了知识点

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;
    }
}


正在回答

6 回答

膜拜大佬,大佬学习多久了

0 回复 有任何疑惑可以回复我~
#1

远赴山河万里 提问者

两天...
2020-04-15 回复 有任何疑惑可以回复我~

为啥我自己就写不出来呢??难过


0 回复 有任何疑惑可以回复我~

大神厉害!我自己按照你的这个写了一遍,发现了一个bug;如果只租两种或一种车,结果就会出现错误。建议把double Rent = cars[i].getRent();改成double Rent = cars[Model-1].getRent();


0 回复 有任何疑惑可以回复我~
#1

远赴山河万里 提问者

对,这里是有问题,感谢指正,我也是才学java,写C的习惯总是改不掉,所以才备注知识点。
2020-03-20 回复 有任何疑惑可以回复我~
#2

远赴山河万里 提问者

这里的算法其实可以有很多种实现,主要是习惯语法,感谢指正
2020-03-20 回复 有任何疑惑可以回复我~

你好,想问个问题,你的Pay方法中,rentList 和 cars的型号没有判断是否匹配,如果用户不按照顺序选择车的类型,车的租金应该会匹配有误吧

0 回复 有任何疑惑可以回复我~
#1

远赴山河万里 提问者

对,这里是有问题,我写完也发觉了,但是后来我又想实现删除等功能,我就用链表实现了,这个就被推翻了,所以就没改。望见谅,只是提供一个框架,里面的数据结构可以自己设计,才疏学浅,抱歉。
2020-03-19 回复 有任何疑惑可以回复我~
#2

慕圣大越越

把double Rent = cars[i].getRent();改成double Rent = cars[Model-1].getRent();就匹配喽
2020-03-19 回复 有任何疑惑可以回复我~

写掉了要算的总核载量和总核载人数,不过大同小异,就那里加几行

0 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//5e70def00001061819201030.jpg

附一下运行结果

0 回复 有任何疑惑可以回复我~
#1

慕雪5409074

你的这个继承写的不错,思路明确,很多人写的继承,子类啥事都不做,全让父类一个人做了,把父类当成全能车。
2020-04-15 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       529993    人
  • 解答问题       6086    个

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

进入课程

来交作业了!备注了知识点

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信