हाय! आमचा आजचा धडा खास असेल! आजच्या धड्यात आपण जावा स्कॅनर क्लासबद्दल बोलू. पूर्वी, कार्ये पूर्ण करण्याची आणि प्रोग्राम लिहिण्याची प्रक्रिया सोपी होती: आम्ही काही कोड लिहितो, main() चालवतोपद्धत, प्रोग्राम आवश्यक ते करतो आणि आम्ही पूर्ण केले. पण आता सर्वकाही बदलेल! आज आपण प्रोग्रामशी खरोखर संवाद कसा साधायचा हे शिकू: आपल्या कृतींना प्रतिसाद कसा द्यायचा हे आम्ही शिकवू! आम्ही कोडचे विश्लेषण सुरू करण्यापूर्वी, तुम्हाला स्कॅनर सारख्या उपकरणाचा सामना करावा लागला आहे का? कदाचित. स्कॅनरचे आतील भाग खूपच क्लिष्ट आहेत, परंतु ते कसे कार्य करते याची मूलभूत कल्पना अगदी सोपी आहे: ते वापरकर्त्याने प्रदान केलेला डेटा वाचतो (जसे की पासपोर्ट किंवा विमा पॉलिसी) आणि ही माहिती मेमरीमध्ये संग्रहित करते (उदाहरणार्थ, प्रतिमा म्हणून) ). आज तुम्ही तुमचे स्वतःचे स्कॅनर तयार करणार आहात! अर्थात, ते कागदी दस्तऐवज हाताळू शकणार नाही, परंतु मजकूर यासाठी कोणतीही अडचण येणार नाही :) चला जाऊया!
Java चा स्कॅनर वर्ग
सर्वप्रथम, आपण java.util.Scanner क्लासशी परिचित होणे आवश्यक आहे. त्याची कार्यक्षमता अतिशय सोपी आहे. वास्तविक स्कॅनरप्रमाणे, ते तुम्ही निर्दिष्ट केलेल्या स्त्रोताकडील डेटा वाचते. उदाहरणार्थ, स्ट्रिंग, फाइल, कन्सोल. पुढे, ते माहिती ओळखते आणि त्यावर योग्य प्रक्रिया करते. येथे सर्वात सोपे उदाहरण आहे:
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
"How charged with punishments the scroll,\n" +
"I am the master of my fate,\n" +
"I am the captain of my soul");
String s = scanner.nextLine();
System.out.println(s);
}
}
आम्ही एक स्कॅनर ऑब्जेक्ट तयार केला आहे आणि त्याचा डेटा स्रोत (मजकूराची स्ट्रिंग) निर्दिष्ट केला आहे. NextLine () पद्धत डेटा स्त्रोतामध्ये प्रवेश करते (क्वाट्रेनसह आमचा मजकूर), पुढील न वाचलेली ओळ (जी या प्रकरणात पहिली ओळ आहे) शोधते आणि ती परत करते. मग आम्ही ते कन्सोलवर प्रदर्शित करतो: कन्सोल आउटपुट:
It matters not how strait the gate,
आपण नेक्स्टलाइन() पद्धत अनेक वेळा वापरू शकतो आणि संपूर्ण कविता उतारा प्रदर्शित करू शकतो:
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
"How charged with punishments the scroll,\n" +
"I am the master of my fate,\n" +
"I am the captain of my soul");
String s = scanner.nextLine();
System.out.println(s);
s = scanner.nextLine();
System.out.println(s);
s = scanner.nextLine();
System.out.println(s);
s = scanner.nextLine();
System.out.println(s);
}
}
प्रत्येक वेळी, आमचा स्कॅनर एक पाऊल पुढे टाकतो आणि पुढील ओळ वाचतो. प्रोग्रामचे आउटपुट प्रदर्शित केले आहे:
It matters not how strait the gate,
How charged with punishments the scroll,
I am the master of my fate,
I am the captain of my soul
आम्ही आधीच म्हटल्याप्रमाणे, स्कॅनरचा डेटा स्रोत स्ट्रिंग असणे आवश्यक नाही. उदाहरणार्थ, ते कन्सोल असू शकते. तुमच्यासाठी काही रोमांचक बातम्या: पूर्वी, आम्ही फक्त तेथे डेटा प्रदर्शित केला होता, परंतु आता आम्ही कीबोर्डवरून डेटा वाचू! स्कॅनर वर्ग आणखी काय करतो ते पाहूया :
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a number:");
int number = sc.nextInt();
System.out.println("Thanks! You entered the number " + number);
}
}
NextInt () पद्धत एंटर केलेला नंबर वाचते आणि परत करते. आमच्या प्रोग्राममध्ये, आम्ही ते व्हेरिएबल नंबरला मूल्य नियुक्त करण्यासाठी वापरतो . हे आधीपासूनच वास्तविक स्कॅनरसारखे आहे! प्रोग्राम वापरकर्त्याला कोणताही नंबर प्रविष्ट करण्यास सांगतो. वापरकर्त्याने हे केल्यानंतर, प्रोग्राम वापरकर्त्याचे आभार मानतो, परिणाम प्रदर्शित करतो आणि पूर्ण करतो. पण तरीही आम्हाला एक गंभीर समस्या आहे. वापरकर्ता चूक करू शकतो आणि काहीतरी चुकीचे प्रविष्ट करू शकतो. येथे एक उदाहरण आहे जिथे आमचा वर्तमान प्रोग्राम कार्य करणे थांबवतो:
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a number:");
int number = sc.nextInt();
System.out.println("Thanks! You entered the number " + number);
}
}
चला संख्या ऐवजी "कोडजिम" स्ट्रिंग प्रविष्ट करण्याचा प्रयत्न करूया: कन्सोल आउटपुट:
Enter a number:
CodeGym
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at Main.main(Main.java:10) Process finished with exit code 1
अरेरे. आम्ही मोठ्या अडचणीत आहोत -_- अशा परिस्थिती टाळण्यासाठी, आम्हाला वापरकर्त्याने प्रविष्ट केलेला डेटा सत्यापित करण्याचा मार्ग शोधण्याची आवश्यकता आहे. उदाहरणार्थ, जर वापरकर्त्याने क्रमांकाव्यतिरिक्त काहीही प्रविष्ट केले तर, प्रविष्ट केलेली माहिती क्रमांक नाही अशी चेतावणी प्रदर्शित करणे चांगले होईल. आणि जर माहिती ठीक असेल तर आम्ही पुष्टी करू शकतो. परंतु यासाठी आपल्या प्रवाहात काय येत आहे हे पाहण्यासाठी आपल्याला "भविष्याकडे पहावे" लागेल. स्कॅनर हे करू शकतो का ? आणि कसे! आणि हे करण्यासाठी अनेक पद्धती आहेत: hasNextInt() — ही पद्धत तपासते की इनपुट डेटाचा पुढील भाग संख्या आहे की नाही (योग्य म्हणून खरे किंवा खोटे परत करते). hasNextLine() — ही पद्धत तपासते की इनपुटचा पुढील भाग स्ट्रिंग आहे की नाही. hasNextByte() ,hasNextShort() , hasNextLong() , hasNextFloat() , hasNextDouble() — या सर्व पद्धती उर्वरित डेटा प्रकारांसाठी समान तपासणी करतात. चला आमचा नंबर-रिडिंग प्रोग्राम बदलण्याचा प्रयत्न करूया:
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a number:");
if (sc.hasNextInt()) {
int number = sc.nextInt();
System.out.println("Thanks! You entered the number " + number);
} else {
System.out.println("Sorry, but this is clearly not a number. Restart the program and try again!");
}
}
}
आता आपला प्रोग्राम तपासतो की प्रविष्ट केलेला पुढील वर्ण संख्या आहे की नाही. आणि ते असेल तरच ते पुष्टीकरण प्रदर्शित करते. जर इनपुट चेक पास करत नसेल, तर प्रोग्राम त्याची नोंद घेतो आणि वापरकर्त्याला पुन्हा प्रयत्न करण्यास सांगतो. मूलभूतपणे, तुम्ही स्कॅनर ऑब्जेक्टशी संवाद साधू शकता आणि कोणता डेटा प्रकार तुमची वाट पाहत आहे हे आधीच शोधू शकता . संख्या, स्ट्रिंग किंवा आणखी काही? एक संख्या? आणि कोणत्या प्रकारचे? एक int , लहान , लांब ?" ही लवचिकता तुम्हाला प्रोग्राम लॉजिक तयार करण्याची संधी देते जे वापरकर्त्याच्या वर्तनावर अवलंबून असते. आम्ही आणखी एक महत्त्वाची पद्धत लक्षात घेतली पाहिजे: useDelimiter() . तुम्ही या पद्धतीला स्ट्रिंग पास करा. स्ट्रिंगमध्ये तुम्हाला विभाजक किंवा परिसीमक म्हणून वापरायचे असलेले वर्ण. उदाहरणार्थ, समजा आम्हाला जपानी कवितेमध्ये अचानक रस निर्माण झाला आणि महान कवी मात्सुओ बाशो यांनी लिहिलेले काही हायकू वाचण्यासाठी आमचे स्कॅनर वापरण्याचे ठरवले. जरी तीन भिन्न श्लोक आम्हाला एक अस्ताव्यस्त स्ट्रिंग म्हणून दिले गेले असले तरी, आम्ही त्यांना सहजपणे विभाजित करू शकतो आणि त्यांना सुंदरपणे प्रस्तुत करू शकतो:
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner("On a withered branch'" +
"A crow has alighted.'" +
"Nightfall in autumn." +
"''***''" +
"Such a moon above,'" +
"Like a tree cut at the root:'" +
"he fresh cut is white." +
"''***''" +
"How the river floods!'" +
"A heron wanders on short legs,'" +
"Knee-deep in the water.");
scan.useDelimiter("'");
while (scan.hasNext()) {
System.out.println(scan.next());
}
scan.close();
}
}
आम्ही आमचे परिसीमक म्हणून "\ n /*/*/*" (नवीन रेषा वर्ण आणि तीन तारांकित) वापरतो. परिणामी, पुस्तकांप्रमाणेच आमच्याकडे सुंदर कन्सोल आउटपुट आहे:
On a withered branch
A crow has alighted.
Nightfall in autumn.
***
Such a moon above,
Like a tree cut at the root:
The fresh cut is white.
***
How the river floods!
A heron wanders on short legs,
Knee-deep in the water.
या उदाहरणात आणखी एक पद्धत आहे जी आपण पूर्णपणे दर्शविली पाहिजे: close() . I/O प्रवाहांसह कार्य करणार्या कोणत्याही वस्तूप्रमाणे, स्कॅनर पूर्ण झाल्यावर ते बंद केले पाहिजे जेणेकरून ते संगणकाच्या संसाधनांचा वापर करणे थांबवेल. क्लोज() पद्धत कधीही विसरू नका !
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a number:");
int number = sc.nextInt();
System.out.println("Thanks! You entered the number " + number);
sc.close(); // Now we've done everything right!
}
}
बस एवढेच! तुम्ही बघू शकता, ते किती उपयुक्त आहे, स्कॅनर क्लास वापरायला अगदी सोपा आहे! :) तुम्ही जे शिकलात ते बळकट करण्यासाठी, आम्ही तुम्हाला आमच्या Java कोर्समधून व्हिडिओ धडा पाहण्याची शिफारस करतो
अधिक वाचन: |
---|
GO TO FULL VERSION