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

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

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

 پارامتر و مقدار برگشتی از نوع آرایه

از آنجا که آرایه ها شی هستند، آنها را می توان به صورت پارامتر به متدها ارسال کرد. متد زیر یک آرایه از نوع int گرفته و مجموع عناصر آن را برمی گرداند.

public int sum(int [] numbers) {
int total = 0;
for(int k : numbers) {
total += k;
}
return total;
}

می توان در متد بالا به جای for-each از for یا while نیز استفاده کرد (به عنوان تمرین انجام دهید).


همچنین نوع برگشتی یک متد می تواند از نوع آرایه باشد. متد زیر یک آرایه دریافت کرده و کمترین و بیشترین مقدار آن را به صورت آرایه برمی گرداند.

public int [] minMax(int [] numbers) {
int min = numbers[0];
int max = numbers[0];
for(int k : numbers) {
if(k < min) {
min = k;
} else if(k > max) {
max = k;
}
}
int [] results = {min, max};
return results;
}

در کد بالا از مقدار دهی اولیه استفاده شده است. به جای این روش می توان از روش اندیس عناصر آرایه results را مقدار دهی کرد (این روش را پیاده سازی کنید).


آرایه هایی از اشیاء

تا کنون آرایه های تعریف شده از نوع int بود. دیگر انواع ابتدایی (primitive) نیز به همین صورت است. حال می خواهیم آرایه هایی از اشیاء تعریف کنیم. در کد زیر آرایه ای از نوع رشته تعریف و مقدار دهی اولیه شده است.

String [] names = {"Ali", "Reza", "Hasan"};

دیاگرام شی برای آرایه names به صورت زیر است.


حال می خواهیم آرایه ای از دانشجویان ایجاد کنیم. فرض می کنیم کلاس Student تعریف شده است.

Student [] students = new Student[5];

سوال: به کد فوق خوب دقت کرده و بگویید چند دانشجو ایجاد شده است؟

5 تا؟ درست نیست! در واقع هیچ دانشجویی ایجاد نشده است. فقط یک آرایه از Student ایجاد شده که هنوز "خالی" است. در ضمن اگر دقت کنید سازنده ی Student اصلاً فراخوانی نشده است (همان طور که می دانید سازنده به ( ) ختم می شود). با این فرض که سازنده ی Student نام دانشجو را به عنوان پارامتر دریافت می کند، در ادامه آرایه students را "پر" می کنیم.

students[0] = new Student("Ali");
students[1] = new Student("Reza");
students[2] = new Student("Hasan");
students[3] = new Student("Hosein");
students[4] = new Student("Taghi");

تمرین تحویلی: دیاگرام شی را برای آرایه Student در paint رسم کنید. فرض کنید Student یک فیلد با نام name از نوع String و فیلدی دیگر با نام average از نوع double دارد.

تمرین: کد های بالا را در BlueJ یا netbeans وارد کنید و در یک حلقه لیست دانشجوها را چاپ کنید.


مهلت ارسال: سه شنبه 5 فروردین 93 ساعت 21

با تاخیر: X


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

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

موفق باشید.

  • ۹۲/۱۲/۲۷

نظرات  (۵)

با سلام چطور میشه سه مقوله مثلا نام نام خانوادگی و شماره ای دی را در یک خانه ارایه یک بعدی قرار داد
پاسخ:
سلام
سوالتون ابهام داره.
هر سه تا رو تو یک خونه؟
اون هم یه بعدی؟
نمی‌دونم!
سلام
لطفا می فرمایید که اگر آرایه ای از جنس استرینگ داشته باشیم چطور با طول اون رو برگردونیم؟مثلا طول حالت زیر رو با استفاده از چه کدی می تونیم برگردونیم؟
String [] names = {"Ali", "Reza", "Hasan"};
پاسخ:

سلام

مطابق معمول از فیلد length استفاده می شود:

        System.out.println(names.length);

البته عناصر آرایه رشته اند و برای تعیین طول آنها از متد length استفاده می شود:

        System.out.println(names[0].length());

موفق باشید.

  • حمید پهلوانی
  • سلام استاد خسته نباشید

    استاد توی این خط از کد مشکل دارم

    (public int sum(int [] numbers

     سوالم اینه یعنی ما باید اول یه آرایه به نام numbers تعریف کنیم بعد توی پارامتر فراخوانی بشه

    وقتی متد اجرا شد توسط کاربر مقداردهی بشه یا اصلا نیازی نیس تعریف کنیمش؟
    پاسخ:

    سلام ممنون
    numbers در کد مذکور یک formal parameter است. پارامتر واقعی متناظر با آن باید یک آرایه از نوع int و با هر طولی باشد.
    مثالی از یک قطعه کد که متد minMax را فراخوانی می کند:

    ...
    int [] a = {1, 2, 10, 20};
    int [] b = minMax(a);
    ...

    موفق باشید.

    سلام  خسته نباشید 
    استاد ، برا تبدیل string به int سرچ کردم این کدو نوشته بود ولی راستش نفهمیدم چطور ازش استفاده کنم!؟

              <;(int a = Integer.parseInt("1234>
    پاسخ:

    سلام ممنون
    <> در دو طرف دستور اضافی است. مثال:

    int a = Integer.parseInt("1234");

    موفق باشید.

    سلام
    ارایه هایی از اشیا یا ارایه هایی از کلاس ها؟
    من این قسمت
    Student [] students = new Student[5];
    رو متوجه نشدم چی کار می کنه ؟ و در ضمن چرا برای اون مثالی که ارایه از نوع String است این کار را نکردیم ؟
    پاسخ:

    سلام

    آرایه ای از اشیاء یک کلاس. در نهایت در آرایه شی قرار می گیرد نه کلاس. پس "آرایه ای از کلاس ها" درست نیست. همچنین می توان گفت آرایه ای از نوع کلاس.

    سوال دوم سوال خوبیه!

    قسمتی از کد را که سوال کردید، کار اصلی یعنی ساختن آرایه را انجام می دهد. به توضیحات زیر توجه کنید.


    در مورد رشته چون کلاس خاصی است (پر کاربرد است)، توجه ویژه ای به آن شده، به طوری که لیترال های (یا به عبارت ساده تر ثابت های) رشته ای مثل "ABCD"، خود شی ای از کلاسند و به طور خودکار ایجاد می شوند. به طوری که می توان متدهای کلاس String را هم روی آنها فراخوانی کرد. مانند کد زیر  که در code pad نرم افزار BlueJ نوشته و اجرا شده است:

    "ABCD".length()
    4 (int)

    "ABCD".charAt(2)
    'C' (char)

    با این حال می توان برای رشته هم مانند Student عمل کرد. کد زیر نیز در BlueJ نوشته و اجرا شده است:

    String [] s = new String[6];
    s
    <object reference> (String[])

    s[0]
    null

    s[0] = "ABCD"
    "ABCD" (String)

    همچنین اگر خیلی علاقه مند به مقدار دهی اولیه باشید (!) می توانید آرایه دانشجو را نیز با این روش ایجاد کنید. برای این کار می توان از اشیاء بی نام استفاده کرد. کد زیر این روش را نشان می دهد:

    Student [] students = {new Student("Ali"), new Student("Reza"), new Student("Hasan")};

    همانطور که می بینید سه شی در { } ایجاد شده است. از آنجا که اسمی (منظور reference variable است) به آنها داده نشده، به آنها شی بی نام (anonymous) می گوییم.

    البته می شود اشیاء را جداگانه و با اسم تعریف کرد و سپس در { } از اسم آنها استفاده کرد. مانند کد زیر:

    Student s1 = new Student("Ali");
    Student s2 = new Student("Reza");
    Student s3 = new Student("Hasan");
    Student [] students = {s1, s2, s3};

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

    هر چند بدیهی است ولی توجه داشته باشید که در روش آخر، هم از طریق متغیرهای s1 تا s3 می توان به شی ها دسترسی داشت و هم از طریق آرایه students با اندیس مناسب.


    موفق باشید.

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