✏️ #راه_حل
📃موضوع: رد کردن ورودی 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