تاکسی آنلاین
نام و تاریخ مسابقه: مسابقه جاوا_جیکل 7 – 24 فروردین 1397
مباحث: شیگرایی، واسط، وراثت و چندریختی
برای یک شهرک کوچک، قصد داریم با کمک شما بخشی از یک برنامهی سفارش تاکسی آنلاین را پیادهسازی کنیم.
ابتدا فایل src.zip را دانلود کرده و محتوای آن را ببینید. کارشناسان ترافیک، این شهرک را به 5 ناحیهی اصلی با شمارههای 0 تا 4 تقسیمبندی کردهاند و همانطور که در شکل زیر دیده میشود، برای رفتن از هر ناحیه به ناحیه دیگر، ضریبی تعیین کردهاند که در محاسبهی هزینهی نهایی مورد استفاده قرار میگیرد.
برای سادگی، این اطلاعات در قالب ماتریس دوبعدی distance، در کلاس DistanceMap در اختیار شما قرار گرفته است.
برای سفارش تاکسی از این برنامه، سه روش مختلف (TripMethod) وجود دارد و با توجه روش انتخابشده توسط مسافر، هزینهی سفر وی محاسبه شده و نمایش داده میشود.
محاسبهی قیمت برای هر یک از این روشها، با توجه به جدول ضرایب بالا و مقادیر موجود در ماتریس فاصلهها، به این صورت محاسبه میشود: اگر مقدار (هزینهی پایه * مقدار استخراج شده از ماتریس فاصلهها) برابر با X باشد، هزینهی نهایی برابر است با
X * ratio
که مقدار ratio با توجه به ورودیهای مساله از جدول بالا انتخاب میشود.
به طور مثال، اگر کاربر قصد سفارش تاکسی اقتصادی برای رفتن از ناحیه 2 به 3 در هوای بارانی و ساعت غیراوج ترافیک را داشته باشد، هزینهی سفرش برابر است با:
X = 5 * 3 = 15 15 * 1.2 = 18
نکات و راهنمایی
- کلاس TripHandler باید singleton باشد و تنها نمونهی آن، از طریق متد getInstance قابل دسترس باشد.
- در کلاس TripHandler متد calcPrice را باید پیادهسازی کنید که دو ورودی دارد:
- type: نوع سفارش را تعیین میکند. مقادیر مجاز برای این ورودی برابر با bike یا economic و یا vip است. با توجه به مقدار این ورودی، باید نوع مناسب از TripMethod انتخاب شده و در محاسبهی هزینه استفاده شود.
- params: از نوع TripParam است که شامل ویژگیهای لازم برای محاسبهی هزینهی سفر (شامل شماره ناحیه مبدا و مقصد، زمان اوج ترافیک بودن یا نبودن و بارانی بودن یا نبودن هوا) است. به سازندهی این کلاس دقت کنید.
- به ازای هر روش سفارش تاکسی، یک پیادهسازی برای واسط TripMethod باید انجام دهید:
- EconomicTripMethod، VipTripMethod و BikeTripMethod:
- متد calcPrice در ورودی یک شی از نوع TripParam میگیرد و هزینهی سفر را با توجه به ورودی و روش سفارش تاکسی، محاسبه میکند. به عبارت دیگر منطق محاسبهی هزینه برای هر نوع سفارش در این متد پیادهسازی میشود و در متد calcPrice از TripHandler، این وظیفه به نمونهی مناسب از یکی از پیادهسازیهای TripMethod سپرده میشود.
مثال
خروجی تکهکد زیر:
TripHandler taxi = TripHandler.getInstance(); //سفر ویژه از ناحیه 1 به 1 در ساعت اوج ترافیک و هوای غیربارانی int price = taxi.calcPrice("vip", new TripParam(1, 1, true, false)); int price2 = new VIPTripMethod().calcPrice(new TripParam(1, 1, true, false)); System.out.println(price + " = " + price2); //سفر با موتور از ناحیه 2 به 4 در ساعت اوج ترافیک و در هوای بارانی price = taxi.calcPrice("bike", new TripParam(2, 4, true, true)); price2 = new BikeTripMethod().calcPrice(new TripParam(2, 4, true, true)); System.out.println(price + " = " + price2);
برابر است با:
20000 = 20000 12000 = 12000
آنچه باید آپلود کنید:
یک فایل زیپ شامل بستهی ir.javacup.onlinetaxi است. به صورتی که وقتی فایل زیپ را باز میکنیم، دقیقا شاخهی ir را ببینیم که درون آن شاخهی javacup و درون آن نیز شاخهی onlinetaxi قرار دارد. در داخل شاخهی onlinetaxi چهار فایل TripHandler.java، VIPTripMethod.java، ٍEconomicTripMethod.java و BikeTripMethod.java وجود داشته باشد.
برای داوری تمرین، میتوانید پاسخ خود را در سایت Quera به نحوی که در بالا گفته شد، بارگذاری کنید.
برای آشنایی با نحوهی ارسال پاسخ در Quera، این مطلب را مطالعه کنید.
با ما همراه باشید:
آدرس کانال تلگرام: IranianJavaDevelopers@
آدرس اکانت توییتر: JavaCupIR@
آدرس صفحه اینستاگرام: javacup.ir
آدرس گروه لینکدین: Iranian Java Developers