وبلاگ سید جلال سیدیزدی

آرایه ها در جاوا - قسمت اول

دوشنبه, ۲۶ اسفند ۱۳۹۲، ۰۵:۰۲ ب.ظ

تعریف: آرایه شی است که تعداد ثابتی مقدار همنوع را در خود نگه می دارد. طول آرایه زمان تعریف آن تعیین می گردد و بعد از ساخته شدن طول آن ثابت است.

هر آیتم در آرایه را عنصر (element) آرایه گوییم. هر عنصر با اندیس عددی اش قابل دسترسی است. شماره گذاری اندیس آرایه مانند زبان C از صفر شروع می شود. پس عنصر شماره 9 با اندیس 8 مشخص می گردد.


قطعه کد زیر یک آرایه از نوع int با طول 4 و با نام a ایجاد کرده و عناصر آن را مقدار دهی می کند.

int [] a = new int[4];
a[0] = 1;
a[1] = 0;
a[2] = 12;
a[3] = -5;

همانطور که در قطعه کد بالا می بینید، در زمان تعریف آرایه (سمت چپ سطر اول) علامت [ ] بین نوع و اسم آرایه قرار می گیرد. به عبارت دیگر متغیر a از نوع [ ] int است. یعنی آرایه ای از نوع int. البته اگر علامت [ ] را سمت متغیر قرار دهید کمپایلر خطایی نمی دهد و آرایه به درستی تعریف می شود ولی روش اول (همانند قطعه کد) توصیه می شود. 

همان طور که در کد بالا مشخص است برای دسترسی به عنصر خاصی از آرایه از الگوی زیر استفاده می کنیم.

arrayName[index]

برای مقدار دهی اولیه یک آرایه می توان به طریق زیر عمل کرد. دقت کنید مقدار دهی اولیه فقط در زمان تعریف قابل استفاده است.

int [] a = {1, 0, 12, -5};

همان طور که در تعریف آرایه گفته شد در جاوا آرایه یک شی است و در نتیجه در کد بالا a یک متغیر reference است. دیاگرام شی برای آرایه بالا در شکل زیر رسم شده است.



در قطعه کد زیر آرایه بالا را با دو روش چاپ می کنیم. روش اول با استفاده از حلقه for-each است و روش دوم با for معمولی.

// printing an array using for-each
for(int k : a){
System.out.println(k);
}

// printing an array using for
for(int i = 0; i < a.length; i++){
System.out.println(a[i]);
}

نکته اول: از for-each می توان علاوه بر پیمایش ArrayList برای پیمایش آرایه هم استفاده کرد.

نکته دوم: برای به دست آوردن طول آرایه از فیلد length استفاده می کنیم. همه ی آرایه ها به طور خودکار این فیلد را دارند. مقدار این فیلد برابر است با مقدار عددی که در زمان ایجاد آرایه به عنوان طول استفاده شده است. پس در کد بالا a.length برابر است با 4.


تمرین: کد های بالا را در BlueJ یا netbeans وارد کرده اجرا کنید. سعی کنید با debugger کد بالا را خط به خط اجرا کنید.

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


تمرین های بالا از نوع مثلث برعکس است.

پایان قسمت اول.

موفق باشید.

  • ۹۲/۱۲/۲۶

نظرات  (۷)

استاد سلام
ببخشید یه سوال
میخواستم ببینم برای نمایش یک سری سوال  به صورت رندوم و گرفتن جواب سوال بهتره از چه راهی استفاده کنیم؟
 (سوالات چهارگزینه ای هستند و باید به صورت رندوم نمایش داده بشند و بعد از گرفتن جواب هم باید پاسخ صحیح نمایش داده بشه!)
ممنون میشم کمک کنید 
مرسی
پاسخ:
سلام
سوالها رو به همراه جواب در یک کالکشن مناسب قرار دهید. سپس در یک حلقه یک عدد تصادفی ایجاد کرده و سوال متناظر رو نمایش دهید و جواب رو با اسکنر دریافت کنید.
موفق باشید.
سلام
می خواستم بپرسم آیا میشه آرایه با طول متغیر داشت؟منظورم اینه که یه ارایه با یه طولی داریم ایا می تونیم طولشو اضافه کنیم و در مکانهای جدید مقئار بریزیم و اینکارو تا جایی ه نیاز داریم انجام بدیم؟
پاسخ:
سلام
نه. اگر حتما با آرایه می خواهید کار کنید، باید آرایه ی جدیدی با طول بیشتر ایجاد کنید و عناصر آرایه قبلی رو در اون کپی کنید و از مکان های جدیدش استفاده کنید.
البته این کار پیشنهاد نمی شه چون کنده.
بهتر است از ArrayList استفاده کنید و بعد هر زمان خواستید تبدیلش کنید به آرایه.
موفق باشید.
سلام حالتون خوبه ؟ اگر برای تمرین 10 از ارایه هم جایی استفاده کنیم اشکالی که نداره؟
پاسخ:
سلام ممنون
در تمرین 10 اگر جایی به آرایه نیاز بود از ArrayList استفاده کنید.
موفق باشید.
سلام استاد . سال نو مبارک
استاد من همین اول کارو متوجه نمیشم خیلی بد توضیح داده شده.

یعنی چی شی هست؟؟؟    یعنی چی طول آرایه زمان تعریف آن تعیین میگردد؟؟؟

تعریف: آرایه شی است که تعداد ثابتی مقدار ھمنوع را در خود نگه می دارد. طول آرایه زمان تعریف آن تعیین می گردد و بعد از ساخته شدن طول آن ثابت است.

پاسخ:
سلام ممنون

چیز خاصی نیست که متوجه نشید.
دقیقاً کجاش رو متوجه نمی شید؟

وقتی یه آرایه ایجاد می شود، یک شی ساخته می شود. طول آرایه هم مثل زبان C ثابت است.

اگر سوال دیگری هست بفرمایید.

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

ان شاء الله.
در مورد تمرین دهم نیازی به استفاده از آرایه نیست. اگر فکر می کنید جایی به آرایه نیاز دارید، از ArrayList استفاده کنید.

موفق باشید.

استاد خسته نباشید
 ممنون که حتی توی عید هم به فکر دانشجو ها هستید !
2 تا سوال دارم :
1. منظور از اینکه آرایه شی است رو نمی فهمم ؟ اشیا نباید حتما از یک کلاس تعریف شده باشند ؟
2. تو قسمت مقدار دهی اولیه گفتید که مقدار دهی اولیه فقط در زمان تعریف قابل استفاده است پس چجور میشه هم تعریف کرد و هم مقدار دهی اولیه ؟ منظورم اینه که دستور new کجا نوشته میشه ؟
پاسخ:

سلام ممنون
سوال های جالبی اند!

1- طبق مشخصات زبان جاوا، یک شی یا نمونه ای از یک کلاس است یا یک آرایه. دو عبارت زیر از فایل مشخصات زبان جاوا در سایت اوراکل آورده شده است:

  • An object is a class instance or an array.
  • In the Java programming language, arrays are objects (§4.3.1), are dynamically created, and may be assigned to variables of type Object (§4.3.2). All methods of class Object may be invoked on an array.

هر دو عبارت همین نکته رو بیان می کنند. البته توضیح عبارت دوم (از وسط هاش تا آخر) نیاز به یه سری اطلاعات داره که بعداً در جای خودش در کلاس مطرح می شه.


2- مقدار دهی اولیه یک جور میان بر است و خود کمپایلر دستور new رو لحاظ می کنه.


موفق باشید.


استاد وبلاگی هم خیلی خوب درس می دیدا :)
دستتون درد نکنه
پاسخ:
سلام
نظر لطف شماست.
موفق باشید.
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی