سلام دوستان :)
امیدوارم حالتون خوب باشه
این کانال رو از این جهت راه اندازی کردم که نکاتی در مورد جاوا هر چند کوچک یا ساده رو اینجا قرار بدم... ناگفته نمونه که بعضی از اینها، شاید روز ها زمان برد تا بدست بیارم :)
دوست داشتین ازمون حمایت کنین :)
موفق باشین❤️
امیدوارم حالتون خوب باشه
این کانال رو از این جهت راه اندازی کردم که نکاتی در مورد جاوا هر چند کوچک یا ساده رو اینجا قرار بدم... ناگفته نمونه که بعضی از اینها، شاید روز ها زمان برد تا بدست بیارم :)
دوست داشتین ازمون حمایت کنین :)
موفق باشین❤️
👍5
✏️ #راه_حل
📃موضوع: رد کردن ورودی nextLine توسط اسکنر
اگه دقت کرده باشید گاهی اوقات اسکنر ورودی nextLine رو جا میذاره. این اتفاق معمولا زمانی رخ میده که شما بترتیب بخواین یک داده عددی و یک داده رشته ای رو از طریق ورودی بدست بیارید:
❌چرا همچین اتفاقی رخ میده؟
در واقع تنها داده ای که nextInt میتونه دریافت کنه، داده ی عددی هست. زمانی که شما اینتر میزنین، کاراکتر newline ایجاد میشه (یه کاراکتر برای رفتن به سر خط) و این کاراکتر داخل nextLine قرار میگیره. بهمین دلیل، از اونجا که nextLine هم پر میشه، برنامه خاتمه پیدا میکنه یا به هر صورتی ورودی رشته ای انجام نمیشه.
✅راه حل چیه؟
سه تا راه حل داریم :)
🔅راه حل یک:
اگر ورودیتون فقط یک کلمه هستش، بجای nextLine از next استفاده کنین در غیر اینصورت باقی راه حل هارو چک کنید.
🔅راه حل دو:
بعد از هر ورودی nextInt، یه ورودی nextLine خالی برای گرفتن کاراکتر newline قرار بدید:
ورودی عدد رو از طریق nextLine بخونید ولی در نهایت برای ذخیره داده، به عدد تبدیلش کنید:
int x = Integer.parseInt(scanner.nextLine());
تو راه حل دوم، با استفاده از (try catch) جهت کنترل ورودی :)
@pieceJava
📃موضوع: رد کردن ورودی nextLine توسط اسکنر
اگه دقت کرده باشید گاهی اوقات اسکنر ورودی nextLine رو جا میذاره. این اتفاق معمولا زمانی رخ میده که شما بترتیب بخواین یک داده عددی و یک داده رشته ای رو از طریق ورودی بدست بیارید:
Scanner scanner = new Scanner(System.in);
int x = scanner.nextInt();
String y = scanner.nextLine();
مثلا توی کد بالا داده عددی رو میتونید از کاربر بگیرید ولی برنامه قبل از گرفتن داده رشته ای خاتمه پیدا میکنه (امتحان کنین :) )❌چرا همچین اتفاقی رخ میده؟
در واقع تنها داده ای که nextInt میتونه دریافت کنه، داده ی عددی هست. زمانی که شما اینتر میزنین، کاراکتر newline ایجاد میشه (یه کاراکتر برای رفتن به سر خط) و این کاراکتر داخل nextLine قرار میگیره. بهمین دلیل، از اونجا که nextLine هم پر میشه، برنامه خاتمه پیدا میکنه یا به هر صورتی ورودی رشته ای انجام نمیشه.
✅راه حل چیه؟
سه تا راه حل داریم :)
🔅راه حل یک:
اگر ورودیتون فقط یک کلمه هستش، بجای nextLine از next استفاده کنین در غیر اینصورت باقی راه حل هارو چک کنید.
🔅راه حل دو:
بعد از هر ورودی nextInt، یه ورودی nextLine خالی برای گرفتن کاراکتر newline قرار بدید:
int x = scanner.nextInt();
scanner.nextLine();
String y = scanner.nextLine();
🔅راه حل سه:ورودی عدد رو از طریق nextLine بخونید ولی در نهایت برای ذخیره داده، به عدد تبدیلش کنید:
int x = Integer.parseInt(scanner.nextLine());
تو راه حل دوم، با استفاده از (try catch) جهت کنترل ورودی :)
try {
int x = Integer.parseInt(input.nextLine());
} catch (NumberFormatException e) {
e.printStackTrace();
}
#Scanner #nextInt #try_catch #NumberFormatException #nextLine@pieceJava
👍8
✏️ #راه_حل
📃موضوع: تعداد ارقام
پایه ای ترین متد برای بدست اوردن تعداد ارقام، تعداد تقسیم هاییه که عدد رو به صفر میرسونه:
⭕️ راه حل اول (ساده ترین روش):
تبدیل عدد به رشته و بدست اوردن طول رشته:
تو این روش لگاریتم عدد در مبنای ده محاسبه و رو به بالا گرد میکنیم:
📃موضوع: تعداد ارقام
پایه ای ترین متد برای بدست اوردن تعداد ارقام، تعداد تقسیم هاییه که عدد رو به صفر میرسونه:
int numberOfDigits = 0;تو این مثال متغیر numberOfDigits بعد از پایان حلقه تعداد ارقام رو برمیگردونه اما خوبه که دو راه حل سریعتر برای اینکار رو هم ببینید:
int number = 4755;
while(n!=0){
n=n/10;
numberOfDigits++;
}
⭕️ راه حل اول (ساده ترین روش):
تبدیل عدد به رشته و بدست اوردن طول رشته:
int length = String.valueOf(number).length();⭕️ راه حل دوم:
تو این روش لگاریتم عدد در مبنای ده محاسبه و رو به بالا گرد میکنیم:
int length = (int) (Math.log10(number) + 1);@pieceJava
👍5
💎 تفاوت BufferedWriter و FileWriter
⭕️ بافر چیست؟
یه حافظه موقت که اطلاعات تا زمانی که کامل نشده اونجا ذخیره میشه.
⭕️ فلاش flush چیست؟
یعنی تمیز کردن جریان (stream) و ارسال داده ها به مقصد (file)
⭕️ نوشتن یا write چیست؟
این متد برای نوشتن در فایل استفاده میشه
🔆 کلاس BufferedWriter
این کلاس حرف به حرف رو داخل بافر ذخیره میکنه و بعد از کامل شدن، یکباره به مقصد ارسال میکنه. حافظه بافر محدوده ولی به اندازه کافی برای اکثر اهداف و استفاده ها جا داره. BufferedWriter یه ذره کند عمل میکنه (چون تا پر شدن بافر صبر میکنه) ولی در کل برای نوشتن فقط یکبار flush میکنه یا بهتر بگم، یک بار system call میکنه که این میتونه در مقیاس بالاتر کارآمد باشه.
🔆 کلاس FileWriter
این کلاس نسبت به BufferedWriterسریعتره ولی از لحاظ پرفورمنس ناکارآمده! فایل رایتر با هر بار صدا زدن متد write، پشتش اطلاعات رو ارسال میکنه
مثال:
⭕️ از کدوم استفاده کنیم؟
زمانی از فایل رایتر استفاده کنید که اطلاعات کمی برای ذخیره دارید. چون همونطور که گفتم در مقیاس بالاتر، باعث کندی برنامه میشه.
زمانی از بافرد رایتر استفاده کنید که لزوم به نوشتن داخل فایل به دفعات بالا باشه.
#FileWriter #BufferedWriter #Buffer #flush #write #flush() #write() #IO #File
@pieceJava
⭕️ بافر چیست؟
یه حافظه موقت که اطلاعات تا زمانی که کامل نشده اونجا ذخیره میشه.
⭕️ فلاش flush چیست؟
یعنی تمیز کردن جریان (stream) و ارسال داده ها به مقصد (file)
⭕️ نوشتن یا write چیست؟
این متد برای نوشتن در فایل استفاده میشه
🔆 کلاس BufferedWriter
این کلاس حرف به حرف رو داخل بافر ذخیره میکنه و بعد از کامل شدن، یکباره به مقصد ارسال میکنه. حافظه بافر محدوده ولی به اندازه کافی برای اکثر اهداف و استفاده ها جا داره. BufferedWriter یه ذره کند عمل میکنه (چون تا پر شدن بافر صبر میکنه) ولی در کل برای نوشتن فقط یکبار flush میکنه یا بهتر بگم، یک بار system call میکنه که این میتونه در مقیاس بالاتر کارآمد باشه.
🔆 کلاس FileWriter
این کلاس نسبت به BufferedWriterسریعتره ولی از لحاظ پرفورمنس ناکارآمده! فایل رایتر با هر بار صدا زدن متد write، پشتش اطلاعات رو ارسال میکنه
مثال:
for(int i = 0; i < 100; i++) {
writer.write("foorbar");
writer.write(NEW_LINE);
}
writer.close();
تو این مثال اگه از فایل رایتر استفاده کرده باشید، باید 200 بار (100*2) بار سیستم کال کنید و اطلاعات رو داخل دیسک ذخیره کنید! که این خودش دلیلی بر ناکارآمدیه ولی اگه از بافرد رایتر استفاده کنید، فقط 1 بار لازم به system call هست⭕️ از کدوم استفاده کنیم؟
زمانی از فایل رایتر استفاده کنید که اطلاعات کمی برای ذخیره دارید. چون همونطور که گفتم در مقیاس بالاتر، باعث کندی برنامه میشه.
زمانی از بافرد رایتر استفاده کنید که لزوم به نوشتن داخل فایل به دفعات بالا باشه.
#FileWriter #BufferedWriter #Buffer #flush #write #flush() #write() #IO #File
@pieceJava
👍1
