مسیرها
/
Java
Java
/
تمرین‌ها
/
پرنده‌نگر
پرنده‌نگر

پرنده‌نگر

تمرین یادگیری

مقدمه

آرایه

در Java، آرایه‌ها روشی برای ذخیره‌ی چندین مقدار از یک نوع در یک ساختار واحد هستند. برخلاف سایر ساختارهای داده، اندازه‌ی آرایه پس از ساخته‌شدن ثابت می‌ماند. می‌توان عناصر را با استفاده از یک «اندیس» به آرایه نسبت داد یا از آن بازیابی کرد. آرایه‌های Java از اندیس‌گذاری از صفر استفاده می‌کنند: اندیس اولین عنصر ۰ است، اندیس دومین عنصر ۱ و به همین ترتیب.

نحوه‌ی نگارش استاندارد برای مقداردهی اولیه به یک آرایه چنین است:

type[] variableName = new type[size];

type نوع عناصر آرایه است که می‌تواند یک نوع اولیه (مثلاً int) یا یک کلاس (مثلاً String) باشد.

size تعداد عناصری است که این آرایه در خود نگه می‌دارد (که بعداً قابل تغییر نیست). پس از ایجاد آرایه، عناصر به مقادیر پیش‌فرض خود مقداردهی اولیه می‌شوند (معمولاً 0، false یا null).

// Declare array with explicit size (size is 2)
int[] twoInts = new int[2];

همچنین می‌توان آرایه‌ها را با یک نگارش کوتاه تعریف کرد که هم اجازه‌ی ایجاد آرایه و هم تعیین مقدار آن را می‌دهد:

// Two equivalent ways to declare and initialize an array (size is 3)
int[] threeIntsV1 = new int[] { 4, 9, 7 };
int[] threeIntsV2 = { 4, 9, 7 };

چون کامپایلر اکنون می‌تواند تشخیص دهد که آرایه چند عنصر خواهد داشت، می‌توان طول را حذف کرد.

می‌توان عناصر آرایه را با نگارش اندیس درون کروشه نسبت داد و به آن‌ها دسترسی داشت:

// Assign second element by index
twoInts[1] = 8;

// Retrieve the second element by index and assign to the int element
int secondElement = twoInts[1];

دسترسی به اندیسی خارج از اندیس‌های معتبر آرایه، به IndexOutOfBoundsException منجر می‌شود.

می‌توان آرایه‌ها را با فراخوانی متدها یا ویژگی‌های یک نمونه‌ی آرایه، یا با استفاده از متدهای استاتیک تعریف‌شده در کلاس Arrays دستکاری کرد (که معمولاً فقط در کدهای جنریک استفاده می‌شود). ویژگی length طول آرایه را نگه می‌دارد. دسترسی به آن به این صورت است:

int arrayLength = someArray.length;

Java همچنین یک کلاس کاربردی مفید به نام java.util.Arrays دارد که متدهای بسیار مفیدی مرتبط با آرایه در اختیار می‌گذارد (مثلاً Arrays.equals).

Java همچنین از آرایه‌های چندبعدی مانند int[][] arr = new int[3][4]; پشتیبانی می‌کند که می‌توانند بسیار مفید باشند.

اینکه یک آرایه در واقع یک مجموعه هم هست یعنی علاوه بر دسترسی به مقادیر با اندیس، می‌توانید با یک حلقه‌ی for-each روی همه‌ی مقادیر آن پیمایش کنید:

char[] vowels = { 'a', 'e', 'i', 'o', 'u' };

for(char vowel: vowels) {
    // Output the vowel
    System.out.print(vowel);
}

// => aeiou

اگر می‌خواهید کنترل بیشتری بر اینکه روی کدام مقادیر پیمایش کنید داشته باشید، می‌توان از یک حلقه‌ی for استفاده کرد:

char[] vowels = { 'a', 'e', 'i', 'o', 'u' };

for (int i = 0; i < 3; i++) {
    // Output the vowel
    System.out.print(vowels[i]);
}

// => aei

دستورالعمل‌ها

شما یک پرنده‌نگر مشتاق هستید که تعداد پرندگانی را که در هفت روز گذشته به باغ‌تان آمده‌اند پیگیری می‌کنید.

شش کار دارید که همه‌شان به تعداد پرندگانی مربوط می‌شوند که به باغ‌تان آمده‌اند.

1. بررسی کنید تعداد پرندگان هفته‌ی گذشته چقدر بوده است

برای مقایسه، همیشه یک نسخه از تعداد پرندگان هفته‌ی گذشته را کنار دست‌تان نگه می‌دارید که عبارت بودند از: ۰، ۲، ۵، ۳، ۷، ۸ و ۴. متد BirdWatcher.getLastWeek() را پیاده‌سازی کنید که تعداد پرندگان هفته‌ی گذشته را برمی‌گرداند:

BirdWatcher.getLastWeek();
// => [0, 2, 5, 3, 7, 8, 4]

2. بررسی کنید امروز چند پرنده آمده است

متد BirdWatcher.getToday() را پیاده‌سازی کنید تا تعداد پرندگانی را که امروز به باغ‌تان آمده‌اند برگرداند. تعداد پرندگان بر اساس روز مرتب شده است؛ اولین عنصر مربوط به قدیمی‌ترین روز است و آخرین عنصر تعداد امروز.

int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getToday();
// => 1

3. تعداد امروز را افزایش دهید

متد BirdWatcher.incrementTodaysCount() را پیاده‌سازی کنید تا تعداد امروز را افزایش دهد:

int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.incrementTodaysCount();
birdCount.getToday();
// => 2

4. بررسی کنید آیا روزی بدون پرنده وجود داشته است

متد BirdWatcher.hasDayWithoutBirds() را پیاده‌سازی کنید که اگر روزی بوده است که هیچ پرنده‌ای به باغ نیامده باشد، true را برمی‌گرداند؛ در غیر این صورت false را برگردانید:

int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.hasDayWithoutBirds();
// => true

5. محاسبه‌ی تعداد پرندگان بازدیدکننده در چند روز نخست

متد BirdWatcher.getCountForFirstDays() را پیاده‌سازی کنید که تعداد پرندگانی را برمی‌گرداند که از ابتدای هفته به باغ‌تان آمده‌اند، با این محدودیت که شمارش فقط برای تعداد مشخص‌شده از روزهای ابتدای هفته انجام شود.

int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getCountForFirstDays(4);
// => 14

6. محاسبه‌ی تعداد روزهای شلوغ

بعضی روزها شلوغ‌تر از بقیه هستند. روز شلوغ روزی است که پنج پرنده یا بیشتر به باغ‌تان آمده باشند. متد BirdWatcher.getBusyDays() را پیاده‌سازی کنید تا تعداد روزهای شلوغ را برگرداند:

int[] birdsPerDay = { 2, 5, 0, 7, 4, 1 };
BirdWatcher birdCount = new BirdWatcher(birdsPerDay);
birdCount.getBusyDays();
// => 2
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Java Exercism

آماده‌اید پرنده‌نگر را شروع کنید؟

در Exercism ثبت‌نام کنید تا Java را همراه با 26 مفهوم158 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.