الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال للمبتدئين في الجافا (2)

بدأه Snack3r في 7 يونيو 2013 · 4 رد · 617 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

 

ما هي مُخرجات الكود التالي مع التبرير ؟ وكيف يتم تصحيحها ؟

post-219439-0-02340600-1370630983_thumb.

 

 

 

 

تحياتي.

1
#2

نظريا مخرجات الأمر هي 600

التبرير

أنشأنا كائنا t1 ثم أشئنا مؤشرا  t2  يشير إلى نفس ما يشير إليه المؤشر t1  فكل تغيير يحدث للكائن t1 سيحدث للكائن t2 لأنهما يشيران إلى نفس الموقع من الذاكرة

 

لتصحيح الخطأ ننشأ الكائن t2 هكذا

Test t2 = new Test();

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#3

يسعد مساكك استاذي العزيز


 


الاوت بوت :


 


600


 


السبب :


الاوبجكت الاول انشى بقيمة افتراضية موجوده في Constructors وهي 5000


بعد ذلك انشأت اوبجكت ثاني يحمل نفس العنوان والقيمة لـ الاوبجكت الاول ,,  ( اصبحوا الاثنين يحملون نفس العنوان Reference )


بعد ذلك غيرنا قيمة size   في الاوبجكت الاول الى 400 بواسطة دالة الـ setter


بعد ذلك غيرنا قيمة size   في الاوبجكت الثاني  الى 600 بواسطة دالة الـ setter


وبما اننهم يحملون نفس العنوان Reference  اذا سوف تتغير قيمة الـ size  القديمة لتصبح 600


بعد ذلك طبعنا size للاوبجكت الاول وقيمتهه 600 ,,


( وحتى لو طبعنا قيمة الـ size في الاوبجكت الثاني راح تكون 600 )


 


 


 


بالنسبة لسوالك الثاني : وكيف يتم تصحيحها  ؟؟


 


اذا كان قصدك ان كل اوبجكت يصير له قيمة مستقل ؟؟


الحل بكل بساطة لما انشأنا الاوبجكت الثاني ننشيئة بـ Constructors الافتراضي وبعنوان  Reference  مستقل


( غير الجزء اللي بعد علامة = )


 


 


 


اتمنى ان اكون وفقت في الاجابة الصحيحه

#4

اتفق معهم فى التبرير

 

والحل هو فى Copy Constructor

 

انظر الكود التالى

 

public class Test{

private int size;

public Test()
{
    size = 5000;
}

public Test(Test aTest)
{
    this();
    size = aTest.getSize();
}

public void setSize(int height)
{
    size = height;
}

public int getSize()
{
    return size;
}

 public static void main(String []args){
    Test t1 = new Test();
    Test t2 = new Test(t1);
    t1.setSize(400);
    t2.setSize(600);
    System.out.println("t1.size = " + t1.getSize() + " ,t2.size = " + t2.getSize());
 }
}

 

المخرجات

 

t1.size = 400 ,t2.size = 600


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#5

السلام عليكم

 

 

المشاركات كانت قيمة و لله الحمد.

 

يوجد حل آخر و هو استخدام الدالة clone التابعة لــ Object و عمل Implementation للواجهة Cloneable.

 

 

تحياتي.

مواضيع مشابهة