نمایش نتایج 1 تا 2 از 2

نام تاپیک: چرا مقدار متغیر حفظ نمی شه

  1. #1

    چرا مقدار متغیر حفظ نمی شه

    سلام

    این یه تابعه که می خواد تعداد عناصری که توی یک آرایه به ترتیب بر عکس قرار دارند را پیدا کنه. حالا هدفش خیلی مهم نیست. لطفا این کد رو ببینین:


    private void findInversions(int begin, int end, int count) {
    if (end - begin < 1)
    return;
    int middle = (begin + end) / 2;
    findInversions(begin, middle, count);
    System.out.println("count: " + count + " CHERA????");
    findInversions(middle + 1, end, count);
    count = mergeAndCount(begin, middle, end, count);
    }










    private int mergeAndCount(int begin, int middle, int end, int count) {


    int[] result = new int[end - begin + 1];
    int aptr = begin;
    int bptr = middle + 1;
    for (int i = 0; i < result.length; i++) {
    if (aptr <= middle && bptr <= end) {
    if (numbers[aptr] < numbers[bptr]) {
    result[i] = numbers[aptr];
    aptr++;
    }
    else {
    // (a[aptr], b[bptr]) is an inversion here
    count++;
    System.out.println("PAYDA SHOD: (" + numbers[aptr] + "," + numbers[bptr] + "). VALI COUNT MEGHDARESH GHALATE: " + count);
    result[i] = numbers[bptr];
    bptr++;
    }
    }
    else if (aptr > middle) {
    result[i] = numbers[bptr];
    bptr++;
    }
    else if (bptr > end) {
    result[i] = numbers[aptr];
    aptr++;
    }


    }


    for (int i = 0; i < result.length; i++) {
    numbers[begin + i] = result[i];
    }


    return count;


    }



    من هم خود count رو به عنوان آرگومان پاس می دم و هم returnش می کنم. با توجه به این که جاوا خود اصل متغیر رو تغییر می ده (مگه نه؟) چرا مقدار count وقتی از اجراهای مختلف تابع بازگشتی بیرون می یایم همون مقدار قبلیشه و تغییر نکرده؟

    ممنون



    ویرایش: دوستان من از یکی از دوستام سوال کردم و ظاهرا اشتباه می کردم و int چون primitiveه کپی می شه و اصلش عوض نمی شه. ولی من نوع count رو به Integer هم تغییر دادم درست نشد. لطفا راهنمایی کنین.
    آخرین ویرایش به وسیله barnamenevis8 : یک شنبه 19 اردیبهشت 1395 در 19:39 عصر دلیل: توضیح بیشتر

  2. #2
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,140

    نقل قول: چرا مقدار متغیر حفظ نمی شه

    در جاوا دو نوع Call-by-reference و Call-by-value داریم. مورد اول int چون primitive است از call-by-value استفاده میشه.
    مورد دوم چون object است از Call-by-reference استفاده میشه. اما چون آبجکت Integer, String,... از نوع immutable هستند، شما نمیتونید محتوای آبجکت رو تغییر بدید، بلکه با هر تغییر آبجکت جدیدی ساخته میشه و اون آبجکت اولی نیست.
    البته این که داخل یک متد، یک آبجکت پارامتر رو هم Assign کنید (x=...) چه immutable باشه چه mutable تفاوتی نداره و آبجکت اول تغییر نمیکنه. در صورتی که آبجکت شما mutable باشه و بتونید فیلدهای اون رو تغییر بدید مثل setValue(...) اونموقع آبجکت جدیدی ساخته نمیشه و آبجکت اولیتون تغییر میکنه.

    شما این مفاهیمی که گفته شد رو تو اینترنت سرچ بزنید، اگر مفهوم نبود بگید تا با رسم شکل توضیح بدم، قابل فهمتره

    اینم یه مثال:

    public static void main(String[] args) {
    Integer x=1,y=2;
    System.out.println("X="+x+", Y="+y);
    swap(x,y);
    System.out.println("X="+x+", Y="+y);
    }

    public static void swap(Integer first,Integer second){
    Integer temp=first;
    first=second;
    second=temp;
    }

    خروجی:
    X=1, Y=2
    X=1, Y=2

تاپیک های مشابه

  1. لطفا یکی ببینه چرا این کد اجر نمی شه ؟؟
    نوشته شده توسط mohammad_amini در بخش PHP
    پاسخ: 5
    آخرین پست: یک شنبه 05 آبان 1392, 15:55 عصر
  2. چرا پیج من باز نمی شه
    نوشته شده توسط qhoqnose در بخش ASP.NET Web Forms
    پاسخ: 9
    آخرین پست: شنبه 21 بهمن 1391, 09:40 صبح
  3. چرا کدهای من اجرا نمی شه
    نوشته شده توسط thinking21 در بخش CakePHP
    پاسخ: 11
    آخرین پست: چهارشنبه 24 شهریور 1389, 16:41 عصر
  4. چرا اطلاعات وارد دیتابیس نمی شه(eror در objConnection.Open)
    نوشته شده توسط reza1078 در بخش ASP.NET Web Forms
    پاسخ: 12
    آخرین پست: یک شنبه 21 تیر 1388, 14:21 عصر
  5. چرا مقدار یک متغیر استاتیک از بین می ره؟
    نوشته شده توسط elham.net در بخش C#‎‎
    پاسخ: 5
    آخرین پست: دوشنبه 11 دی 1385, 10:20 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •