为了账号安全,请及时绑定邮箱和手机立即绑定
package com.bb;
/*
 * 所有汽车的父类
 */
public class car {
	private int carNumber; //定义汽车的序号
	private String carName; //定义汽车的名字
	private int carRentMoney; //定义汽车的租金
	
	
	public int getCarNumber() {
		return carNumber;
	}
	public void setCarNumber(int carNumber) {
		this.carNumber = carNumber;
	}
	public String getCarName() {
		return carName;
	}
	public void setCarName(String carName) {
		this.carName = carName;
	}
	public int getCarRentMoney() {
		return carRentMoney;
	}
	public void setCarRentMoney(int carRentMoney) {
		this.carRentMoney = carRentMoney;
	}

}
package com.bb;
/*
 * 定于用于载客的客车
 */
public class passengerCar extends car {
	private int carCapacity; //定义载客客车的载客量
	
	public passengerCar(int carNumber,String carName,int carRentMoney,int carCapacity){
		this.setCarNumber(carNumber);
		this.setCarName(carName);
		this.setCarRentMoney(carRentMoney);
		this.carCapacity=carCapacity;
	}

	
	public int getCarCapacity() {
		return carCapacity;
	}

	public void setCarCapacity(int carCapacity) {
		this.carCapacity = carCapacity;
	}
	
}
package com.bb;
/*
 * 构造一个既能载货又能载客的皮卡
 */
public class pickUp extends car {
	private int carCapacity; //定义皮卡的载客量
	private int carCarryCargo; //定义皮卡的载货量
	
	public pickUp(int carNumber,String carName,int carRentMoney,int carCapacity,int carCarryCargo){
		this.setCarNumber(carNumber);
		this.setCarName(carName);
		this.setCarRentMoney(carRentMoney);
		this.carCapacity=carCapacity;
		this.carCarryCargo=carCarryCargo;
	}

	
	public int getCarCapacity() {
		return carCapacity;
	}

	public void setCarCapacity(int carCapacity) {
		this.carCapacity = carCapacity;
	}

	public int getCarCarryCargo() {
		return carCarryCargo;
	}

	public void setCarCarryCargo(int carCarryCargo) {
		this.carCarryCargo = carCarryCargo;
	}

}
package com.bb;
/*
 * 构造用于载货的货车
 */
public class trunk extends car {
	private int carCarryCargo; //定义货车的载货量
	
	public trunk(int carNumber,String carName,int carRentMoney,int carCarryCargo){
		this.setCarNumber(carNumber);
		this.setCarName(carName);
		this.setCarRentMoney(carRentMoney);
		this.carCarryCargo=carCarryCargo;
	}

	
	public int getCarCarryCargo() {
		return carCarryCargo;
	}

	public void setCarCarryCargo(int carCarryCargo) {
		this.carCarryCargo = carCarryCargo;
	}

}
package com.bb;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class initialTest {

	public static void main(String[] args) {
		System.out.println("欢迎使用嗒嗒租车系统!");
		System.out.println("您是否要租车? :1 是  0 否");
		Scanner c=new Scanner(System.in);
		int k=c.nextInt();
		if(k==1){
			System.out.println("您可租车的类型及其价目表:");
			car [ ] carForRent={new passengerCar(1,"奥迪A4",500,4),new passengerCar(2,"马自达6",400,4),
			                              new pickUp(3,"皮卡雪6",450,4,2),new passengerCar(4," 金龙 ",800,20),
			                              new trunk(5,"松花江",400,4),new trunk(6,"依维柯",1000,20)};
			System.out.println("序号"+"\t"+"汽车名称"+"\t"+"租金"+"\t"+"\t"+"容量");
			
			//打印输出可供租的汽车清单
			for (car car : carForRent) {
				//用instanceOf来测试左边类型的对象是否是右边类型的实例,返回值为Boolean
				if(car instanceof passengerCar){
					//若它是客车类型的实例,则打印出客车应该有的属性值,这里注意强转,否则不会出现
					//passengerCar类的CarCapacity属性
					System.out.println(car.getCarNumber()+"\t"+car.getCarName()+"\t"+car.getCarRentMoney()
							                      +"/天"+"\t"+"载人:"+((passengerCar)car).getCarCapacity()+"人");
					
				}
				if(car instanceof pickUp){
					System.out.println(car.getCarNumber()+"\t"+car.getCarName()+"\t"+car.getCarRentMoney()
							                      +"/天"+"\t"+"载人:"+((pickUp)car).getCarCapacity()+"人"+"\t"
							                      +"载货:"+((pickUp)car).getCarCarryCargo()+"吨");
				}
				if(car instanceof trunk){
					System.out.println(car.getCarNumber()+"\t"+car.getCarName()+"\t"+car.getCarRentMoney()
		                                          +"/天"+"\t"+"载货:"+((trunk)car).getCarCarryCargo()+"吨");
				}
			}
	
			System.out.println("请输入您要租的汽车的数量");
			int totalNum=c.nextInt(); //用于接收汽车的总数量
			
			//调用集合框架List用于存储客户租车的清单
			List<car> carList=new ArrayList<car>();
			int p=0; //p变量用来拓展carList的容量
			
			List<car> carListPassenger=new ArrayList<car>(); //用来储存可载人的车辆
			List<car> carListTrunk=new ArrayList<car>();  //用来储存可载货的车辆
			
			int totalPassenger=0;; //用来存储总的载人数
			int totalCarrayCargo=0; //用来存储总的载货量
			int totalMoney=0; //用来计算租车的总资金
			
			/*
			 * 主要思想:用循环遍历在添加客户租车的序号,用集合框架List来存储客户租的车辆。
			 * 同时在客户输入序号的时候与三种车辆进行比对,计算相应车辆的载人数,载货量以及租车的总资金
			 * 同时添加到载人车辆或者载货车辆当中
			 */
			for(int i=0;i<totalNum;i++){
				System.out.println("请输入第"+(i+1)+"辆车的序号:");
				int num=c.nextInt(); //用于接收输入的汽车的序号
				carList.add(carForRent[num-1]);
				System.out.println("成功添加:"+carList.get(p).getCarName());
				if(carForRent[num-1] instanceof passengerCar){
					totalPassenger+=((passengerCar)carList.get(p)).getCarCapacity();
					totalMoney+=((passengerCar)carList.get(p)).getCarRentMoney();
					carListPassenger.add(carList.get(p));
				}
				if(carForRent[num-1] instanceof pickUp){
					totalPassenger+=((pickUp)carList.get(p)).getCarCapacity();
					totalCarrayCargo+=((pickUp)carList.get(p)).getCarCarryCargo();
					totalMoney+=((pickUp)carList.get(p)).getCarRentMoney();
					carListPassenger.add(carList.get(p));
					carListTrunk.add(carList.get(p));
				}
				if(carForRent[num-1] instanceof trunk){
					totalCarrayCargo+=((trunk)carList.get(p)).getCarCarryCargo();
					totalMoney+=((trunk)carList.get(p)).getCarRentMoney();
					 carListTrunk.add(carList.get(p));
				}
				p++;
			}
			
			System.out.println("请输入租车的天数:");
			int carRenDay=c.nextInt();
			totalMoney=totalMoney*carRenDay;
			
			System.out.println("********************可载人的车有********************");
			for (car car : carListPassenger) {
				System.out.println(car.getCarName());
			}
			
			System.out.println("********************可载货的车有********************");
			for (car car : carListTrunk) {
				System.out.println(car.getCarName());
			}
			
			System.out.println("********************租车的总价格********************");
			System.out.println(totalMoney*carRenDay);
			
		}else if(k==0){
			System.out.println("感谢您的再次使用!再见!");
			
		}else{
			System.out.println("您输入的信息有错!");
		}
	}
}


正在回答

75 回答

先说一下改进之处吧

1、出于代码的规范,还是希望您在写类的时候没个单词的首字母都能大写;

2、在initialTest这个类中有两个变量是不是没有打印出来?totalPassenger和totalCarrayCargo这两个变量是不是在下面的输出语句中输出一下呢?

3、这个为了这个程序的完美程度,建议看一下第三季中的异常机制,把异常加载这个程序中。

以上3点就是我认为你可以改进的地方。

不过从整体而言,这个程序,你这么来写代码已经很好了,在类的继承,foreach的使用以及各参数的传递上都做的挺好,并且你还用到了List集合,很棒哦~

后面的同学可以参看一下这个代码的,同时有什么不懂的也可以发问的

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

cicylee

for (car car : carForRent) 这条代码是是什么意思啊。
2014-11-16 回复 有任何疑惑可以回复我~
#2

MrAugus

同求楼上的问题
2014-11-18 回复 有任何疑惑可以回复我~
#3

爱_回家 回复 cicylee

使用foreach操作数组,在Java入门第一季里
2014-11-26 回复 有任何疑惑可以回复我~
#4

尼美松鸽

这里会抛出什么异常呢?
2015-01-04 回复 有任何疑惑可以回复我~
#5

爱德菲尔德

List集合那看不懂,以前有讲过么?
2015-02-15 回复 有任何疑惑可以回复我~
#6

Misterbobo 提问者

非常感谢!
2015-03-05 回复 有任何疑惑可以回复我~
#7

Jim_coder 回复 cicylee

for each 循环
2015-04-05 回复 有任何疑惑可以回复我~
#8

小肥虫

这个是图形化的界面吗
2015-04-29 回复 有任何疑惑可以回复我~
#9

Nicolas_angle

请问在父类下定义常量时用private标识符有什么特殊意义吗?为什么不用public
2015-06-12 回复 有任何疑惑可以回复我~
#10

qq_峰_7 回复 Nicolas_angle

public 是所有的对象都可以访问的,private是类本身以及其子类能访问。
2015-06-25 回复 有任何疑惑可以回复我~
#11

哥一无事处 回复 cicylee

遍历这个Car集合
2015-07-20 回复 有任何疑惑可以回复我~
#12

超级小菜鸟 回复 cicylee

遍历集合
2015-07-22 回复 有任何疑惑可以回复我~
#13

泰兰德

list集合语法 是啥 哪有讲解谢谢
2015-08-02 回复 有任何疑惑可以回复我~
#14

大明狗

car [ ] carForRent={new passengerCar(1,"奥迪A4",500,4)......}; 这段代码是什么意思?这到底是定义了一个数组还是new了多个对象?
2015-08-06 回复 有任何疑惑可以回复我~
#15

大明狗 回复 qq_峰_7

private定义属性的话,子类也可以使用吗??
2015-08-06 回复 有任何疑惑可以回复我~
#16

qq_飘逸的刘海_0

主要是解决不了挑出来车后把名字放一边的问题
2015-08-10 回复 有任何疑惑可以回复我~
#17

qq_然后学_0 回复 cicylee

遍历内容
2015-08-17 回复 有任何疑惑可以回复我~
#18

DLZer

最后输出的租车总价格是不是有问题啊!执行过 totalMoney=totalMoney*carRenDay; ,输出时再用System.out.println(totalMoney*carRenDay); 是不是重复了……
2015-09-19 回复 有任何疑惑可以回复我~
#19

Merderer零度 回复 Misterbobo 提问者

你是不是用了很多没有学到的东西吧?我为什么看你的测试类后面的看不懂,是第三季里的知识吗?
2015-10-17 回复 有任何疑惑可以回复我~
#20

mr1024 回复 爱德菲尔德

是的,楼猪是用了集合
2015-11-04 回复 有任何疑惑可以回复我~
#21

振shi少年 回复 cicylee

就是一个循环,用foreach是针对数组循环的,比for语句方便(百度一下)。
2015-11-26 回复 有任何疑惑可以回复我~
#22

nuli5 回复 qq_峰_7

private只能在类本身被访问。。。。。。
2015-12-13 回复 有任何疑惑可以回复我~
#23

cmy435787518_01 回复 cicylee

百度 增强循环
2015-12-14 回复 有任何疑惑可以回复我~
#24

11知足11

System.out.println("成功添加:"+carList.get(p).getCarName()); get(p)是什么意思?
2016-02-03 回复 有任何疑惑可以回复我~
#25

不为我蓝 回复 cicylee

foreach
2016-02-18 回复 有任何疑惑可以回复我~
#26

漠然7 回复 cicylee

这是一个foreach的循环语句,它的语法格式是 for(变量类型 变量名:数组名)
2016-05-06 回复 有任何疑惑可以回复我~
#27

深度慈悲的黑暗 回复 cicylee

前面有学过的 foreach的使用啊
2016-07-05 回复 有任何疑惑可以回复我~
#28

慕少5181823

请问调用集合框架是怎么回事 好像前面并没有讲过的
2016-07-22 回复 有任何疑惑可以回复我~
#29

咕噜dd 回复 DLZer

对他写重复了,最后只需要输出totalMoney就行了
2017-03-21 回复 有任何疑惑可以回复我~
#30

Biubiubiu丶U 回复 cicylee

增强for循环,遍历carForRent集合里面的元素,使用一个car类型的car对象来接收这些遍历的元素
2017-08-14 回复 有任何疑惑可以回复我~
#31

旅人不问归途

这里使用了构造器传递参数,那重写set()方法的意义何在
2017-10-27 回复 有任何疑惑可以回复我~
#32

qq_风之幻想_0

大佬问一下为啥父类car的属性都设置成了private?可以设置成public吗
2018-02-27 回复 有任何疑惑可以回复我~
#33

qq_风之幻想_0 回复 cicylee

看一下foreach的使用就明白了
2018-03-04 回复 有任何疑惑可以回复我~
#34

慕函数3291551 回复 cicylee

第一个car是汽车类,第二个car是一个名称。右边的含义是这个数组。一起的意思就是 创建一个汽车类的变量 变量名为car,其实这个car可以是x也可以是s。这只是一个名字。
2018-03-29 回复 有任何疑惑可以回复我~
#35

玖玖不离 回复 cicylee

类似for循环= =
2018-04-15 回复 有任何疑惑可以回复我~
查看32条回复

我想问一下为什么父类car中的属性都设置成了private?能设置成public吗?

0 回复 有任何疑惑可以回复我~
知识连起来才叫知识


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

this.setCarNumber(carNumber);

        this.setCarName(carName);

        this.setCarRentMoney(carRentMoney);

       为啥要加 this ,不能直接用this后面的 方法吗?


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

qq_风之幻想_0

个人理解他可能用的是set和get方法
2018-02-27 回复 有任何疑惑可以回复我~

你的代码其实还可以优化,比如说在每个继承Car的子类中的构造函数,可以利用super关键字,调用父类的序号、名称、租车,如

public class PassagerCar extends Car {

private int capacityPerson;

public PassagerCar(String aName, int aRentMoney, int aCapacityPerson) {

super(aName, aRentMoney);

this.capacityPerson = aCapacityPerson;

}

public int getCapacityPerson() {

return capacityPerson;

}

@Override

public String toString() {

return getName() + "\t" + getRentMoney() + "元/天" + "\t" + "载人:" + capacityPerson + "人";

}}

其次,在输出租车的价目表时,可通过重写每个子类的toString()方法来输出车的详细信息,如上所示。

!!!有一点,我想请教你一下,代码的设计上用到了多态的概念,但是在计算总载客量和总载货量时,需要用到instanceof来判断子类类型,并通过强制类型转换的方式来获得载人量或载货量,但是书上说不建议强制类型转换。那这个应该怎么处理呢?


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

请教一下租好的车的那个列表清单能输出来吗,就是把存在集合框架里的清单List<car> carList=new ArrayList<car>();打印出来,如果可以要怎样实现呢,

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

这贴够老,顺便附上我写的http://www.imooc.com/article/17914

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

package com.sram.beans;


public class Car {

private int numorder;

private String name;

private int price;

private String capacity;

public Car() {

super();

// TODO Auto-generated constructor stub

}

public Car(int numorder, String name, int price, String capacity) {

super();

this.numorder = numorder;

this.name = name;

this.price = price;

this.capacity = capacity;

}

public int getNumorder() {

return numorder;

}

public void setNumorder(int numorder) {

this.numorder = numorder;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getPrice() {

return price;

}

public void setPrice(int price) {

this.price = price;

}

public String getCapacity() {

return capacity;

}

public void setCapacity(String capacity) {

this.capacity = capacity;

}

@Override

public String toString() {

return  + numorder + ".  " + name + "  "

+ price + "元/天    " + capacity ;

}

}

package com.sram.test;


import java.util.ArrayList;

import java.util.HashSet;

import java.util.Scanner;


import com.sram.beans.Car;


public class CarrentalSystem {

public static void main(String[] args){

System.out.println("欢迎使用答答租车系统");

boolean b = true;

Scanner sc = new Scanner(System.in);

while(b){

System.out.println("您是否要租车:Y/N");

String a = sc.next();

if("Y".equals(a)){

System.out.println("您可租车类型及其价格表");

System.out.println("序号   "+"汽车名称  "+"租金           "+"容量");

ArrayList<Car> list = new ArrayList<Car>();

list.add(new Car(1, "奥迪A4", 500, "载人:4人"));

list.add(new Car(2, "皮卡6 ", 400, "载人:4人 载货:2吨"));

list.add(new Car(3, "金龙       ", 800, "载人:20人"));

list.add(new Car(4, "松花江   ", 400, "载货:4吨"));

for (Car car : list) {

System.out.println(car);

}

System.out.println("请输入你要租车的数量");

HashSet<String> set1 = new HashSet<String>();

HashSet<String> set2 = new HashSet<String>();

int c = sc.nextInt();

int g = 0;

int p = 0;

int o = 0;

for(int d = 1;d<=c;d++){

System.out.println("请输入第"+d+"辆车的序号");

int e = sc.nextInt();

if(e == 1||e == 2||e == 3||e == 4){

for (int f = 0; f < list.size(); f++) {

if(list.get(f).getNumorder() == e){

g+=list.get(f).getPrice();

if(e <= 3){

set1.add(list.get(f).getName());

if(e == 1){

p+=4;

}else if(e == 2){

p+=4;

}else if(e == 3){

p+=20;

}

}

if(e == 2||e == 4){

set2.add(list.get(f).getName());

if(e == 2){

o+=2;

}else if(e == 4){

o+=4;

}

}

}

}

}else{

System.out.println("您输入有误,请重新输入");

continue;

}


}

System.out.println("请输入租车天数");

int h = sc.nextInt();

if(h > 0){

int i = g*h;

System.out.println("您的账单");

System.out.println("***可载人的车有");

for (String str1 : set1) {

System.out.print(str1+"  ");

}

System.out.println("共载人"+p+"人");

System.out.println("***可载货的车有");

for (String str2 : set2) {

System.out.print(str2+"  ");

}

System.out.println("共载货"+o+"吨");

System.out.println("**租车总价钱"+i+"元");

}else{

System.out.println("你输入有误,请重新输入");

continue;

}

break;

}else if("N".equals(a)){

System.out.println("欢迎下次使用");

b = false;

}else{

System.out.println("您输入有误,请重新输入");

continue;

}

}


}

}

初学者,大家都给提提意见

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

for (car car : carForRent)

此句代码不是foreach吧,这个该怎么理解

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

为什么要强制转换载客数量那些 没太懂 不换怎么就输出不出来了

0 回复 有任何疑惑可以回复我~
首页上一页1234567下一页尾页

举报

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

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

进入课程
意见反馈 帮助中心 APP下载
官方微信