سؤال جافا محيرني

Abdurrahman • منذ 5 سنوات

لماذاطبع قيمة من تحت وقيمة من فوق ؟! :"(

public class test {
        public static void main(String[] args) {
       
           int [] a = {1,2,3,4};
                   double b = 6.0 ;
                   int c = 9 ;
                   degerata (a,b,c);
                   System.out.println(a[0]+"--"+b);
                   
}
        public static void degerata(int [] a , double b, int c){
            a[0] = 5 ;
            b = 7.0;
            
            
        }
}
 

6.0--5  :  Result

 

 

كلمات دليلية: java

ساعد بالإجابة

"إن في قضاء حوائج الناس لذة لا يَعرفها إلا من جربها، فافعل الخير مهما استصغرته فإنك لا تدري أي حسنة تدخلك الجنة."

الإجابات (2)

Mohamad Shaftar • منذ 5 سنوات

السلام عليكم,

احيانا يوجد اشياء في البرمجة يجب مراعاتها او اخذها بعين الاعتبار والتسليم لها 

لا اعرف طريقة شرح الاجابة لانني ارى الاجابة صعبة قليلا ولكن وجدت مايمكنه مساعدتك. 

للاجابة عن سؤال الرجاء زيارة الرابط التالي:

https://stackoverflow.com/questions/7127530/does-array-changes-in-method

اتمنى ان تكون اجابة مفيدة

Hussain Aljabri • منذ 4 سنوات

السلام عليكم اخي عبدالرحمن,

ادري متاخر الجواب, لاكن انا جديد عالموقع.

الجواب كالتالي:

اعتبر main مثود. وكل مثود عبارة عن بلوك خاص يحتوي على عناوين خاصة private للمثود نفسه. 

  • انت معرف ال b داخل main فا هوا private خاص للmain ميثود, حلو؟.
  • انت حاط اسم مشابه في الفنكشن فا b الي تتغير هي داخل المثود ما راح ياثر على اي شي خارج المثود مشابه للاسم.
public class test {

public static void main(String[] args) {
       

           double b = 6.0 ;

                   
}
        public static void degerata(int [] a , double b, int c){

            b = 7.0;
        }
}

 

عشان تعرف ايش اقصد فقط غير محل تعريف b وحطه خارج المثود حتى يصبح عنوانه public ثم غير اسم b هنا

public static void degerata(int [] a , double b, int c)

مثلا:

public class test {
        static double b = 6.0;
        public static void main(String[] args) {
       
           int [] a = {1,2,3,4};
           
                   int c = 9 ;
                   degerata (a,b,c);
                   System.out.println(a[0]+"--"+b);
                   
}
        public static void degerata(int [] a , double ba, int c){
            a[0] = 5 ;
            b = 7.0;
            
            
        }
}

سوف تتغير معك الاجابة. لاكن لماذا تغير محتوى a ؟ الان اقلك.

a عبارة عن مجموعة من المحتويات تمتلك عناوين وكل عنوان يحتوي على محتوى.

فا الarray (مجموعة مصفوفة) تبدا من عنوان معين, ثم تزيد على هذا العنوان رقم (offset) حتى تصل لعنوان جديد يحتوي على المحتوى المطلوب

مثلا: لو نبي متحوى رقم (3) وليس العنوان. حسابيا راح يسير كذا ( عنوان a الاساسي + رقم ال(offset)  = عنوان محتوى 3.

فالسبب هو: عند ارسالك int[] a وهي عبارة عن مجموعة من المحتويات تبدا من عنوان معين فا int[] a هنا عنوان للمحتوى الاساسي بحيث عند التعديل عليه يتم التعديل على المحتوى الاساسي.

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !