تمرین‌های آموزشی

قفس پرندگان (تا پایان جلسه هفتم)

سطح سوال: متوسط

آنچه از این جلسه باید بدانید:

  • بسته (package)

بسته ir.javacup.contest.zoo را دانلود کنید و کلاس‌های Cage و CageCopier را ببینید. در کلاس CageCopier متد copy را به گونه‌ای پیاده‌سازی کنید که تمامی اطلاعات و ویژگی‌های قفس اول c1 به قفس دوم c2 منتقل (کپی) شود؛ به عبارت دیگر، اگر نام (name) یک پرنده یا شناسه (id) یک قفس تغییر کند، نباید تغییری در قفس دیگر رخ دهد.

package ir.javacup.contest.zoo; 
   public class CageCopier { 
   public void copy (Cage c1, Cage c2){ 
      //TODO 
   }
}

نکات:

  • هر قفس حداکثر دو پرنده دارد و این تعداد تغییری نمی‌کند.
  • اگر قفسی کمتر از دو پرنده داشته باشد، مقدار حداقل یکی از خانه‌های آرایه birds مربوط به آن قفس، برابر با null است.
Cage c1 = new Cage();

 در واقع با این کد، یک قفس ایجاد شده که دارای یک آرایه‌ی دوتایی به نام birds است. ولی هر دو خانه‌ی این آرایه هنوز nullهستند و اگر هیچ پرنده‌ای به قفس c1 اضافه نشده باشد، c2 هم پس از عملیات کپی کردن به همین صورت دارای یک آرایه‌ی دوتایی است که هر دوخانه مقدار null دارند. همین مساله در مورد قفس دارای یک پرنده هم صدق می‌کند.

  • اگر c1 یا c2 هرکدام null بودند، عملیات کپی‌کردن نباید انجام شود و این متد نباید هیچ کاری انجام دهد.
  • اگر هریک از فیلدهای c1 مقدار null داشته باشد، پس از کپی‌کردن، فیلد متناظر در c2 نیز مقدار null بگیرد.
Cage c1 = new Cage(); 
c1.setBirds(null);

 به این ترتیب فیلد birds در قفس c1 مقدار null دارد و در قفس c2 هم باید به همین گونه باشد.

  • اما اگر هر یک از فیلدهای c2 مقدار null داشته باشد، عملیات کپی‌کردن طبق معمول انجام شده و مقدار آن فیلد از c1 به سادگی در c2 کپی می‌شود.

آنچه باید آپلود کنید:

یک فایل زیپ شامل بسته‌ی ir.javacup.contest.zoo است. به صورتی که وقتی فایل زیپ را باز می‌کنیم، دقیقا شاخه‌ی ir را ببینیم که درون آن شاخه‌ی javacup و درون آن شاخه‌ی contest و درون آن نیز شاخه‌ی zoo قرار دارد. در داخل شاخه‌ی zoo دو فایل Cage.java و CageCopier.java  وجود دارند.

برای داوری تمرین، می‌توانید پاسخ خود را در سایت Quera به نحوی که در بالا گفته شد، بارگذاری کنید.

 

با ما همراه باشید:

آدرس کانال تلگرام: IranianJavaDevelopers@

آدرس صفحه اینستاگرام: javacup.ir

آدرس گروه لینکدین: Iranian Java Developers

نوشته های مشابه

‫14 دیدگاه ها

    1. سلام
      تیم پشتیبانی به سوالات همه کاربران، به ترتیب پاسخ می‎دهد. گاهی ممکن است دو سه روز طول بکشد تا به سوال شما پاسخ داده شود.

    1. سلام
      لطفا سوال خود را در بخش «سوال بپرسید» کوئرا مطرح کنید تا تیم پشتیبانی راهنمایی‎تان کنند.

  1. سوال خیلی خوبیه. ولی بیان صورت مسله کمی گنگ است.بررسی امتیازات بچه ها هم گواه این است

    1. سلام
      خیلی ممنون که نظرتون رو با ما در میون گذاشتید.
      بله حق با شماست.
      این سوال، خیلی نکات مهم و پایه‌‌ای (و در عین حال ساده)ای داره که واجبه این نکات برای پیاده‌ساز جا بیفته و درکشون کنه.
      تیم پشتیبانی همیشه سعی کرده به سوالاتی که در خصوص این سوال پرسیده می‌شه، طوری پاسخ بده که این نکات به خوبی شفاف و مطرح بشن و بعد از اون، پیاده‌ساز به راحتی تونسته امتیاز کامل رو کسب کنه.
      ترجیح می‌دیم که این نکات به صورت شفاف در متن سوال نباشه و افراد حتما خودشون به چالش کشیده بشن. بعضی‎ها به تنهایی این چالش رو حل می‎کنن و بعضی‎ها هم به کمک ما.

      در هر صورت، حتما سعی می‎کنیم تا جای ممکن صورت سوال را شفاف‎تر کنیم.
      با تشکر

  2. تمرین خیلی خوبیه برای آشنایی با خطای NullPointer و مقدار دهی اولیه به اشیاء.

    ممنون

  3. درود
    آیا امکانش هست پاسخنامه ای هم برای این تمرینات آموزشی در نظر گرفته و جایی قرار داده شود ؟
    چون ما که این تمرینات رو حل میکنیم در مرحله آموزش هستیم و جهت رفع اشکال گاهی نیاز هست جوابیه صحیح رویت شود

    1. سلام
      در حال حاضر این امکان وجود دارد که بتوانید در سایت Quera و در بخش “سوال بپرسید”، مشکل خود را از طراح سوال بپرسید، متوجه شوید که کد شما چه مشکلی دارد که امیتاز کامل را نمی‌گیرد و آن را رفع کنید. در کل سوالات به گونه‌ایست که با دقت کامل در متن سوال، می‌توانید متوجه شوید و یا حداقل حدس بزنید که مشکل کدتان چیست.

پاسخ دادن به محسن لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا