恒定橡果的java习题八

1.骑电瓶车游览景点

【问题描述】编写一个java应用程序,模拟骑电瓶车游览景区10个景点中任意4个以上的景点,景点名称为0,1,2...7,8,9。景点与景点之间的距离可以用下图

表示,电瓶车电池初始电量为100个单位,每一公里消耗电量10个单位,当预计无法到达下一个景点时就需要在当前景点更换电池,更换后电池保持满的

状态。具体要求如下:

1、分别创建电池、电瓶车、地图、以及主类Visit。

2、接受输入需要游览的景点名称,输入字符表示结束。

3、输出游览过程中的行为,如例子所示。

各景点里程图

           0        1       2        3        4        5       6       7       8

1       2.3

2       4.6      3.4

3       5.6      4.5     5.1

4       4.8      3.7     6.1     3.5

5       3.8      3.1     4.3     1.5     3.2

6       4.8      4.2     5.3     3.3     3.7      2.4

7       3.8      4.1     6.3     3.9     1.9      3.3      6.4

8       5.8      7.1     5.5     3.4     4.2      5.4      5.6     4.5

9      4.8      6.1     2.3     3.4     3.7      4.4      6.6     3.7       4.2
【输入形式】

     输入字符,每行一个景点,最后一个非景点字符。


【输出形式】

游览过程行为,包括:

1、Visit【景点】

2、Change battery at【景点】

3、From【景点】to【景点】battery consume 【电量】 remain 【电量】

每个动作单独一行输出。
【样例输入】

0

1

2

3

A


【样例输出】

Visit 0

From 0 to 1 battery consume 23 remain 77

Visit 1

From 1 to 2 battery consume 34 remain 43

Visit 2

Change battery at 2

From 2 to 3 battery consume 51 remain 49

Visit 3
【样例说明】

如果输入的合法景点少于四个,显示输入错误信息:

Please input number >= 4

并退出程序

public class main {
    public static void main(String[] args) {
        int [] positionArray=new int[10];//设置一个能存放11个数的数组(可以根据输入需求更改不得少于4就行)
        Scanner scanner = new Scanner(System.in);
        int number=0;
        while(scanner.hasNextInt()&& number<10){
            positionArray[number++]=scanner.nextInt();
        }//如果输入的是整数,且number小于10,那么把数放入数组中,number+1
        if(number<4){
            System.out.println("number should be big than 4");}//如果输入的数少于4个那么输出指定信息
        ElectricityCar myCar=new ElectricityCar(positionArray[0]);//创建一个新的Car类
        for (int i=0;i<number-1;i++){
            myCar.drive(positionArray[i],positionArray[i+1]);//调用drive方式输出
            if(i==number-2){
                System.out.println("Visit"+positionArray[i+1]);
            }//如果是最后一个数,那么额外输出一次代表在最后一个景点停留,展示最后一个景点
        }

    }
}
class ElectricityCar{//定义电车类
    private Map mymap=new Map();//创建一个新的Map类(地图类)
    Battery myBattery=new Battery();//创建一个新的Battery类(电池类)
    int position;
    private void visit(int to){
        System.out.println("Visit"+to);
    }//输出当前景点位置
    ElectricityCar(int position){
        this.position=position;
    }//更新景点
    void drive(int from, int to) {
        if (from > 9 || to < 0){
            return;}//如果输入的数不在景点范围内,那么直接退出
        new ElectricityCar(from);//更新景点位置,确定出发点在哪
        visit(from);//输出景点位置
        double distance = mymap.getDistance(position, to);//计算出发点到新景点之间的距离
        if (!myBattery.consume(distance * 10)) {
            changeBattery();//重置电瓶电量
            myBattery.consume(distance * 10);//计算剩余电量
            System.out.println("Change battery at "+from);//输出信息,在该景点更换电瓶
        }
        System.out.printf("From %d to %d battery consume %d remain %d",from,to,(int)(distance*10),(int)myBattery.getVolume());
        System.out.println();
    }
    private void changeBattery(){
        myBattery=new Battery();
    }//更新电量,重置为设定值

}
class Battery{//定义电瓶类
    private double volume=100;//剩余电量初始值为100
    boolean consume(double consummVolume){
        if(consummVolume<=volume){//如果使用电量小于剩余电量
            volume-=consummVolume;//更新剩余电量
            return true;
        }else
            return false;
    }
    double getVolume(){
        return volume;
    }//输出剩余电量
}
class Map{//定义地图类
    private double map[][]={
            {0},
            {2.3},
            {4.6, 3.4},
            {5.6, 4.5, 5.1},
            {4.8, 3.7, 6.1, 3.5},
            {3.8, 3.1, 4.3, 1.5, 3.2},
            {4.8, 4.2, 5.3, 3.3, 3.7, 2.4},
            {3.8, 4.1, 6.3, 3.9, 1.9, 3.3, 6.4},
            {5.8, 7.1, 5.5, 3.4, 4.2, 5.4, 5.6, 4.5},
            {4.8, 6.1, 2.3, 3.4, 3.7, 4.4, 6.6, 3.7, 4.2}
    };//定义二维数组
    double getDistance(int from,int to){
        if(from==to)
            return 0;
        int max=from>to?from:to;
        int min=from<to?from:to;
        return map[max][min];
    }//根据输入,输出对应的景点距离
}

定义了三个类,电车类,电瓶类,地图类,在电车类里调用了另外两个类,然后计算。看起来很复杂实际上理清楚思路不难的。代码中注释基本上都加了,就不过多解释了。

2.汽车租赁公司经营额

【问题描述】要求模拟汽车租赁公司经营情况,公司有30辆轿车,租赁以天为单位,每天180元,大客车10辆,租赁以里程为单位,每百公里500元,平均每个月行驶8000公里,公司还有货运汽车5辆,租赁费用以公里数和吨数计算,3.5元每吨一公里,平均每周可以运载货物30000吨公里。

要求有一个父类,名为rentCar。子类有Taxi,Bus,Truck,父类rentCar具有earnMoney方法。

有一个Company类,用rentCar对象数组表示公司的可用车辆。程序能输出Company对象指定年份(2000~2020年)的营业额(万元)。
【输入形式】

2003
【输出形式】

3414.6

public class CompanyTest
{
	public static void main(String [] args){
		int year=0;
		Scanner read = new Scanner(System.in);
		Company myCompany = new Company();
myCompany.myCars= new rentCar[3];
        myCompany.setTotalCars(30,10,5);

		if(read.hasNextInt())
			year = read.nextInt();
		System.out.println(myCompany.getTotalMoney(year)/10000);
	}
}

class rentCar
{
	float earnMoney(int year)
          {
            return 0;
          }

	int getDaysofYear(int year)
	{
if(year%4==0 && year%100!=0 || year%400==0 )
            return 366;
        else 
            return 365;

	}
}

class Taxi extends rentCar
{
int TaxiNumber;
    Taxi(int a){
        this.TaxiNumber=a;
    }
    public int getTaxiNumber() {
        return TaxiNumber;
    }
}
class Bus extends rentCar
{
int BusNumber;
    Bus(int a){this.BusNumber=a;}
    public int getBusNumber(){return BusNumber;}
}
class Truck extends rentCar
{
int TruckNumber;
    Truck(int a){this.TruckNumber=a;}
    public int getTruckNumber(){return TruckNumber;}
}

class Company
{
	final int startYear = 2000;
	final int endYear = 2020;
	rentCar [] myCars;
	void setTotalCars(int TaxiNumber,int BusNumber,int TruckNumber)
	{
myCars[0]=new Taxi(TaxiNumber);
        myCars[1]=new Bus(BusNumber);
        myCars[2]=new Truck(TruckNumber);

	}
	double getTotalMoney(int year)
	{
double money=0;
        int days=new rentCar().getDaysofYear(year);
        double taxiIncome=((Taxi)myCars[0]).getTaxiNumber()*180*days;
        double busIncome=((Bus)myCars[1]).getBusNumber()*500*80*12;
        double truckIncome=((Truck)myCars[2]).getTruckNumber()*3.5*30000*days/7;
        money=taxiIncome+busIncome+truckIncome;
        return money;

	}
}

因为是计算年份的营业额,所以不用考虑具体月份的天数,只要计算是否为闰年即可,其他的只是计算方式不同,并没什么很大的区别

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值