继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

答答租车项目的最容易理解的实现(个人认为)

没有梦想的咸魚
关注TA
已关注
手记 4
粉丝 0
获赞 83

从大脑一片空白到最后一步步把代码写出来,经历了很多,也看了很多慕友写的代码,都太厉害了,但有一些地方还是难以理解。
故此我用自己的理解把这个项目写了下来,相信相对于初学的慕友应该能够看得懂,尤其是关于对象数组这块,我记得对象数组老师应该是没有讲到过的(也有可能我记错了,但是翻了好几遍真没发现啊。。),因此自己问了度娘关于这方面的知识,才断断续续的写了出来,当然也借鉴了其他慕友的代码,启发也很大,总之,感谢这个平台指引我迈入这个领域,要学的还要太多,一起加油吧!
父类Car.java

package com.practise;

public class Car {
    //首先定义父类的属性:车的品种与每天的租金。
    public String name;
    public float rent;
}

子类Bus.java

package com.practise;
/*
 * 子类为巴士,继承父类,只具有载客的属性
 */
public class Bus extends Car {
    //定义属性载客量,但由于载客这个属性是巴士独有的,因此采用private修饰
    private int carry;
    //有参的构造方法,定义Bus的三个属性:名称、载客量、每天的租金
    public Bus(String name,int carry,float rent){
        this.name=name;
        this.carry=carry;
        this.rent=rent;
    }
    public int getCarry() {
        return carry;
    }
    //toString 方法,将输出的值转化为字符串
    public String toString() {
        return name+"\t"+rent+"元/天\t"+carry+"人\t";
    }

}

子类Truck.java

package com.practise;
/*
 * 子类为货车,继承父类car,具有载客的属性
 */
public class Truck extends Car {
    private float load;//私有属性为载货量
    //定义对象的三个属性:类型、载重、每天的租金,并将其传递进来
    public Truck(String name,float load,float rent){
        this.name=name;
        this.load=load;
        this.rent=rent;
    }
    public float getLoad() {
        return load;
    }
    //toString 方法,将输出的值转化为字符串
    public String toString() {
        return name+"\t"+rent+"元/天\t"+load+"吨\t";
    }
}

子类Pika.java

package com.practise;

public class Pika extends Car {
    private int carry;//两个私有属性:既能载人,又能载货
    private float load;
    //定义皮卡的四个属性
    public Pika(String name,int carry,float load,float rent){
        this.name=name;
        this.carry=carry;
        this.load=load;
        this.rent=rent;
    }
    public int getCarry() {
        return carry;
    }
    public float getLoad() {
        return load;
    }
    public String toString() {
        return name+"\t"+rent+"元/天\t"+carry+"人\t"+load+"吨\t";
    }

}

测试类Initial

package com.practise;
import java.util.Scanner;
public class Initial {
    public  static void main(String[] args) {
        //创建一个长度为6的对象数组,用来存放所有车的参数
        Car[] car=new Car[6];
        //创建6个车的对象,并赋值;由于是继承关系,所以可以直接指向子类对象
        Car c1=new Truck("小货车",3.5f,500f);
        Car c2=new Truck("大货车",7.8f,800f);
        Car c3=new Bus("小客车",12,400f);
        Car c4=new Bus("大客车",25,900f);
        Car c5=new Pika("小皮卡",4,1.1f,600f);
        Car c6=new Pika("大皮卡",6,2.5f,1100f);
        //将对象放到数组内
        car[0]=c1;
        car[1]=c2;
        car[2]=c3;
        car[3]=c4;
        car[4]=c5;
        car[5]=c6;
        //导入输入函数
        Scanner input=new Scanner(System.in);
        //进入主界面
        System.out.println("****欢迎您使用答答租车系统****");
        System.out.println("请问您是否租车"); 
        System.out.println("是:输入1 否:输入任意键退出");
        if(input.nextInt()==1){
            System.out.println("您可租车的类型以及价目表");
            System.out.println("序号\t汽车名称\t租金\t容量\t");
            //使用for循环遍历车库中的车
            for(int i=0;i<car.length;i++){
                System.out.println((i+1)+"\t"+car[i]);
            }
            System.out.println("请输入您想要租汽车的数量");
            int carNum;
            carNum=input.nextInt();
            //建立一个新的数组carTotal,用来保存客户所选的车型,数组类型为Car。
            Car[] carTotal=new Car[carNum];
            for(int j=1;j<=carNum;j++){
                System.out.println("请输入第"+j+"辆车的序号");
                int num;
                num=input.nextInt();
                //将用户所选的车的序号对应的车型放入数组carTotal中
                carTotal[j-1]=car[num-1];
            }
            System.out.println("请输入租车天数:");
            int carDay;
            carDay=input.nextInt();
            System.out.println("您的账单:");
            //调用方法-总载客数
            totalCarry(carTotal);
            //调用方法-总载货量
            totalLoad(carTotal);
            //调用方法-总价格
            totalPay(carTotal,carDay);
        }else{
            System.out.println("输入错误,退出");
        }
        input.close();//关闭输入函数
    }
    public static void totalCarry(Car[] carTotal){
        int k=0;//定义总载客数 k
        System.out.println("***可载人的车有:");
        for(int i=0;i<carTotal.length;i++){
            //确认值的类型是否为Bus类型
            if(carTotal[i] instanceof Bus){
                //如果是Bus类型,则获取数组中对应的值
                k+=((Bus)carTotal[i]).getCarry();
                System.out.print(((Bus)carTotal[i]).name+"\t");
            }else if(carTotal[i] instanceof Pika){
                k+=((Pika)carTotal[i]).getCarry();
                System.out.print(((Pika)carTotal[i]).name+"\t");
            }
        }
        System.out.println("共载人数:"+k+"人");
    }
    public static void totalLoad(Car[] carTotal){
        float m=0f;//定义总载货量 m
        System.out.println("***可载货的车有:");
        for(int i=0;i<carTotal.length;i++){
            if(carTotal[i] instanceof Truck){
                m+=((Truck)carTotal[i]).getLoad();
                System.out.print(((Truck)carTotal[i]).name+"\t");
            }else if(carTotal[i] instanceof Pika){
                m+=((Pika)carTotal[i]).getLoad();
                System.out.print(((Pika)carTotal[i]).name+"\t");
            }
        }
        System.out.println("共载货:"+m+"吨");
    }
    public static void totalPay(Car[] carTotal,int carDay){
        float n=0;//定义总费用 n
        for(int i=0;i<carTotal.length;i++){
            n+=carTotal[i].rent;
        }
        n*=carDay;
        System.out.println("租车的总费用为:"+n);
    }
}

有需要改进的地方希望各位厉害的慕友能够指出谢谢!图片描述

打开App,阅读手记
23人推荐
发表评论
随时随地看视频慕课网APP

热门评论

这篇代码写的逻辑清楚 很好理解   赞 赞

对象和数组在第一季。。。你看的是第二季,当然找到了

你好,我也是初学者,你写的看起来很有条理,也很清楚,但是我觉得代码量感觉有点大

查看全部评论