6-1看了些前辈们的代码后,自己写了一个,麻烦各位帮忙看看,怎么改进,谢谢!
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();
}
}