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

تمرین هشتم

جمعه, ۱۶ اسفند ۱۳۹۲، ۱۱:۳۶ ق.ظ


سلام

 تمرین هشتم:

هدف تغییر پروژه ی ساعت است به گونه ای که ساعت را به جای 24 ساعته به صورت 12 ساعته نمایش دهد.

شما باید به دو روش زیر (به طور جداگانه) این کار را انجام دهید.

الف) برنامه به طور داخلی 24 ساعته کار می کند ولی در زمان نمایش مقدار ساعت را به صورت 12 ساعته نمایش دهد.

ب) برنامه به طور داخلی نیز 12 ساعته کار کند.


دقت کنید در حالت 12 ساعته، زمان بعد از 12:59، 01:00 خواهد بود و در این حالت ساعت 0 نداریم. در ضمن خروجی برنامه باید قبل از ظهر و بعد از ظهر بودن را با AM و PM مشخص کند.


مثالی از خروجی برنامه در زیر نشان داده شده است.

02:36 AM
10:23 PM

موعد تحویل: شنبه 17 اسفند 92 ساعت 21

با تاخیر: یکشنبه  18 اسفند 92 ساعت 21


موفق باشید.

  • ۹۲/۱۲/۱۶

نظرات  (۹)

سلام استاد . وقتی در بدنه if می نویسیم  hours.getValue()=1; ارور می دهد ودلیلش هم مشخص است اما چرا وقتی در شرط if می نویسیم   if(hours.getValue()==0)  ارور نمی دهد؟؟
پاسخ:

سلام


تفاوت در عملگرهایی است که استفاده کردید.
عملگر = با عملگر == کاملاً متفاوت هستند.

عملگر == مثل یک ترازوست. اگر دقت کنید کفه های ترازو رو می بینید. و کارش مقایسه ی آنچه که دو طرفش میذاریم است.


عملگر = مثل یک فلش به سمت چپ است (البته نوک فلش رو حذف کردن). عمل اون هم انتساب آنچه سمت راست = است به آنچه سمت چپش است می باشد. به عبارت دیگه مقدار عبارت سمت راست را در آنچه سمت چپش است می ذاره. پس سمت چپ باید مکانی از حافظه باشه ( یعنی متغیر) نه یک کار ( متد).

پس عبارت hours.getValue()=1 می خواد مقدار 1 رو داخل متد بذاره (!) که عملی غیر منطقی است. مثل اینکه یکی بیاد 1 رو بذاره داخل تابع سینوس که بی معنی است.

sin(x) = 1;    // این دستور بی معنی و اشتباه است

sin(x) == 1;  // این یک عبارت منطقی است که مثلاً وقتی ایکس برابر با پی دوم باشه ارزش درست دارد


موفق باشید.



سلام
استاد یعنی چی که یه بار برنامه 24 ساعته است و یه بار دیگه 12 ساعته؟ یعنی یه بار برنامه رو 24 ساعته بنویسیم و ذخیره کنیم و بار دیگه 12 ساعته بنویسیم و ذخیره کنیم و در اخر هر دو رو ایمیل کنیم؟
پاسخ:
سلام

یعنی اینکه برنامه ها را جداگانه بنویسید و هر کدام را جداگانه ارسال کنید.

موفق باشید.
سلام منظورتون از اینکه داخلی 24 ساعته باش ه ولی 12 ساعته نمایش بده چیست ؟
منظورتون اینه که limite 24 باشه؟
پاسخ:
سلام

به طور داخلی 24 ساعته باشه یعنی اینکه مثل پروژه ی اصلی باشه، فقط وقتی می خواهد رشته ی displayString رو به روز کنه ساعت رو به صورت 12 ساعته در رشته قرار بده.

به طور داخلی 12 ساعته باشه یعنی اینکه هر وقت رفتید سراغ فیلدها و state رو دیدید، ساعت به صورت 12 ساعته ذخیره شده باشد. در درون، ساعت 12 ساعته باشه و برخلاف روش الف متد updateDisplay زمان رو به 12 ساعته تبدیل نکنه.

موفق باشید.
سلام. AM/PM رو باید به صورت پارامتری از جنس رشته گرفت؟ چون در این صورت کاربر هر چی وارد کند در کنار ساعت چاپ میشود.آیا راه دیگری هست؟
پاسخ:
سلام

بله.
شما باید بررسی کنید که چیزی که کاربر وارد می کند معتبر باشد. به عبارت دیگر از فیلتری که شما ایجاد می کنید باید عبور کند.
نکته مهم: برای مقایسه ی رشته ها نباید از == استفاده کرد بلکه باید از متد equals کلاس String استفاده کنید.

به مثال زیر توجه کنید.

String s = "AM";

if(s.equals("AM")) {
System.out.println("OK");
}


موفق باشید.
سلام استاد خسته نباشی
من مشکل دارم با am-pm نمیدونم باید چیکار کنم... لطفا راهنمایی کنید
پاسخ:
سلام ممنون
پاسخ داده شد.
موفق باشید.
سلام استاد خسته نباشی
اگه میشه یه کم راهنمایی بیشتر بدین در رابطه با

am, pm
پاسخ:
سلام، ممنون

در قسمت الف با توجه به زمان باید AM/PM در رشته ی displayString ایجاد بشه. یعنی اگر زمان بین 00:00 تا 11:59 بود، باید AM تولید بشه و اگر زمان بین 12:00 تا 23:59 بود PM. زمانی که زمان رو دریافت می کنید (در setTime) این مقدار رو نیز دریافت کنید (از طریق پارامتر) و با توجه به آن ساعت 24 ساعته رو (فیلدها رو) تعیین و تنظیم کنید.

اما در قسمت ب که برنامه باید به طور داخلی 12 ساعته باشه، باید یه جایی AM یا PM رو ذخیره کنید (فکر می کنید کجا؟) و همراه با تغییر زمان در صورت نیاز تغییرش بدین. هر وقت هم که زمان رو دریافت می کنید، اون رو هم دریافت کنید و در همون جایی که براش در نظر گرفتید ذخیره اش کنید.

موفق باشید.
بخش‌هایی از این نظر که با * مشخص شده، توسط مدیر سایت حذف شده است
سلام استاد.
به خاطر جوابتون ممنونم
*** ***** *** **** ****** *******
** ****** ****** ** ***** *** هنوز نمیتونم تو جیمیلم برم.
ت**** **** ** ** ****** ***** ****** ***** ******* **** **** ** ****** ****** ** ***** * ** **** ***** ***** *** **** ***** ****** ** *** ***** * ** ***** *** ** ****** ***** ** **** * ******* ****
******* ** ***** ** ***** *****
***** ****** *****
*********************************************

پاسخ:
سلام ممنون

تمرین رو علاوه بر من باید به استاد حل تمرین هم تحویل دهید.

موفق باشید.
با سلام
استاد ببخشید ولی میشه یه کاری کرد که وقتی کاربر در بخش setTime وارد میشه جایی که اعداد رو میخواد وارد کنه یه فلش رو به پایین وجود داره.
میشه AM/PM رو در اون فلش قرار داد تا خودش زمانی رو که میخواد رو انتخاب کنه؟
راهی هست؟؟
ممنون
پاسخ:
سلام

راهی هست ولی باید خودتون برنامه ش رو بنویسید. منظورتون GUI هست یعنی رابط گرافیکی کاربر. اما هدف BlueJ این نیست. هدفش اینه که شما پارامترها رو دستی وارد کنید تا چگونگی اجرای برنامه رو درک کنید.

نتیجه گیری: فعلاً راهی نیست جز اینکه اطلاعات را به صورت پارامتر وارد کنید!

موفق باشید.

سلام استاد
ببخشید برای تمرین هشتم باید Am و Pm را خود برنامه تشخیص دهد یا خودمان برای کاربر نشان دهیم که کدام  را می خواهد؟
با تشکر.
پاسخ:
سلام

باید با توجه به زمان، AM یا PM در خروجی نمایش یابد.
البته در متد setTime که باید زمان را دریافت کند، با پارامتر مناسب AM/PM را دریافت کنید.

موفق باشید.