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

سؤال لتوضيح فكره

بدأه العيافـي في 11 فبراير 2011 · 21 رد · 1,362 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

لا اعلم ما هو العنوان المناسب لمثل هذه المشاركة.

في الشفره التالية ماذا تتوقع سيكون الرقم المطبوع لحجم map

لا تستخدم compiler

public static void main(String[] args) {	
		HashMap<Short, Short> hashMap=new HashMap<Short, Short>();
		for (short i = 0; i < 10; i++) {
			hashMap.put(i, i);
			if(i>0)hashMap.remove(i-1);
		}
		System.out.println(hashMap.size());
	}
1
#2

منطقياً الخرج سيكون 0 بدون استخدام الكومبايلر كما طلبت

بس ايش الفكره اللي تحاول توصلها بالضبط؟

تم تعديل هذه المشاركة بواسطة M.Allaw في 11 فبراير 2011 في 12:22


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#3

هيكون 1 على ما اعتقد

وايضا بدون استخدام الكومبيلر

Software Developer
Mahmoudkelany.com


 

#4

لحظه لحظه , اولاً عدد العناصر مابيتعدى الواحد فكيف بيمشي لما تقول له مثلاً remove للعنصر 3 أو اربعه؟

فإذا ما أحدث Exception في الدورة الثالثة فبيكون الخرج 9 مش 1 ولا 0 !!

تم تعديل هذه المشاركة بواسطة M.Allaw في 11 فبراير 2011 في 13:14


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#5

هذه الشيفرة رأيتها في Java pazzels

لذا سأسكت على كل في وقتها كان جوابي 1

والذي اتضح في النهاية أني مخطئ :(

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#6

إذن مثلما قلت , فإما تكون النتيجة 9 أو سيخرج البرنامج في الدورة الثالثة بسبب Exception , صح؟


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#7

حسب ما اتوقع الناتج سوف يكون

9 كائنات

لكن الناتج الفعلي كان غير :blink: :blink:

--

على ما يبدو انها مشكلة *****:ohmy: :ohmy:

تم تعديل هذه المشاركة بواسطة .S.T.A.L.K.E.R في 11 فبراير 2011 في 19:00

#8

لا وجود لمشاكل ولن تحصل على 9 :)

لا أريد أن أتكلم كثيراً في انتظار الأخ العيافي

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#9

ههههههه

عرفت الخدعة

مثلما توقعت الخدعة في ال****

:wink: :wink:

تم تعديل هذه المشاركة بواسطة .S.T.A.L.K.E.R في 11 فبراير 2011 في 18:59

#10

الحقيقة ان الناتج هو 10

السبب انه لن يتم حذف اي كائن من map بسبب ان

i-1 سيكون كائن من النوع int

و map تحتوي على كائنات من النوع short

لذلك لن يتم الحذف

#11
العيافـي كتب:

الحقيقة ان الناتج هو 10

السبب انه لن يتم حذف اي كائن من map بسبب ان

i-1 سيكون كائن من النوع int

و map تحتوي على كائنات من النوع short

لذلك لن يتم الحذف

وماهى الفكره التى وضحت ؟؟

Software Developer
Mahmoudkelany.com


 

#12

لحذف كائن من ال HashMap

يجب تمرير الكائن نفسه ال Key

عندما كائن يضع

hashMap.put(i, i);

فأن نوع الكائن هو short

و عند الحذف

hashMap.remove(i-1);

فأن نوع الكائن المتكون من جراء العملية الحسابية (الطرح) هو Integer

لذلك لن يتم الحذف

حيث انه يتكون كائن جديد لا يؤشر على الكائن المتوقع حذفه

#13
Mahmoud Kelany كتب:

وماهى الفكره التى وضحت ؟؟

اعاد توضيحها محمد عرسان (.S.T.A.L.K.E.R) بطريقة افضل.

#14

المعنى ببساطة autoboxing كائن شرير فلا تستخدمه أبداً

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#15

طيب إضافة الكائن وفهمناها طيب ليش حطينا القيمة دبل؟ وكأن الباراميتر الأول عنوان للعنصر او شئ من هذا القبيل والثاني العنصر المراد إضافته!!<br>ماتلاحظوا انهم واجعين راسهم ورؤوسنا بأشياء مالها لزمة؟ List و ArrayList وهذا اللي نتكلم عنه ومش عارف ايش وكلهم فكرتهم إضافة عناصر داخلهم وكانوا يقدروا يدمجوا هذا كله بكلاس واحد؟ مش لو كانوا استغلوا الوقت اللي برمجوا به هذه الكائنات في أشياء اهم تفتقر لها الجافا كان أبرك لهم؟ <img class="bbc_emoticon" alt=":mad:" src="/public/style_emoticons/default/mad.gif"><br>

تم تعديل هذه المشاركة بواسطة M.Allaw في 13 فبراير 2011 في 06:58


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#16

ههههههههههههههههه

المهم في الموضوع أن تصلك الفكرة يا حج محمد

وليس أن يكتبوا البرامج

هؤلاء يحاولوا أن يشيروا إلى مشاكل موجودة في الجافا

هذه المشاكل قد يقع فيها حتى مبرمجي صن

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#17
اقتباس
المعنى ببساطة autoboxing كائن شرير فلا تستخدمه أبداً

اعجبني هذا الوصف ..

M.Allaw كتب:

طيب إضافة الكائن وفهمناها طيب ليش حطينا القيمة دبل؟ وكأن الباراميتر الأول عنوان للعنصر او شئ من هذا القبيل والثاني العنصر المراد إضافته!!<br>ماتلاحظوا انهم واجعين راسهم ورؤوسنا بأشياء مالها لزمة؟ List و ArrayList وهذا اللي نتكلم عنه ومش عارف ايش وكلهم فكرتهم إضافة عناصر داخلهم وكانوا يقدروا يدمجوا هذا كله بكلاس واحد؟ مش لو كانوا استغلوا الوقت اللي برمجوا به هذه الكائنات في أشياء اهم تفتقر لها الجافا كان أبرك لهم؟ <img class="bbc_emoticon" alt=":mad:" src="/public/style_emoticons/default/mad.gif"><br>

لهجتك نجديه . :)

اما بالنسبه للكائنات فانت تستخدمها كثيرا في برامجك الحقيقية.

اما بالنسبه للمشكله فاعتقد انها منطقيه , ولكن يجب التنويه عليها , فقد لا تكون في ذهن المبرمج .

#18
اقتباس
ههههههههههههههههه

المهم في الموضوع أن تصلك الفكرة يا حج محمد

وليس أن يكتبوا البرامج

هؤلاء يحاولوا أن يشيروا إلى مشاكل موجودة في الجافا

هذه المشاكل قد يقع فيها حتى مبرمجي صن

ايوه الفكره وصلت بس أقصد ان صن اشوفهم أعطوا هذا الجانب أكثر مما يستاهل وفي النهاية ماهو الا كلاس يضيف عناصر داخله مثل الـLinkedList وانتهى الموضوع ولكن جابوا له مش عارف كم اسم وغيروا شوية حاجات في كل كلاس ولكن تجي للواقع كلها تؤدي نفس الغرض , تصدق اني للآن ولا قد لجأت لواحد من هذه الكلاسات؟ شغال على المصفوفات حلاوه بدون اي مشاكل , هذه صح انها اكثر دايناميكية بحيث انك ماتحدد لها حجم مسبق بس كلاس واحد كان يكفي مش عشرة كلاسات ؟!! wacko.gif

يعني كنا نضحك على السي شارب انها مليانه اشياء بلا لزمة والجافا عندها نفس المشكله , واللي يقهرك ان في اشياء تاااااافهه موجوده في كل اللغات وماوفروها unsure.gif


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#19
اقتباس

لهجتك نجديه . :)

اما بالنسبه للكائنات فانت تستخدمها كثيرا في برامجك الحقيقية.

اما بالنسبه للمشكله فاعتقد انها منطقيه , ولكن يجب التنويه عليها , فقد لا تكون في ذهن المبرمج .

انا؟!! لا ابداً انا يمني بحت <== ركز على كلمة "بحت" متعوب عليها بقوه happy.gif

بالفعل المشكله في تصميم الكلاس نفسه , فالحذف كان مفترض يكون بعنوان العنصر لا بنوعه كما تقضل الأخ محمد عرسان , العنوان يكون Integer موحد لكل العناصر سواء كانت العناصر المضافة Short ولا Object حتى

ياجماعه انا بصراحه ساخط على الوضع , وبصراحه اذا شفت ماتحسن مستوى الجافا خلال هذه السنه بضطر اسحب دعمي لأوراكل وامسح رقم لاري اليسون من جوالي <== لا ياشيخ tongue.gif


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#20

بالعكس يا محمد انصحك وبشدة أن تقرأ عن مجموعة Collection الخاصة بالجافا

الصراحة أنها من أروع الأدوات التي قدمتها صن في جافا

للتوضيح المشكلة سببها الأساسي هو عملية التحويل من short إلى Short أو ما يعرف بـالتعبئة التلقائية autoboxint

كتبت عنه هذه المقالة لمحة جافاوية 20: التعبئة التلقائية

هذه الخاصية أضيفت في الإصدارة الخامسة وما فوق

في الماضي كنت تحتاج لتحويل الكائن إلى المتغير البدائي primative إلى استخدام عملية التحويل القسري casting

الصراحة أن منظر الشيفرة كثير من الأحيان ما كان سيء وغير جيد بالمرة

الإشكال الحاصل ليس من التعبئة التلقائية لوحدها

وإنما من كون الجافا تعتبر أي عملية تجرى على أي من الأنواع التالية char, byte, int أو short تحوله مباشرة وبدون كلام إلى int

وهذا يعني أنك لو قلت س -1 أياً كان نوع س فإن الناتج هو عدد صحيح int

بالتالي عندما يتم تعبئته تلقائياً في كائن يتم تحويله إلى Integer

نأتي الآن لعملية المساواة عملية المساواة ستنتهي بك إلى أن تتطلع هذا عدد صحيح int وهذا عدد صحيح قصير

وفي عرف الكائنات فإن هذان كائنان من نوعين مختلفين بالتالي هم لا يستوون

هل وصلت الفكرة؟

تحياتي

1
حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#21

اشكرك عزيزي علاء على الرابط وبأذن الله سأطلع عليه حالاً :)


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#22

ملاحطه رائعه ..

تقبل مرورى +1

no-pain-no-gain.jpg

اذا كنت لا تعلم الى اين تذهب... فكــل الطرق تؤدى الى هناك

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