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

تمرین بیستم

دوشنبه, ۲۲ ارديبهشت ۱۳۹۳، ۰۴:۴۰ ب.ظ

سلام دوستان

تمرین بیستم به این شرح است که ابتدا یک کلاس با نام Person برای شخص بنویسید که دارای فیلدهای زیر باشد:

  • نام
  • کد ملی (از نوع long)
  • جنسیت (از نوع کاراکتر)
  • وضعیت تاهل (از نوع boolean)

متد toString را برای این کلاس به گونه ای بنویسید که همه ی اطلاعات شخص را در یک سطر برگرداند. سپس یک مجموعه (set) تعریف کرده و تعدادی شی با مشخصات یکسان از کلاس Person به آن اضافه کنید. محتوای set را چاپ کنید.

حال متدهای equals و hashCode را در کلاس Person پیاده سازی کنید. و دوباره محتوای set را چاپ کنید.

نتیجه حاصل از اجرای این تمرین را به همراه کد ارسال نمایید.


مهلت ارسال: چهارشنبه 24 اردیبهشت 92 ساعت 21

با تاخیر: x


  • ۹۳/۰۲/۲۲

نظرات  (۱۵)

خوب وقتی این دو تا متد را هم نوشتیم بازم همشو چاپ می کنه و تکراری ها رو حذف نمی کنه! مگر اینکه براش شرط بزاریم مثل همون چیزی که حمید رضا گفت

پاسخ:
نه این طور نیست.
موفق باشید.
یه سوال استاد بعد از این که از کلاس پرسن اشیای یکسان ساختیم و اد کردیم تو set حالا باید متد های equals , hashcode رو روش فراخانی کنیم بعد چاپشون کنیم درسته؟
پاسخ:
سلام
نه. نباید متد های equals , hashcode رو روش فراخوانی کنید.
سوال رو درست بخونید لطفاً.
موفق باشید.
سلام
استاد
باید از کدام کالکشن استفاده کنیم؟
hashset یا set???
پاسخ:
سلام
از HashSet استفاده کنید.
موفق باشید.
سلام استاد
خسته نباشید
استاد مگه اشیا درhashsetاگه یکسان باشند نباید حذف بشوند پس چرا موقع چاپ شدن همه ی اشیا چاپ می گردند؟
پاسخ:
سلام ممنون
ظاهراً برای Person  در ابتدا این طور نیست. ولی شما باید کاری کنید که این طور بشود.
چگونه؟ تمرین رو تا آخر انجام دهید متوجه می شوید.
موفق باشید.

سلام استاد
اگر اعدادی رو که hashcode میده برای هر شی یکسان باشه ومقداری رو که equals برای هرشی برمی گردونه یکسان باشه به این  نتیجه مرسیم که همه ی اشیا داخل  set یکسان هستند وباید این حالت روبا حالت اول بدون این دومتد رو مقایسه کنیم؟
پاسخ:
سلام
منظور اینه که بفرمایید Set چگونه متوجه می شه که دو شی یکسان هستند.
موفق باشید.
سلام استاد
پیروز باشید
استاد منظورتون از پیاده سازی کردن دو متدequals وhashcode چیه؟
یعنی اون دوتا متد رو بایدoverrideکنیم؟
یا نه فقط به کلاس Person اضافه کرده وروی اشیای set اعمال کنیم؟؟ونتیجه رو چاپ کنیم؟؟؟
پاسخ:
سلام ممنون
بله. آن دو متد را در کلاس Person رو نویسی (override) کنید.
و بعد دوباره برنامه را اجرا کنید.
موفق باشید.
سلام.
منظورتون از  (در محل شماره سطر) چیه.من equals رو نوشتم ولی hashCode رو نمیتونم پیاده کتم.لطفا توضیح بدید
پاسخ:
سلام.
در نت بینز هر سطر فایل برنامه یک شماره سطر دارد. آنها را بیابید. حال اگر به سطر header متد equals توجه کنید می بینید به جای شماره سطر مثلث زرد رنگ ظاهر شده است. آن را کلیک کنید و از گزینه های ظاهر شده Generate missing hashCode را کلیک کنید.
موفق باشید.
سلام استاد من این یک تیکه از کد رو که نوشتم همش ارور می ده cant be dereferenced
چرا؟ دقیقا شبیه اسلاید ها نوشتم.

return name.equals(other.name)&&
                 nationalCode.equals(other.nationalCode)&&
                 gender.equals(other.gender)&&
                 maritalStatus.equals(other.maritalStatus);
پاسخ:
سلام
equals متد است. آیا می توان روی داده های primitive متد فراخوانی کرد؟!
موفق باشید.
سلام استاد ببخشید سر کل شما یه کاری می کردید متد hashcode خودش اوراید می شد یعنی نیازی نبود که خودمون بنویسیم چه جوری بود؟
بعد یه سوال دیگه متد equals کارش اینه که یک  object بگیره و اگر اون object از نوع شی ای که ما می خواهیم بود متد هاش هم بررسی کنه ببینه برابرن و در این صورت true برگردونه؟

پاسخ:
سلام
در نت بینز وقتی متد equals را بنویسید در محل شماره سطر علامت زرد رنگی قرار می گیرد که با کلیک بر روی اون منویی با چند گزینه ظاهر می شود که یکی از آنها اضافه کردن خودکار متد hashCode است.
بله. البته فیلدهاش رو بررسی می کنه نه متدهایش رو.
موفق باشید.
سلام استاد.
عیدتون مبارک.
نتیجه و کد رو بفرستیم یعنی چی.کد که واضحه.ولی نتیجه رو چطور بفرستیم.

پاسخ:
سلام ممنون
نتیجه رو در یک ویرایشگر مثل word در حد یک یا دو پاراگراف بنویسید و ارسال کنید.
موفق باشید.
سلام استاد
ببخشید در مورد متد های مورد نظر که باید اضافه کنیم.
دقیقا کجا اضافه کنیم؟؟؟
باید داخل متد set جایی که میخوایم اضافه کنیم شرط بزاریم که اگه true بود اضافه نکنه؟؟
چکار کنیم؟؟؟
متد equals یه بولین برمیگردونه؟؟ کجا استفاده کنیم؟؟

ممنون
پاسخ:
سلام
فقط متدهای equals و hashCode را در کلاس Person پیاده سازی کنید.
همین.
بعد دوباره برنامه رو اجرا کنید.
موفق باشید.
""یک مجموعه (set) تعریف کرده و تعدادی شی با مشخصات یکسان از کلاس Person به آن اضافه کنید.""
یعنی چی استاد؟؟
پاسخ:
سلام
یعنی یک مجموعه (set) مثلاً از نوع HashSet ایجاد کنید. سپس تعدادی شی با مشخصات یکسان از کلاس Person ایجاد کنید. آنگاه اشیاء ایجاد شده از کلاس Person را به شی ایجاد شده از نوع Set اضافه (add) کنید.
موفق باشید.
toString یعنی اول همه رو تبدیل کنه به String بعد برگردونه...؟؟
پاسخ:

سلام
متد toString نمایش رشته ای از شی برمی گرداند. به عبارت دیگر این متد باید همه اطلاعاتی از شی را که برای ما مهم است در قالب String برگرداند.
توضیحات این متد در API:

Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.

موفق باشید.
سلام استاد،روزتون مبارک و وقتتون بخیر
ببخشید من توی blue j نوشتم،یک کلاس تعریف کردم به نام Person که مشخصات شخص توش هست(+متد های getter برای هر کدوم از این مشخصات+متد toString) و همینطور یک کلاس دیگه تعریف کردم به نام Set که توش یه HashSet از کلاس Person هست و متدی برای add کردن person به این مجموعه و متدی برای نمایش محتوای مجموعه
حالا وقتی چند تا person به این مجموعه add کردم که همه مشخصاتشون یکسانه وقتی میزنم show همه عناصر مجموعه رو با این که یکسان هستند چاپ میکنه مثلا مینویسه :
ali-922-man-false
ali-922-man-false
ali-922-man-false
در حالی که set باید عناصر تکراری رو حذف کنه دیگه!
چرا اینجوریه؟ :(
ممنون میشم راهنمایی کنین

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

نازم به حسن مطلع و حسن ختام او

********میلاد حضرت علی بر شما استاد گرامی مبارک باد*******
پاسخ:
سلام
با تشکر از شما
میلاد مولا علی (ع) بر شما هم مبارکباد
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی