阶段练习
面向对象的设计过程
1.分析需求
2.找名词(类,属性)
父类:汽车:品牌,车牌,日租金
子类:
轿车:型号
客车:座位数
汽车业务类
汽车租赁管理类
3.动词(方法)
汽车类(计算租金)
汽车业务类(初始化车信息,提供租赁服务)
汽车租赁管理类(入口和系统界面)
4.优化设计
父子类的关系:汽车类—>轿车,客车(子类)
汽车类(抽象类).(计算租金):抽象方法
5.梳理运行过程
汽车类业务(MotorOpration)
初始化车---->构造车(轿车,客车)
–>构造的这些车用对象数组存储(Car[])
(Car car1=new Motoncar(…); )
(Car car2=new Bus(…) ; )
租车
根据用户条件去查询相应的车辆,并返回相应的车辆,用户的租车条件:方法参数
循环遍历车辆数组Car
拿到的每一辆车(MotorCar,Bus)
将车辆转换为自己实际的子类型
instanceof
根据用户不同的条件进行比较
MotorCar:brand,moder
Bus:brand,setnumber
发下符合用户条件的车辆进行返回
测试和调试
定义车子父类和抽象方法租金的计算
package carRental;
public abstract class Car {
private String breed;
private String numberplace;
private int rent;
public Car(){
}
public Car(String breed,String numberplace,int rent){
this.breed=breed;
this.numberplace=numberplace;
this.rent=rent;
}
public void setBreed(String breed) {
this.breed = breed;
}
public String getBreed() {
return breed;
}
public void setRent(int rent) {
this.rent = rent;
}
public int getRent() {
return rent;
}
public void setNumberplace(String numberplace) {
this.numberplace = numberplace;
}
public String getNumberplace() {
return numberplace;
}
public abstract float countrent (int day);
}
定义子类轿车
package carRental;
public class Motorcar extends Car {
private String moder;
public void setModer(String moder) {
this.moder = moder;
}
public String getModer() {
return moder;
}
public Motorcar(){
}
public Motorcar(String breed,String numberplace,int rent,String moder){
super(breed,numberplace,rent);
this.moder=moder;
}
public float countrent(int day) {
float price = this.getRent();
if (day > 7 && day <= 30) {
price = price * 0.9f;
}
else if (day>30&&day<=150){
price=price*0.8f;
}
else if (day>150){
price=price*0.7f;
}
else price=day*price;
return price;
}
}
定义子类客车
package carRental;
public class Bus extends Car {
private int setnumber;
public Bus(){
}
public void setSetnumber(int setnumber) {
this.setnumber = setnumber;
}
public int getSetnumber() {
return setnumber;
}
public Bus(String breed, String numberplace, int rent, int setnumber){
super(breed,numberplace,rent);
this.setnumber=setnumber;
}
public float countrent (int day){
float price = this.getRent();
if (day >= 3 && day < 7) {
price = price * 0.9f;
}
else if (day>=7&&day<=30){
price=price*0.8f;
}
else if (day>30&&day<150){
price=price*0.7f;
}
else if (day>=150){
price=price*0.6f;
}
else price=day*price;
return price;
}
}
定义汽车业务类
package carRental;
public class Carbusiness {
Car car[]=new Car[8];
public void init(){
car[0]=new Motorcar("宝马","京NY28588",800,"x6");
car[1]=new Motorcar("宝马","京CNY3284",600,"550i");
car[2]=new Motorcar("别克","京NT37465",300,"林荫大道");
car[3]=new Motorcar("别克","京NT96968",600,"GL8");
car[4]=new Bus("金杯","京6566754",800,16);
car[5]=new Bus("金龙","京8696997",800,16);
car[6]=new Bus("金杯","京9696996",1500,34);
car[7]=new Bus("金龙","京8696998",1500,34);
}
public Car rentservice(String breed,String moder,int setnumber){
Car car1=null;
for (Car car2 :car){
if (car2 instanceof Motorcar){
Motorcar motorcar=(Motorcar)car2;
if (motorcar.getBreed().equals(breed)&&motorcar.getModer().equals(moder)){
car1=car2;
break;
}
}
else if (car2 instanceof Bus){
Bus bus=(Bus)car2;
if (bus.getBreed().equals(breed)&&bus.getSetnumber()==setnumber){
car1= bus;
break;
}
}
}
return car1;
}
}
控制台界面
package carRental;
import java.util.Scanner;
public class Manage {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("********欢迎光临XX汽车租赁公司********");
System.out.println("请输入想租车的类型:1.小轿车 2.客车");
int a=scanner.nextInt();
String moder="";
int setnumber=0;
String breed="";
switch (a){
case 1:
System.out.println("请输入汽车品牌1.宝马, 2.别克");
breed=(scanner.nextInt()==1)?"宝马":"别克";
if (breed.equals("宝马")){
System.out.println("请输入汽车型号1.x6 2.550i");
moder=(scanner.nextInt()==1)?"x6":"550i";
}
else {
System.out.println("请输入汽车型号1.林荫大道 2.GL8");
moder=(scanner.nextInt()==1)?"林荫大道":"GL8";
}
break;
case 2:
System.out.println("请输入客车品牌1.金杯, 2.金龙");
breed=(scanner.nextInt()==1)?"金杯":"金龙";
System.out.println("请输入客车座位1.16 2.34");
setnumber=(scanner.nextInt()==1)?16:24;
break;
}
System.out.println("请输入想租赁的天数:");
int day=scanner.nextInt();
Carbusiness carbusiness=new Carbusiness();
carbusiness.init();
Car car2= carbusiness.rentservice(breed,moder,setnumber);
if (car2 instanceof Motorcar){
Motorcar motorcar=(Motorcar) car2;
float price= motorcar.countrent(day);
System.out.println("给您分配的车辆是"+car2.getBreed()+((Motorcar) car2).getModer()+"车牌是"+car2.getNumberplace()+"价格是"+price);
}
else if (car2 instanceof Bus){
Bus bus=(Bus)car2;
float price=bus.countrent(day);
System.out.println("给您分配的车辆是"+car2.getBreed()+((Bus) car2).getSetnumber()+"车牌是"+car2.getNumberplace()+"价格是"+price);
}
}
}
遇到的问题
一,
在 Java 中,0.9F
是一个浮点数(Floating Point Number)的文本表示,其中 F
或 f
表示该数字是一个 float 类型的常量。在 Java 中,浮点数有两种基本类型:
-
float
:这是单精度浮点数,它占用 32 位内存。 -
double
:这是双精度浮点数,它占用 64 位内存。默认情况下,当你在 Java 中写一个浮点数常量(如
0.9
)时,编译器会假设它是double
类型的。如果你想明确地指定一个float
类型的常量,你需要在数字后面加上F
或f
。因此,0.9F
是一个float
类型的常量,它的值是 0.9。
二,
在 Java 中,增强型for循环(Enhanced for Loop)也被称为“for-each”循环,它是 Java 5 引入的一种新的循环结构,用于简化数组和集合的遍历。增强型for循环的语法如下:
java
复制
for (声明语句 : 表达式) {
// 循环体
}
这里的“声明语句”是一个变量声明,它的类型必须与“表达式”所产生的一系列元素类型相匹配。表达式是产生一系列元素的表达式,比如数组或实现了 Iterable
接口的集合。
增强型for循环的例子:
int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
System.out.println(number);
}
在这个例子中,增强型for循环遍历了整数数组 numbers
,在每次迭代中,变量 number
依次被赋值为数组中的下一个元素,直到数组遍历完成。
增强型for循环也可以用于集合:
三,
只有调用方法时,方法内的数据才会载入
四,三目运算符
setnumber=(scanner.nextInt()==1)?16:24;
。表达式是产生一系列元素的表达式,比如数组或实现了 Iterable
接口的集合。
增强型for循环的例子:
int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
System.out.println(number);
}
在这个例子中,增强型for循环遍历了整数数组 numbers
,在每次迭代中,变量 number
依次被赋值为数组中的下一个元素,直到数组遍历完成。
增强型for循环也可以用于集合:
三,
只有调用方法时,方法内的数据才会载入
四,三目运算符
setnumber=(scanner.nextInt()==1)?16:24;
当输入为1时setnumber=16,不是一时setnumber=24;