6-1看了些前辈们的代码后,自己写了一个,麻烦各位帮忙看看,怎么改进,谢谢!

来源:12-1 综合练习

慕圣0830664

2017-04-27 21:50

 

import java.util.Scanner;

class Car{ //定义父类
 public int id; //编号
 public String name; //名字
 public float rent; //租金
 public int number; //载人数
 public float weight; //载货量
 //定义构造方法
 public Car(int id, String name, float rent, int number, float weight){
  this.id = id;
  this.name = name;
  this.rent = rent;
  this.number = number;
  this.weight = weight;
 }
 //重写父类中的toString()方法
 public String toString(){
  return id+"\t"+name+"\t "+rent+"元/天\t载人:"+number+"人, 载货:"+weight+"吨";
 }
}
//定义一个子类  载人汽车
class Bus extends Car{
 public Bus(int id, String name, float rent, int number){
  super(id, name, rent, number, 0);
 }
 //重写toString()方法
 public String toString(){
  return id+"\t"+name+"\t "+rent+"元/天\t载人:"+number+"人";
 }
}
//定义一个子类  载货汽车
class Truck extends Car{
 public Truck(int id, String name, float rent, float weight){
  super(id, name, rent, 0, weight);
 }
 //重写toString()方法
 public String toString(){
  return id+"\t"+name+"\t "+rent+"元/天\t载货:"+weight+"吨";
 }
}

class CarRental{
 private Scanner sc = new Scanner(System.in);
 private Car[] car = new Car[6]; //定义一个数组,用来存放所有Car类对象
 
 public void launch(){ //启动方法
  System.out.println("欢迎使用答答租车系统:");
  while(true){
   System.out.println("您是否要租车:1是 0否");   
   try{
    int key = input(); //key为switch()入口的钥匙,
    switch(key){
     case 1:
      create(); //调用方法
      menu();
      count();
     case 0:
      break; //跳出循环
     case -1:
      System.out.println("您的输入有误!请根据提示输入数字命令!");
      continue;
     default:
      System.out.println("你的输入有误!请重新输入!");
      continue;
    }
    System.out.println("谢谢使用!客官慢走!");
    break; //程序结束
   }catch(Exception e){ //对异常进行捕获,并输出捕获到的异常信息
    System.out.println(e.getMessage());
   }
  }
 }
 //菜单显示
 public void menu(){
  System.out.println("您可租车的类型及其价目表:");
  System.out.println("序号\t" + "汽车名称   " + "租金\t\t  " + "容量");
  //使用循环遍历, 利用多态,依次调用数组元素的toString()方法,
  for (Car c : car)
   System.out.println(c.toString()); 
 }
 //初始化Car数组
 public void create(){
  car[0] = new Bus(1, "奥迪A4", 500, 4);
  car[1] = new Bus(2, "马自达6", 400, 4);
  car[2] = new Car(3, "皮卡雪6", 450, 4, 2);
  car[3] = new Bus(4, "金龙", 800, 20);
  car[4] = new Truck(5, "松花江", 400, 4);
  car[5] = new Truck(6, "依维柯", 1000, 20);
 }
 //对从键盘输入的信息进行处理
 public int input(){
  int k;
  try{
   k = sc.nextInt();
   return k; //如果输入合法,返回输入的值
  }catch(Exception e){
   sc = new Scanner(System.in); //如果输入不合法,捕获抛出的异常,并重新创建一个Scanner对象
   return -1; //如果输入不合法,返回-1
  }
 }
 //统计载人数,载人的汽车,载货量,载货的汽车,总租金, 该方法声明抛出异常
 public void count() throws Exception{
  int num; //租汽车的数量
  while(true){
   System.out.println("请输入您要租汽车的数量:");
   num = input();
   if (num < 1){
    System.out.println("您的输入有误,请输入有效的数字命令!");
    continue; //输入不合法,重新输入
   }else
    break; //如果输入合法,则跳出循环
  }  
  
  int[] nums = new int[num]; //用来存放用户输入的信息,数组长度为租汽车的数量
  int index; //用来存放用户一次输入的信息
  for (int i=0; i<num; i++){
   System.out.println("请输入第" + (i+1) + "辆车的序号:");
   index = input(); //调用方法对输入的信息进行处理
   if (index>0 && index<=car.length){
    nums[i] = index-1; //如果输入合法,将信息存入数组,并与数组的下标一致(index-1)
   }else
    throw new Exception("您的输入有误!请重新开始输入!"); //若输入不合法,抛出异常
  }
  
  int date; //租车的天数
  System.out.println("请输入租车天数:");
  date = input();
  if (date < 1) //若输入不合法,抛出异常
   throw new Exception("您的输入有误!请输入有效的数字命令!");
  //调用统计方法
  countSum(nums, date);  
 }
 
 public void countSum(int[] nums, int date){
  int sumNum = 0; //总载人数
  float sumWeight = 0; //总载货量
  float sumRent = 0; //一天的总租金
  String sumName1 = ""; //载人汽车的名字集合
  String sumName2 = ""; //载货汽车的名字集合
  //使用循环对数组进行遍历  载人数相加,载人汽车名字相加 
  for (int n : nums)
  { //如果是载人汽车
   if (0 != car[n].number){
    sumName1 += car[n].name + " ";
    sumNum += car[n].number;
   }
   //如果是载货汽车,载货量相加,载货汽车名字相加
   if (0 != car[n].weight){
    sumName2 += car[n].name + " ";
    sumWeight += car[n].weight;
   }
   sumRent += car[n].rent; //不管是载人还是载货,租金都要相加
  }
  
  System.out.println("您的账单:");
  System.out.println("***可载人的车有:" + "\n" + sumName1 + " 共载人:" + sumNum + "人");
  System.out.println("***可载货的车有:" + "\n" + sumName2 + " 共载货:" + sumWeight + "吨");
  System.out.println("***租车总价格:" + sumRent*date + "元");
 }
}
//启动类
public class TestCarRental_5 {
 public static void main(String[] args){
  new CarRental().launch();
 }
}









 

写回答 关注

2回答

  • 哆啦L梦
    2017-04-28 17:06:33
    已采纳

     if (index>0 && index<car.length){

    改成

     if (index>0 && index<=car.length){

    慕圣0830...

    非常感谢!好细心呀

    2017-04-29 00:51:53

    共 1 条回复 >

  • 哆啦L梦
    2017-04-28 17:00:06

    欢迎使用答答租车系统:

    您是否要租车:1是 0否

    1

    您可租车的类型及其价目表:

    序号 汽车名称   租金  容量

    1 奥迪A4 500.0元/天 载人:4人

    2 马自达6 400.0元/天 载人:4人

    3 皮卡雪6 450.0元/天 载人:4人, 载货:2.0吨

    4 金龙 800.0元/天 载人:20人

    5 松花江 400.0元/天 载货:4.0吨

    6 依维柯 1000.0元/天 载货:20.0吨

    请输入您要租汽车的数量:

    3

    请输入第1辆车的序号:

    2

    请输入第2辆车的序号:

    3

    请输入第3辆车的序号:

    6

    您的输入有误!请重新开始输入!

    您是否要租车:1是 0否


Java入门第二季 升级版

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

530643 学习 · 6091 问题

查看课程

相似问题