PDA

View Full Version : سوال: مشکل با متد toUpperCase



amirsaleh74
جمعه 01 بهمن 1395, 05:01 صبح
سلام دوستان عزیز


حادثه ی از دست دادن قهرمانان کشورمون رو به همه تسلیت میگم و امیدوارم هرجا که هستین شاد و سلامت باشین.


در این دستور




char Shop = typeSelection.next().charAt(0);
char toUpperCase = Character.toUpperCase(Shop);

خط اول که برای گرفتن ورودی از صفحه کلید است و اولین کارکتر را انتخاب می کند

در خط دوم کلمه ی Charecter چیه؟


String name = "barnamenevis.org";//name var
System.out.println("name.toUpperCase");//print



چرا نمیشه همانند این مثال دستور بالا رو به این شکل نوشت

char Shop = typeSelection.next().charAt(0);
Shop = Shop.toUpperCase();


من گیج شدم مشکل از کجاست خودش رو دارم تو خودش ذخیره میکنم و با مقدار جدید پرش میکنم

amirsaleh74
جمعه 01 بهمن 1395, 08:33 صبح
Scanner keyboardInput = new Scanner(System.in);
String cityName = keyboardInput.next();
cityName = cityName.toLowerCase();

همین دستور برای رشته کار می کنه ولی برای استرینگ خیر
ممکن هست که متدی که برای کوچک و بزرگ کردن حروف به کار میره این قابلیت رو نداشته باشه و به همین علت مجبوریم از Character قبلش استفاده کنیم و داخل پرانتز ذکر کنیم که این تغییرات رو، بر روی کدوم متغییر اعمال بکنه؟

vahid-p
جمعه 01 بهمن 1395, 12:47 عصر
ممنون منم تسلیت میگم.

اما:
پست اولت اشتباهات زیادی داره.

بذارید بدون ترتیب جواب بدم.

همین دستور برای رشته کار می کنه ولی برای استرینگ خیر
String به زبان فارسی رشته میگیم. یعنی معادلن.



char Shop = typeSelection.next().charAt(0);
char toUpperCase = Character.toUpperCase(Shop);
این متد درست کار میکنه، فقط احتمالا مفاهیم شی گرایی رو دقت نکردید. که خب اوایل طبیعیه
متد charAt روی رشته (String) یک کاراکتر بهمون میده. کاراکتر یک متغیر نوع اولیه (primitive type) است. در نتیجه ما نمیتونیم مثل Object باهاش برخورد کنیم. String آبجکت هست (از یک کلاس تعریف میشه) و ما میتونیم مثلا firstName.toUpperCase(); بنویسیم. یعنی متد رو از آبجکت فراخوانی کنیم. ولی برای متغیرهای نوع اول مثل int, char,double, float, ... خودشون یک مکان در حافظه هستن (و کلاس هم ندارن) و هیچ متد (تابع) و... ندارن. در نتیجه شما نمیتونید هیچ متدی (یا فیلدی) رو با نقطه گذاشتن بعدش بدست بیارید. فیلد که اصلا ندارن.

البته این متغیرهای نوع اولیه، برای برخی کارها نیاز داریم با معادل شیءیشون کار کنیم که کلاس های Integer, Character, Double, Floatو ... وجود دارن.

نخوام زیاد درگیر این مفاهیم کنم، Character.toUpperCase کلا یک متد هست (در کلاس Character به صورت static تعریف شده در نتیجه نیازی نیست ما آبجکتی از نوع Character داشته باشیم و با اسم کلاس میتونیم اون متد رو ورداریم و ازش استفاده کنیم)

پس کد بعدیتون به این صورت تصحیح میشه:

char Shop = typeSelection.next().charAt(0);
Shop = Character.toUpperCase(Shop);

و

String name = "barnamenevis.org";//name var
System.out.println(name.toUpperCase());//print
کد پست بعدیتون درسته و چون String یک شیء (Object) هست، میتونید به راحتی متدهاش (توابعش) رو فراخوانی کنید.