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

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

دوشنبه, ۱۱ فروردين ۱۳۹۳، ۱۰:۴۶ ق.ظ

پردازش آرایه ها


چندین عملیات وجود دارد که اغلب بر روی آرایه ها انجام می شود مانند جستجو در آرایه، کپی کردن آرایه، تست مساوی بودن دو آرایه، پر کردن آرایه یا قسمتی از آن با مقداری خاص و مرتب کردن آرایه.

هر چند برای کارهای مذکور می توان یک متد نوشت، اما در جاوا برای انجام این اعمال کلاس ویژه ای به نام Arrays وجود دارد. همچنین کلاس System متدی به نام arraycopy دارد که همانطور که از اسمش پیداست کارش کپی کردن تمام عناصر آرایه یا قسمتی از آن در آرایه ای دیگر است.


تمرین مثلث برعکس: در داکیومنت جاوا متدهای کلاس Arrays و متد مذکور از کلاس System را مطالعه کرده و عملکر هر یک را در یک محیط برنامه (blueJ یا netbeans) بررسی کنید.

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

  • متدی که آرایه را مرتب کرده و چاپ کند.
  • متدی که نمره ی خاصی را در آرایه جستجو کند. در صورت وجود نمره، مکان (اندیس) آن را چاپ کند و در غیر این صورت پیغام مناسب چاپ کند.
  • متدی که نمره های بیشتر مساوی 10 را در آرایه ای دیگر قرار داده برگرداند.


موعد ارسال: 14 فروردین 93 ساعت 22

با تاخیر: 15 فروردین 93 ساعت 20


موفق باشید.



  • ۹۳/۰۱/۱۱

نظرات  (۱۲)

  • علیرضا طایفه
  • سلام استاد این مهلت تمرین چرا اینطوریه ؟؟
    پاسخ:
    سلام
    درست می شود.
    موفق باشید.
    سلام
    استاد این متد دقیقا چیکار میکنه؟
    copyOfRange(double[]original)
    پاسخ:
    سلام
    copyOfRange(boolean[] original, int from, int to)
    همانطور که از اسمش پیداست قسمتی از آرایه original را از from تا to به صورت آرایه بر می گرداند.
    موفق باشید.
    سلام استاد خسته نباشید .  برای متدی که به جستو جوی یه نمره می پردازه اگر از اون نمره مد نظر ما مثلا 2 تا وجود داشته باشه باید اندیس هر دو رو چاپ کنه؟
    پاسخ:
    سلام
    اگر  همه موارد رو چاپ کنه نمره اضافه داره.
    موفق باشید.

    سلام . می شه درباره ارگومان های متد arraycopy کمی توضیح بدید که چی هستند ؟هر چی می نویسیم ارور می ده!
    اشکالی نداره که تعداد دانشجویان و ارایه به شکل فیلد های کلاسمون تعریف نکنیم و در خود متد main اونها رو تعریف کنیم ؟اخه هر کار می کنیم ارور static  رو می ده توضیحاتی هم که شما دادید ما بالاخره نفهمیدیم باید چه کار کنیم !اگر بیایم یه شی از کلاسمون بسازیم خوب بعد چه جوری به تعداد دانشجو و یا ارایه برای پر کردن نمرات دسترسی داشته باشیم؟
    پاسخ:

    سلام

    signature متد arraycopy به صورت زیر است:

    public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

    src: آرایه ی مبدا را مشخص می کند.

    srcPos: اندیس مبدا را مشخص می کند. یعنی از چه اندسی در آرایه مبدا شروع به کپی کند.

    dest: آرایه مقصد را مشخص می کند.

    destPos: اندیس مقصد را مشخص می کند. یعنی مکان شروع به کپی کردن در آرایه مقصد.

    length: تعداد عناصری که قرار است کپی شوند.


    نه. باید فیلد تعریف کنید. فیلدی غیر استاتیک. از کلاس نوشته شده در main یک شی بسازید. در این کلاس تعدادی accessor و mutator بنویسید که آرایه را ایجاد کرده و مقدار دهی کند و پردازش های لازم را انجام دهد. در main با شی ساخته شده به متدهای نوشته شده دسترسی دارید.

    علاوه بر این می توانید متدهای پردازش آرایه را به همراه فیلد مربوطه در یک کلاس بنویسید (بدون متد main) و در کلاس ساده ی دیگری که فقط متد main دارد، از آن کلاس شی بسازید و باهاش کار کنید.

    موفق باشید.

    سلام استاد ببخشید ولی ارور میده
    non-static variable score cannot be referenced from a static context

    منظورش چیه؟
    بعد اینکه یعنی چی که نوشتید نباید از کلاسarrays شی ساخت؟؟
    یه سوال دیگه باید کلمه ی استاتیک رو قرار بدیم؟ نزاریم چی میشه؟
    من دقیقا همین جمله ای که نوشتید رو نوشتم ولی ارور بالا رو میده؟
    میشه بیشتر راهنمایی کنید؟
    ممنون
    پاسخ:

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

    مثال:

    public class Exercise{

    private int a;

    public static void main(String[] args) {
    Exercise ex = new Exercise();
    ex.setA();
    ex.print();
    }

    public void setA(){
    a = 10;
    }

    public void print(){
    System.out.println(a);
    }
    }

    کلمه استاتیک رو استفاده نکنید.

    در کد بالا از کلاس Exercise شی ساخته شده و با استفاده از شی به متدها دسترسی داریم. ولی در مورد کلاس Arrays لازم نیست از آن شی ساخته شود و مستقیماً با اسم کلاس به متدهای آن کلاس دسترسی داریم. دلیل این امر استاتیک بودن متدهای این کلاس است. این موضوع را در داکویمنت جاوا چک کنید.

    مبحث استاتیک سر کلاس بررسی می گردد.

    موفق باشید.

    سلام استاد. برای این تمرین یک کلاس کافیه دیگه؟ به طوری که فقط تو تابع main آن کلاس یک منو درست شود و با دستور switch_case هر یک از متد ها انتخاب شود؟
    در غیر این صورت لطفا راهنمایی کنید. تشکر
    پاسخ:
    سلام
    یک کلاس کافیه.
    ولی هر کار در متد جداگانه انجام شود.
    موفق باشید.
    سلام
    استاد یعنی ارایه نمره های ما باید خارج از متد main ساخته شه؟؟
    پاسخ:
    سلام
    بله.
    موفق باشید.
    سلام
    این ارور مربوط به چیه؟
    Exception in thread "main" java.lang.NullPointerException
        at clac.Clac.main(Clac.java:21)
    Java Result: 1

    پاسخ:
    سلام
    همانطور که سر کلاس گفته شد خطای NullPointerException زمانی رخ می دهد که از یک متغیر reference که null است استفاده شود.
    برای رفع آن باید در قسمتی از کد شی new شود.
    موفق باشید.

    بخش‌هایی از این نظر که با * مشخص شده، توسط مدیر سایت حذف شده است
    سلام استاد
    چطوری میشه از این متد ها استفاده کرد؟؟؟
    فرمولش چطوریه؟؟
    من یه آرایه تعریف کردم به نام score بعد میخوام sort کنم هر جوری مینویسم ارور میده.
    *************
    ** ***** * **** ** *** ***********************
    ****
    ****
    ****
    **** **** **** ******** *****
    *****
    پاسخ:

    سلام
    متد sort مربوط به کلاس Arrays است. برای استفاده از آن باید به روش زیر عمل کرد:

    Arrays.sort(score);

    نکته مهم: متد sort از نوع static است و در نتیجه برای استفاده از آن نیاز نیست از کلاس Arrays شی ساخت. به متدهای استاتیک متد کلاس هم می گویند. یعنی مستقیماً با اسم کلاس قابل دسترسی است.


    موفق باشید.

    سلام
    این  java doc  رو که باز می کنیم چند تا فایل جدا گانه است که هر کدومش رو که هم باز می کنیم باز چند تا فایل دیگه است که مشخص نیست  چیه باید چه جوری بازش کنیم؟
    پاسخ:
    سلام
    اول فایل رو extract کنید. سپس در پوشه ی ایجاد شده با نام docs فایل index رو باز کنید. در سمت راست بیرون جدول روی Java SE API کلیک کنید.
    حال کلاس مورد نظر را جستجو کنید.
    موفق باشید.
    سلام
    استاد یعنی  این تمرین  کلا نام دانشجو نداره دیگه؟
    پاسخ:
    سلام
    نه. تنها اطلاعات دانشجو نمره اش است.
    موفق باشید.
    سلام
    1-استاد تعداد دانشجویان چرا باید دریافت بشه؟
    2-یعنی ما تو یه کلاس دیک باید بیام یه کلاس با یه سری دانشجو بسازیم(مثل تمرین 10) و با نمراتشون یه ارایه درست کنیم؟؟
    پاسخ:
    سلام
    1- چون باید آرایه را ایجاد کنید و سپس نمرات را در آن قرار دهید.
    2- نه. در این تمرین فقط نمره دانشجویان را باید در آرایه ذخیره کنید نه خود دانشجوان را. یعنی آرایه از نوع دابل است.
    موفق باشید.
    ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
    شما میتوانید از این تگهای html استفاده کنید:
    <b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
    تجدید کد امنیتی