分享一下代码求大佬给一点优化思路

来源:12-2 项目问题解析 1

qq_泡沫_37

2018-08-30 19:38

import java.util.Scanner;
import java.lang.System;
//车的抽象类
public abstract class car {

  String carName;//车名
  int persons;//载客量
  double weights;//载货量
  int rent;//租金
    
  //给客车使用的构造方法
  public car(String carName,int persons,int rent) {
    super();
    this.carName=carName;
    this.persons=persons;
    this.rent=rent;
  }
    
  //给货车使用的构造方法
  public car(String carName,double weights,int rent) {
    super();
    this.carName=carName;
    this.weights=weights;
    this.rent=rent;
  }
    
  //给皮卡使用的构造方法
  public car(String carName,double weights,int persons,int rent) {
    super();
    this.carName=carName;
    this.weights=weights;
    this.persons=persons;
        this.rent=rent;
  }
    
    abstract void show();
}

//客车类
public class passengerCar extends car {
  public passengerCar(String carName,int persons,int rent) {
    super(carName,persons,rent);
  }
    
  //重写父类show方法。
    public void show(){
        System.out.println(carName+"  "+rent+"元/天  载人:"+persons+"人");
    }
}

//货车类
public class TruckCar extends car {
    public TruckCar (String carName,double weights,int rent){
        super(carName,weights,rent);
    }
    
    public void show(){
        System.out.println(carName+"  "+rent+"元/天  载货:"+weights+"吨");
    }
}

//皮卡类
public class pickupCar extends car {
    public pickupCar (String carName,double weights,int persons,int rent){
        super(carName,weights,persons,rent);
    }
    
    public void show(){
        System.out.println(carName+"  "+rent+"元/天  载人:"+persons+"人,载货:"+weights+"吨");
    }
}

//租车前台系统类
public class carRentSystem {

    public static void main(String[] args) {
    car[] cars={new TruckCar ("松花江",4.0, 400),new TruckCar ("依维柯",20.0,1000),new pickupCar ("皮卡雪", 4.0, 2, 450),new passengerCar ("马自达", 4, 400),new passengerCar ("奥迪A4", 4, 500)};
    System.out.println("欢迎使用嗒嗒租车系统:");
    System.out.println("您是否要租车:1是 0否");
    Scanner s1=new Scanner(System.in);
    int xz=s1.nextInt();//捕捉用户选择
    if (xz==1) {
        System.out.println("您可租车的类型及其价目表:");
        System.out.println("序号   汽车名字   租金   容量");
        for (int i = 0; i < cars.length; i++) {
            System.out.print(i+"   ");
            cars[i].show();
        }
        System.out.println("请输入您要租汽车的数量:");
        int sl=s1.nextInt();//捕捉用户输入的数量
        int[] sum=new int[sl];//用来存储用户输入的车的序号。
        for (int i = 0; i < sl; i++) {
            System.out.printf("请输入第%d辆车的序号:",i+1);
            sum[i]=s1.nextInt();//捕捉用户输入车的序号并存入数组
        }
        System.out.println("请输入租车天数:");
        int days=s1.nextInt();//捕捉用户输入的天数
        System.out.println("您的账单:");
        new carRentSystem ().bill(sum,cars,days);
    }else {
            System.out.println("再见");
            System.exit(0);
    }
  }
  
  //生存账单
  public void bill(int[] sum,car[] cars,int days) {
      int persons=0;//统计载客总数
      double weights=0;//统计载货总数
      int rents=0;//统计总金额
      System.out.println("***可载人的车有:");
      for (int i = 0; i < sum.length; i++) {
              //判断这个序号的车是否是客车不是就跳过这次循环
          if (sum[i]>2) {
              System.out.print(cars[sum[i]-1].carName+" ");
              persons+=cars[sum[i]-1].persons;
              rents+=cars[sum[i]-1].rent;
          }else {
                  continue;
          }
      }
      System.out.println("共载人:"+persons+"人");
      System.out.println("***可载货的车有:"); 
      for(int i=0;i< sum.length; i++) { 
              if (sum[i]<4) {
                      System.out.print(cars[sum[i]-1].carName+" ");
                      weights+=cars[sum[i]-1].weights;
                      //防止皮卡的金额被二次计算
                      if (sum[i]!=3) {
                              rents+=cars[sum[i]-1].rent;
                      }
              }
      }
      System.out.println("共载货:"+weights+"吨");
      System.out.println("租车总价格:"+rents*days+"元");
  }
}

代码我都是从eclipse一行一行抄下来的(这个竟然直接粘贴会写成一行),不过在这上面运行不了,应该是类名不对(他所有的类名都是HelloWorld的),不过我把运行效果截图了,求大佬帮我看看有什么可以优化的地方。https://img2.mukewang.com/5b87d71a0001fa6d19201080.jpg

写回答 关注

15回答

  • 慕移动8022910
    2019-04-24 16:27:05

    楼主想问一下,Car[] cars={}是啥,数组吗?

  • qq_东北虎_1
    2019-02-10 21:46:48

    如果用户输入的不是0和1会是什么结果

  • 小鑫666
    2019-02-10 15:59:28

    这是我看的最好的一个

  • 远方有琴
    2018-11-10 21:55:59

    楼主 我super();调用父类不行啊,报错

  • qq_毋几_0
    2018-10-31 22:42:31

    System.out.println("序号  汽车名字  租金  数量");       

     for (int i = 0; i < cars.length; i++) {            

        System.out.print(i+1+"   ");            

        cars[i].show();        

    }

    序号在输出的时候,改成i+1才对吧,不然按照0,1,2,3的时候,输入的序号对不上的。



    慕先生837...

    对的!

    2019-02-18 17:45:14

    共 1 条回复 >

  • FullStack丶
    2018-10-11 18:51:49

    很赞! 方法的重载那里用的很好

  • qq_你的专属豆沙包_0
    2018-10-09 21:35:54

    新手想问一下,楼主你的代码里,abstract void show()是什么意思啊,看不懂这里,可以解答一下吗0.0

    慕函数618... 回复qq_你的专...

    你去重新看下 4-3 Java 中的抽象类 这一节吧

    2018-11-20 15:47:18

    共 3 条回复 >

  • iMoocAdministrator
    2018-10-08 18:56:03

    记录一下 以后遇见了看

  • 取个名字真困难
    2018-10-02 22:10:33

    你的生成账单是确立在有规律性上的,如果用 isInstance 会不会好些

  • CNSDHH
    2018-09-30 15:24:08

    下面是我写的源代码,感兴趣的朋友可以看一下,欢迎交流学习。

    源代码放在了【码云】上,源码地址:

    https://gitee.com/cnsdhh/cnsdhh/tree/master/lang-java/com/cnsdhh/car

  • 初识者
    2018-09-19 17:19:47

    为什么我的super调用父类不行啊


  • Shaylee
    2018-09-10 21:36:02

    在请输入第几辆车的序号后面 应该每一次都是用户自己输入的 不是只按图片结果那样显示的吧?

  • 觉醒的架构师
    2018-09-10 18:13:25

    类名不得大写吗

  • sprites
    2018-09-01 20:44:59

    666

  • HD_阳光少年
    2018-08-31 09:12:20

    你这个觉得其实已经优化过了,较之其他人的代码,你这个还是很不错的

Java入门第二季 升级版

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

530559 学习 · 6091 问题

查看课程

相似问题