تیکه پاره های جاوا
527 subscribers
93 photos
24 videos
7 files
58 links
سلام خوش اومدید. اینجا یادداشت ها و تکه های جاوا رو کنار هم قرار میدیم :) مطالب کاملا اختصاصی و دستنویس هستند. کپی فقط با ذکر منبع و آیدی کانال❤️

📝برای تدریس پیام دهید
محمدرضا عظیمی‌فرد
🆔 @mrvj475
Download Telegram
✏️ #راه_حل
📃موضوع: رد کردن ورودی 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
💎 کلاس Scanner و متد هایuserDelimeter و delimeter

🔆 همانطور که میدانید، کلاس اسکنر برای خواندن داده های ورودی کاربرد دارد. برای مثال برای هر کدام از ورودی های از نوع اینتجر، دابل، استرینگ و... کلاس اسکنر متد هایی را فراهم کرده است.

🔅یکی از متد های پر کاربرد کلاس Scanner، متد useDelimeter میباشد. بوسیله ی این متد میتوان یک جداکننده برای داده ورودی در نظر گرفت. برای مثال "," را جدا کننده رشته "Hello,From,ITHOOLOO" قرار میدیم و ورودی هارو چاپ میکنیم:
import java.util.Scanner;

public class ITHOOLOO {
public static void main(String[] args) {
String text = "HELLO,FROM,ITHOOLOO";
Scanner input = new Scanner(text);
input.useDelimiter(",");
while(input.hasNext())
{
System.out.println(input.next());
}
}
}
در این صورت خروجی به صورت زیر خواهد بود:
HELLO
FROM
ITHOOLOO
💡متد delimeter جدا کننده را برگشت میدهد:
input.delimiter(); // return ,

⭕️ یکی از کاربرد های useDelimeter در هنگام خواندن فایل و جدا کردن داده ها میباشد.
🔰برای مثال:
فرض کنید یک فایل در زیرشاخه src به نام test.txt داریم که شامل رشته زیر میباشد:
Mohammad,23,Iran

حال برای خواندن و ذخیره اطلاعات داریم:
public class ITHOOLOO {
public static void main(String[] args) {
File file = new File("src\\Test.txt");
String name = "";
int age = 0;
String country = "";
Scanner input = null;
try {
input = new Scanner(file);
input.useDelimiter(",");
while(input.hasNext())
{
name = input.next();
age = Integer.parseInt(input.next());
country = input.next();
}

} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
if(input!=null)
input.close();
}
System.out.println(name);
System.out.println(age);
System.out.println(country);
}
}
در این مثال خروجی بصورت زیر خواهد بود:
Mohammad
23
Iran
#scanner #delimeter #useDelimeter

@pieceJava
👍3