Follow Us
माध्यम चुनें / Select Medium:
Eng (English) Hindi (हिन्दी)
ICSE • कक्षा 9 • Information Technology • अध्याय 5
अनुमानित समय: 45 Mins
प्रगति: अध्ययनरत

जावा में इनपुट (Input in Java)

आईसीएसई कक्षा 9 कंप्यूटर अनुप्रयोगों में, "जावा में इनपुट" मानव उपयोगकर्ताओं और निष्पादित कार्यक्रमों के बीच रनटाइम इंटरैक्शन यांत्रिकी की जांच करता है। यह व्यापक अध्याय हार्डकोडेड कंपाइल-टाइम इनिशियलाइज़ेशन और डायनेमिक रन-टाइम इनपुट स्ट्रीम के बीच मूलभूत प्रतिमान अंतर की पड़ताल करता है। छात्र `java.util` पैकेज से आधुनिक `Scanner` कक्षा में महारत हासिल करते हैं, इसके टोकन-आधारित पार्सिंग आर्किटेक्चर, कंस्ट्रक्टर सिंटैक्स (`new Scanner(System.in)`), और विशेष इनपुट विधियों को खोलते हैं: `nextInt()`, `nextLong()`, `nextFloat()`, `nextDouble()`, `nextBoolean()`, `next()`, `nextLine()`, और `next().charAt(0)` के माध्यम से चरित्र इनपुट। हम क्लासिक "अनकंज्यूम्ड न्यूलाइन ट्रैप" को व्यवस्थित रूप से विच्छेदित करते हैं जहां `nextLine()` संख्यात्मक इनपुट के बाद निष्पादन को छोड़ देता है, असफल-सुरक्षित बफर क्लीयरेंस प्रोटोकॉल प्रदान करता है। इसके अलावा, गाइड `java.io` पैकेज से विरासत स्ट्रीम-आधारित `BufferedReader` और `InputStreamReader` पाइपलाइन के साथ `Scanner` की तुलना करता है (`Integer.parseInt()` और `IOException` हैंडलिंग के माध्यम से रैपर क्लास पार्सिंग की खोज)। अंत में, गाइड प्रोग्रामिंग त्रुटियों को सिंटैक्स, लॉजिकल और रन-टाइम एक्सेप्शन (`InputMismatchException`, `NumberFormatException`) में वर्गीकृत करता है, जो टर्मिनल एस्केप फ़ॉर्मेटिंग और सीआईएससीई परीक्षा टेम्पलेट्स के साथ पूरक है।

जब आप एक उम्र के तुरंत बाद एक नाम दर्ज करते हैं तो जावा इनपुट की पूरी लाइन को क्यों छोड़ देता है?

जावा में हर नौसिखिया को इस चौंकाने वाली, परेशान करने वाली गड़बड़ी का सामना करना पड़ता है: आप एक प्रोग्राम लिखते हैं जो `scanner.nextInt()` का उपयोग करके एक छात्र की उम्र पूछता है, उसके तुरंत बाद `scanner.nextLine()` का उपयोग करके छात्र का पूरा नाम पूछता है। आप प्रोग्राम चलाते हैं, `15` टाइप करते हैं, ENTER कुंजी दबाते हैं, और आपके अत्यधिक आश्चर्य के लिए, प्रोग्राम पूरी तरह से नाम इनपुट को छोड़ देता है, एक खाली लाइन प्रिंट करता है, और समाप्त हो जाता है! क्या कंप्यूटर क्रैश हो गया? क्या जावा ने अपना दिमाग खो दिया है? कोई भी नहीं! जो हुआ वह कीबोर्ड बफर यांत्रिकी का एक आकर्षक विचित्रता है: जब आपने `15` टाइप किया और ENTER दबाया, तो आपने वास्तव में सिस्टम स्ट्रीम में दो अलग-अलग वर्ण भेजे: अंक `15` और अदृश्य न्यूलाइन वर्ण `\n`। `nextInt()` विधि ने केवल अंक `15` का उपभोग किया, जिससे अनाथ `\n` बफ़र में चुपचाप तैरता रहा! जब `nextLine()` को बुलाया गया, तो उसने तुरंत उस बचे हुए `\n` को निगल लिया, यह मानते हुए कि आपने एक खाली पंक्ति में प्रवेश किया है! हम जावा में इनपुट स्ट्रीम और मास्टर डायनामिक डेटा कैप्चर को कैसे नियंत्रित करते हैं? आइए हम जावा में इनपुट को रहस्य से मुक्त करें।

यह अध्याय क्यों महत्वपूर्ण है

इनपुट हैंडलिंग वह पुल है जो स्थिर स्क्रिप्ट गणनाओं को इंटरैक्टिव, गतिशील सॉफ़्टवेयर में बदल देता है। आईसीएसई परीक्षा के अनुभाग बी में प्रत्येक व्यावहारिक कार्यक्रम के लिए स्कैनर या पैरामीटर पासिंग के माध्यम से उपयोगकर्ता से कीबोर्ड इनपुट स्वीकार करने की आवश्यकता होती है।

अध्ययन से पूर्व (आवश्यक ज्ञान)

  • आदिम डेटा प्रकारों का ज्ञान (int, डबल, चार, स्ट्रिंग)।
  • `new` ऑपरेटर का उपयोग करके ऑब्जेक्ट इंस्टेंटेशन के साथ बुनियादी परिचितता।
  • पैकेज पदानुक्रम और आयात की समझ कथन।

इस अध्याय के लक्ष्य

  • कंपाइल-टाइम इनिशियलाइज़ेशन और रन-टाइम इनपुट के बीच अंतर करें।
  • आदिम प्रकारों और स्ट्रिंग्स को पढ़ने के लिए `Scanner` वर्ग को आयात और इंस्टेंट करें।
  • कंसोल से एकल वर्ण को पढ़ने के लिए मानक मुहावरे `in.next().charAt(0)` को लागू करें।
  • "अनकंज्यूम्ड" का निदान और समाधान करें न्यूलाइन" `Scanner` अनुप्रयोगों में बफर गड़बड़।
  • बफर क्षमता, पार्सिंग गति और अपवाद हैंडलिंग के संबंध में `BufferedReader` के साथ `Scanner` की तुलना करें।
  • सामान्य रनटाइम इनपुट अपवादों को पहचानें और रोकें: `InputMismatchException` और `NumberFormatException`.

अध्याय रूपरेखा एवं प्रगति

1 1। आरंभीकरण बनाम डायनामिक इनपुट: सं...
2 2. स्कैनर क्लास: एनाटॉमी और तरीके
3 3. अनकंज्यूम्ड न्यूलाइन ग्लिच और बफ...
4 4. स्कैनर बनाम बफ़र्डरीडर: वास्तुकल...
5 5. जावा में त्रुटियों के प्रकार: सि...
6 6. वास्तविक-विश्व प्रोग्रामिंग उदाह...
7 7. व्यापक वाणिज्यिक कार्यक्रम: बिजल...
8 8. स्वरूपित आउटपुट मैकेनिक्स: Syste...
9 9. मुख्य में कमांड-लाइन तर्क और पैर...
10 10. स्कैनर के साथ एक ही लाइन पर एका...
11 11. समापन धाराएँ और hasNext() रक्षा...
12 12. स्कैनर संसाधन प्रबंधन और समापन...
13 13. सामान्य स्कैनर विधि सारांश

सम्पूर्ण सैद्धांतिक एवं वैचारिक अध्ययन

1। आरंभीकरण बनाम डायनामिक इनपुट: संकलन-समय बनाम रन-टाइम

इनपुट बुनियादी बातें
ए. डेटा आपूर्ति के दो तरीके:
  • 1. संकलन-समय आरंभीकरण: मान सीधे स्रोत कोड के भीतर चर को निर्दिष्ट किए जाते हैं:
    इंट लंबाई = 10;
    पूर्णांक चौड़ाई = 5;
    पूर्णांक क्षेत्रफल = लंबाई * चौड़ाई;
    सीमा: कठोर और गैर-संवादात्मक. किसी भिन्न आयत के क्षेत्रफल की गणना करने के लिए, स्रोत कोड को संशोधित और पुन: संकलित किया जाना चाहिए!
  • 2. रन-टाइम इनपुट: प्रोग्राम चलने के दौरान अंतिम-उपयोगकर्ता द्वारा डेटा को गतिशील रूप से आपूर्ति की जाती है, या तो कीबोर्ड स्ट्रीम (Scanner, BufferedReader) या कमांड-लाइन तर्कों के माध्यम से।
    फायदा: अत्यधिक लचीला और इंटरैक्टिव। एक ही संकलित प्रोग्राम स्रोत कोड में बदलाव के बिना अनंत डेटा विविधताओं को संसाधित कर सकता है।

2. स्कैनर क्लास: एनाटॉमी और तरीके

स्कैनर आर्किटेक्चर
ए. सेटअप प्रोटोकॉल:

Scanner वर्ग java.util पैकेज में रहता है और इसे स्पष्ट रूप से आयात किया जाना चाहिए:

आयात java.util.स्कैनर; // चरण 1: पैकेज आयात करें

सार्वजनिक वर्ग इनपुटडेमो {
    सार्वजनिक स्थैतिक शून्य मुख्य(स्ट्रिंग[] तर्क) {
        स्कैनर इन = नया स्कैनर (System.in); // चरण 2: ऑब्जेक्ट को त्वरित करें
        // System.in मानक इनपुट स्ट्रीम (कीबोर्ड) का प्रतिनिधित्व करता है
    }
}
बी. संपूर्ण स्कैनर इनपुट पद्धति कैटलॉग:
विधि सिंटैक्सडेटा प्रकार पढ़ेंइनपुट विवरणउदाहरण उपयोग
in.nextInt()intअगले टोकन को 32-बिट हस्ताक्षरित पूर्णांक के रूप में स्कैन करता है।int आयु = in.nextInt();
in.nextLong()longअगले टोकन को 64-बिट पूर्णांक के रूप में स्कैन करता है।long पॉप = in.nextLong();
in.nextFloat()floatअगले टोकन को एकल-सटीक फ्लोट के रूप में स्कैन करता है।फ्लोट दर = in.nextFloat();
in.nextDouble()doubleअगले टोकन को डबल-प्रिसिजन दशमलव के रूप में स्कैन करता है।डबल वेतन = in.nextDouble();
in.nextBoolean()booleanएक बूलियन शाब्दिक स्कैन करता है (true या झूठा).बूलियन ध्वज = in.nextबूलियन();
in.next()Stringएक शब्द को स्कैन करता है (सीमांकक: स्पेस, टैब, न्यूलाइन).स्ट्रिंग fname = in.next();
in.nextLine()Stringरिक्त स्थान सहित पाठ की एक पूरी पंक्ति को स्कैन करता है ENTER.स्ट्रिंग पता = in.nextLine();
in.next().charAt(0)charएक शब्द पढ़ता है और उसका पहला अक्षर निकालता है।char लिंग = in.next().charAt(0);

3. अनकंज्यूम्ड न्यूलाइन ग्लिच और बफर फ्लश प्रोटोकॉल

परीक्षक चेतावनी
ए. क्लासिक बफ़र स्किप बग:
§5nextInt(), nextDouble(), और next() जैसी विधियां केवल लक्ष्य टोकन को स्कैन करती हैं, जिससे अनुगामी न्यूलाइन वर्ण (ENTER कुंजी द्वारा उत्पन्न \n) कीबोर्ड स्ट्रीम में बिना पढ़े रह जाता है।

System.out.print('रोल नंबर दर्ज करें:');
int रोल = in.nextInt(); // उपयोगकर्ता 105 टाइप करता है और ENTER दबाता है (
)

System.out.print('पूरा नाम दर्ज करें:');
स्ट्रिंग नाम = in.nextLine(); // कीड़ा! बचे हुए को तुरंत खा लेता हूं'
' और छोड़ देता है!
बी. असफल-सुरक्षित समाधान (बफर क्लियरिंग):

पूरी पंक्ति पढ़ने का प्रयास करने से पहले संख्यात्मक या एकल-शब्द इनपुट पढ़ने के तुरंत बाद हमेशा एक अतिरिक्त डमी in.nextLine(); डालें:

System.out.print('रोल नंबर दर्ज करें:');
int रोल = in.nextInt();

in.nextLine(); // बफर फ्लश! उपभोग करता है और अनाथ को त्याग देता है'
'

System.out.print('पूरा नाम दर्ज करें:');
स्ट्रिंग नाम = in.nextLine(); // त्रुटिहीन रूप से काम करता है! वास्तविक उपयोगकर्ता इनपुट के लिए रुकता है.

4. स्कैनर बनाम बफ़र्डरीडर: वास्तुकला तुलना

तकनीकी तुलना
ए. बफ़र्डरीडर पाइपलाइन:
आयात java.io.BufferedReader;
आयात java.io.InputStreamReader;
आयात java.io.IOException;

पब्लिक क्लास रीडरडेमो {
    सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) IOException फेंकता है {
        बफ़रेडरीडर br = नया बफ़रेडरीडर(नया इनपुटस्ट्रीमरीडर(System.in));
        System.out.print('आयु दर्ज करें:');
        int आयु = Integer.parseInt(br.readLine());
    }
}
फ़ीचरस्कैनर क्लासबफ़रेडरीडर क्लास
पैकेजjava.utiljava.io
बफ़र आकारछोटा बफ़र (1 KB डिफ़ॉल्ट).बड़ा बफ़र (8 KB डिफ़ॉल्ट); काफ़ी तेज़.
पार्सिंग क्षमताअंतर्निहित पार्सिंग (nextInt(), nextDouble()).केवल कच्ची स्ट्रिंग्स को पढ़ता है (रीडलाइन()); रैपर कक्षाओं की आवश्यकता है.
अपवाद हैंडलिंगअनिवार्य जांचे गए अपवादों की आवश्यकता नहीं है।अधिदेश आईओएक्सेप्शन फेंकता है या प्रयास-पकड़.
थ्रेड सुरक्षासिंक्रनाइज़ नहीं (थ्रेड-सुरक्षित नहीं).सिंक्रोनाइज़्ड (समवर्ती I/O के लिए थ्रेड-सुरक्षित).

5. जावा में त्रुटियों के प्रकार: सिंटेक्स, लॉजिकल और रन-टाइम

त्रुटि वर्गीकरण
सॉफ़्टवेयर दोषों की तीन श्रेणियाँ:
  1. सिंटैक्स त्रुटियां (संकलन-समय त्रुटियां): निष्पादन से पहले javac द्वारा जावा व्याकरणिक नियमों का उल्लंघन पाया गया। (उदाहरण के लिए, गायब अर्धविराम, बेमेल ब्रेसिज़, गलत वर्तनी वाले कीवर्ड)।
  2. तार्किक त्रुटियाँ (बग्स): प्रोग्राम संकलित होता है और क्रैश हुए बिना चलता है, लेकिन त्रुटिपूर्ण एल्गोरिथम डिज़ाइन के कारण गलत आउटपुट उत्पन्न करता है। (उदाहरण के लिए, लंबाई * चौड़ाई के बजाय क्षेत्रफल = लंबाई + चौड़ाई लिखना).
  3. रन-टाइम त्रुटियां (अपवाद): कोड वाक्यात्मक रूप से मान्य है, लेकिन एक अवैध ऑपरेशन के कारण निष्पादन के दौरान प्रोग्राम क्रैश हो जाता है। सामान्य इनपुट अपवाद:
    • InputMismatchException: जब nextInt() अंकों की अपेक्षा करता है तो उपयोगकर्ता अक्षर दर्ज करता है।
    • NumberFormatException: Integer.parseInt("abc") गैर-संख्यात्मक स्ट्रिंग्स को पार्स करने में विफल रहता है।
    • ArithmeticException: पूर्णांक को शून्य से विभाजित करने का प्रयास (10 / 0).

6. वास्तविक-विश्व प्रोग्रामिंग उदाहरण: इंटरएक्टिव डेटा सत्यापन

संपूर्ण कार्यक्रम उदाहरण
ए. इंटरैक्टिव छात्र रिपोर्ट कार्ड जेनरेटर:
आयात java.util.Scanner;

पब्लिक क्लास स्टूडेंटरिपोर्टकार्ड {
    सार्वजनिक स्थैतिक शून्य मुख्य(स्ट्रिंग[] तर्क) {
        स्कैनर इन = नया स्कैनर (System.in);

        System.out.print ("छात्र रोल नंबर दर्ज करें:");
        int रोलनो = in.nextInt();

        in.nextLine(); //बची हुई नई लाइन को साफ़ करने के लिए बफ़र फ्लश!

        System.out.print('छात्र का पूरा नाम दर्ज करें:');
        स्ट्रिंग का पूरा नाम = in.nextLine();

        System.out.print ("अंग्रेज़ी में अंक दर्ज करें (100 में से):");
        डबल अंग्रेजी = in.nextDouble();

        System.out.print ("गणित में अंक दर्ज करें (100 में से):");
        दोहरा गणित = in.nextDouble();

        System.out.print ("विज्ञान में अंक दर्ज करें (100 में से):");
        डबल साइंस = in.nextDouble();

        दोगुना कुल अंक = अंग्रेजी + गणित + विज्ञान;
        दोहरा प्रतिशत = (कुल अंक/300.0) * 100.0;

        चार ग्रेड;
        यदि (प्रतिशत >=90.0) ग्रेड = 'ए';
        अन्यथा यदि (प्रतिशत >=75.0) ग्रेड = 'बी';
        अन्यथा यदि (प्रतिशत >=60.0) ग्रेड = 'सी';
        अन्यथा यदि (प्रतिशत >=40.0) ग्रेड = 'डी';
        अन्य ग्रेड = 'एफ';

        System.out.println("
========== शैक्षणिक रिपोर्ट कार्ड ==========');
        System.out.println('रोल नंबर:' + रोलनंबर);
        System.out.println('छात्र का नाम:' + पूरा नाम);
        System.out.println ("कुल अंक:" + कुल अंक + "/ 300");
        System.out.printf('प्रतिशत : .2f%%
", प्रतिशत);
        System.out.println ("अंतिम ग्रेड:" + ग्रेड);
        System.out.println('==========================================');
    }
}

7. व्यापक वाणिज्यिक कार्यक्रम: बिजली बिल कैलकुलेटर

वाणिज्यिक स्लैब कैलकुलेटर
स्लैब-आधारित वाणिज्यिक टैरिफ कैलकुलेटर:
आयात java.util.Scanner;

सार्वजनिक श्रेणी बिजली बिल {
    सार्वजनिक स्थैतिक शून्य मुख्य(स्ट्रिंग[] तर्क) {
        स्कैनर इन = नया स्कैनर (System.in);
        System.out.print ("उपभोक्ता नाम दर्ज करें:");
        स्ट्रिंग नाम = in.nextLine();
        System.out.print('उपभोग की गई इकाइयाँ दर्ज करें:');
        int इकाइयाँ = in.nextInt();

        दोहरा बिलराशि = 0.0;
        // स्लैब-वार गणना:
        // पहली 100 इकाइयाँ: मुफ़्त (₹0)
        // अगली 100 इकाइयाँ (101-200): ₹2.50 प्रति यूनिट
        // अगली 200 इकाइयां (201-400): ₹4.00 प्रति यूनिट
        // 400 यूनिट से ऊपर: ₹6.00 प्रति यूनिट
        यदि (इकाइयाँ <= 100) {
            बिल राशि = 0.0;
        } अन्यथा यदि (इकाइयाँ <= 200) {
            बिलराशि = (इकाइयाँ - 100) * 2.50;
        } अन्यथा यदि (इकाइयाँ <= 400) {
            बिलराशि = (100 * 2.50) + (इकाइयाँ - 200) * 4.00;
        }अन्यथा{
            बिलराशि = (100 * 2.50) + (200 * 4.00) + (यूनिट - 400) * 6.00;
        }

        डबल मीटर किराया = 150.0;
        दोगुना कुल बिल = बिल राशि + मीटर किराया;

        System.out.println("
========== बिजली चालान ========== ");
        System.out.println('उपभोक्ता नाम:' + नाम);
        System.out.println ("उपभोग की गई इकाइयाँ:" + इकाइयाँ + " kWh");
        System.out.println('ऊर्जा शुल्क: ₹' + बिल राशि);
        System.out.println('मीटर किराया: ₹' + मीटररेंट);
        System.out.println('कुल देय : ₹' + totalBill);
        System.out.println('=========================================');
    }
}

8. स्वरूपित आउटपुट मैकेनिक्स: System.out.printf() और निर्दिष्टकर्ता

स्वरूपित मुद्रण
ए. प्रिंटफ() विधि और प्रारूप विनिर्देशक:

System.out.printf("फ़ॉर्मेट स्ट्रिंग", तर्क) C:

से उधार ली गई सटीक स्वरूपण की अनुमति देता है
  • %d: दशमलव पूर्णांकों को प्रारूपित करता है (बाइट, लघु, पूर्णांक, लंबा)।
  • %f: फ़्लोटिंग-पॉइंट संख्याओं को प्रारूपित करता है। 2 दशमलव स्थानों तक पूर्णांकित करने के लिए %.2f का उपयोग करें।
  • %c: एकल वर्ण को प्रारूपित करता है।
  • %s: वर्णों की एक स्ट्रिंग को प्रारूपित करता है।
  • %n: प्लेटफ़ॉर्म-स्वतंत्र न्यूलाइन.
दोगुनी कीमत = 129.4567;
System.out.printf("आइटम: %s | मूल्य: ₹%%%n", "वैज्ञानिक कैलकुलेटर", मूल्य);
// आउटपुट: आइटम: वैज्ञानिक कैलकुलेटर | कीमत: ₹129.46

9. मुख्य में कमांड-लाइन तर्क और पैरामीटरयुक्त इनपुट()

कमांड-लाइन तर्क
ए. स्ट्रिंग[] मुख्य में ऐरे को तर्क देती है():

जावा किसी एप्लिकेशन को लॉन्च करते समय टर्मिनल ऑपरेटिंग सिस्टम कमांड लाइन से सीधे इनपुट मानों की आपूर्ति की अनुमति देता है:

पब्लिक क्लास CommandLineDemo {
    सार्वजनिक स्थैतिक शून्य मुख्य(स्ट्रिंग[] तर्क) {
        // 'जावा कमांडलाइनडेमो' के बाद टाइप किए गए मान आर्ग्स में संग्रहीत हैं[]
        यदि (args.length >= 2) {
            स्ट्रिंग नाम = args[0];
            पूर्णांक आयु = पूर्णांक.parseInt(args[1]);
            System.out.println("हैलो " + नाम + ", 5 साल में आप " + (उम्र + 5)) हो जायेंगे;
        }
    }
}

टर्मिनल से निष्पादन: जावा कमांडलाइनडेमो आरव 15 → args[0] = "आरव" और args[1] = "15".

10. स्कैनर के साथ एक ही लाइन पर एकाधिक डेटा आइटम पढ़ना

टोकन डिलीमीटर
ए. स्पेस-डीलिमिटेड मल्टी-टोकन इनपुट:

डिफ़ॉल्ट रूप से, जावा का Scanner वर्ग टोकन सीमांकक के रूप में व्हाइटस्पेस (रिक्त स्थान, टैब और न्यूलाइन) का उपयोग करता है। यह उपयोगकर्ताओं को रिक्त स्थान द्वारा अलग की गई एक पंक्ति पर एकाधिक डेटा मान दर्ज करने में सक्षम बनाता है:

System.out.print('रिक्त स्थान से अलग किए गए तीन पूर्णांक दर्ज करें:');
int a = in.nextInt();
int b = in.nextInt();
int c = in.nextInt();
पूर्णांक योग = ए + बी + सी;
System.out.println("तीन संख्याओं का योग = " + योग);

यदि उपयोगकर्ता प्रवेश करता है: 10 20 30 उसके बाद ENTER, a 10 प्राप्त करता है, b 20 प्राप्त करता है, और c 30 प्राप्त करता है। स्कैनर अलग इनपुट की आवश्यकता के बिना प्रत्येक पूर्णांक को क्रमिक रूप से पार्स करता है पंक्तियाँ.

11. समापन धाराएँ और hasNext() रक्षात्मक सत्यापन पैटर्न

स्ट्रीम प्रबंधन
ए. hasNext():
के माध्यम से इनपुट बेमेल को रोकना

डायनेमिक उपयोगकर्ता इनपुट स्वीकार करते समय InputMismatchException रनटाइम क्रैश को रोकने के लिए, रक्षात्मक प्रोग्रामर स्कैनर के निरीक्षण तरीकों का उपयोग करते हैं: in.hasNextInt() और in.hasNextDouble() पढ़ने से पहले:

System.out.print('एक पूर्णांक दर्ज करें:');
अगर (in.hasNextInt()) {
    int संख्या = in.nextInt();
    System.out.println ("आपने दर्ज किया:" + संख्या);
}अन्यथा{
    System.out.println('अमान्य इनपुट! पूर्णांक नहीं।');
}

12. स्कैनर संसाधन प्रबंधन और समापन प्रथाएँ

संसाधन प्रबंधन

उत्पादन सॉफ़्टवेयर में, सिस्टम इनपुट स्ट्रीम को सावधानी से प्रबंधित किया जाना चाहिए। in.close() को लागू करने से अंतर्निहित ऑपरेटिंग सिस्टम संसाधन जारी होते हैं। हालाँकि, System.in का उपयोग करते समय, स्कैनर को बंद करने से पूरे वर्चुअल मशीन सत्र के लिए मानक इनपुट स्ट्रीम भी बंद हो जाती है, इसलिए इसे केवल अंतिम समाप्ति पर ही बंद करें।

13. सामान्य स्कैनर विधि सारांश

त्वरित संदर्भ

अगला() और अगली पंक्ति() के बीच निर्णय लेने से पहले हमेशा सत्यापित करें कि उपयोगकर्ता इनपुट में एकल शब्द या पूर्ण वाक्य हैं या नहीं। कैरेक्टर इनपुट को Next().charAt(0) के साथ संभालना याद रखें, और सुनिश्चित करें कि संख्यात्मक इनपुट प्रकार घोषित वैरिएबल स्टोरेज क्षमता से मेल खाते हों।

सामान्य गलतियाँ एवं परीक्षक के जाल (Examiner Traps)

सामान्य भ्रम / गलत उत्तर

समानता तुलना (==) के साथ असाइनमेंट (=) को भ्रमित करना या अमान्य पहचानकर्ताओं का उपयोग करना।

सही वैज्ञानिक तथ्य

तुलना के लिए == का उपयोग करें और सत्यापित करें कि पहचानकर्ता मानक जावा नामकरण परंपराओं का पालन करते हैं।

सामान्य भ्रम / गलत उत्तर

स्विच-केस में ब्रेक को छोड़ना या स्कैनर में बिना खपत वाली न्यूलाइन बफर को छोड़ना।

सही वैज्ञानिक तथ्य

फॉल-थ्रू को रोकने के लिए हमेशा केस ब्लॉक में ब्रेक शामिल करें और नेक्स्टलाइन () से पहले बफर को फ्लश करें।

जावा इनपुट मैकेनिक्स: स्कैनर बनाम बफ़रेडरीडर और बफ़र गड़बड़

Java Input Mechanics: Scanner vs BufferedReader & Buffer Glitch SCANNER ARCHITECTURE (java.util) import java.util.Scanner; Scanner in = new Scanner(System.in); // System.in = Standard Keyboard Stream Scanner Parsing Methods: • in.nextInt() → 32-bit integer • in.nextDouble() → 64-bit decimal • in.next() → Single word (ignores spaces) • in.nextLine() → Full line until ENTER • in.next().charAt(0) → Single character THE UNCONSUMED NEWLINE BUFFER GLITCH Keyboard Buffer Stream: '1' '5' (ENTER) 1. in.nextInt() reads "15" → leaves ' ' in stream 2. in.nextLine() reads the orphan ' ' & skips input! THE FAIL-SAFE BUFFER FLUSH FIX: int age = in.nextInt(); in.nextLine(); // BUFFER FLUSH! String name = in.nextLine(); // WORKS! Always flush buffer when transitioning from numeric to nextLine(). ERROR CATEGORIES: Syntax (Compile-time) | Logical (Incorrect result) | Run-Time (Exception crashes)

अध्याय का सार संक्षेप एवं 10 मुख्य निष्कर्ष

मुख्य बिंदु 1
रनटाइम गतिशीलता: गतिशील इनपुट निश्चित हार्डकोडेड स्रोत कोड मानों से चर को अलग करता है, जिससे प्रोग्राम को विभिन्न डेटा के साथ निष्पादित करने की अनुमति मिलती है।
मुख्य बिंदु 2
स्कैनर पैकेज: स्कैनर वर्ग java.util में रहता है और उपयोग से पहले स्पष्ट रूप से आयात किया जाना चाहिए।
मुख्य बिंदु 3
कीबोर्ड स्ट्रीम: System.in मानक कीबोर्ड इनपुट का प्रतिनिधित्व करता है, जिसे स्कैनर कंस्ट्रक्टर (नया स्कैनर (System.in)) में पास किया जाता है।
मुख्य बिंदु 4
वर्ड बनाम लाइन: in.next() एक एकल स्थान-सीमांकित शब्द पढ़ता है, जबकि in.nextLine() ENTER कुंजी तक रिक्त स्थान सहित एक पूरी पंक्ति पढ़ता है।
मुख्य बिंदु 5
कैरेक्टर इनपुट मुहावरा: जावा में नेक्स्टचार() विधि का अभाव है; एकल वर्ण को पढ़ना in.next().charAt(0) के माध्यम से प्राप्त किया जाता है।
मुख्य बिंदु 6
बफ़र फ्लश ट्रैप: in.nextInt() या in.nextDouble() के तुरंत बाद in.nextLine() को कॉल करते समय, लंबी नई लाइन का उपभोग करने के लिए एक अतिरिक्त in.nextLine() निष्पादित किया जाना चाहिए।
मुख्य बिंदु 7
बफ़रेडरीडर क्लास: java.io में रहता है, इसमें 8 KB बफ़र (स्कैनर से तेज़) होता है, कच्चे स्ट्रिंग्स को पढ़ता है, और IOException को फेंकने की आवश्यकता होती है।
मुख्य बिंदु 8
रैपर पार्सिंग: बफ़रेडरीडर का उपयोग करते समय, स्ट्रिंग्स को Integer.parseInt() और Double.parseDouble() के माध्यम से संख्याओं में परिवर्तित किया जाता है।
मुख्य बिंदु 9
त्रुटि श्रेणियाँ: सिंटैक्स त्रुटियाँ javac द्वारा पकड़ी जाती हैं, तार्किक त्रुटियाँ गलत आउटपुट देती हैं, और रन-टाइम त्रुटियाँ चल रहे एप्लिकेशन को क्रैश कर देती हैं।
मुख्य बिंदु 10
इनपुट अपवाद: in.nextInt() को गैर-संख्यात्मक पाठ की आपूर्ति करने से एक फेंकता है प्रोग्राम निष्पादन के दौरान InputMismatchException।

स्व-मूल्यांकन अभ्यास (Check Your Understanding)

मूल वैचारिक स्पष्टता की जांच के लिए नैदानिक प्रश्न। पहले स्वयं हल करें, फिर उत्तर देखें।

1
आप जावा में स्कैनर क्लास का उपयोग करके कंसोल से एक अक्षर कैसे पढ़ते हैं?
उत्तर एवं व्याख्या देखें
उत्तर: चूंकि स्कैनर में नेक्स्टचार() विधि का अभाव है, एक एकल अक्षर को स्ट्रिंग टोकन को पढ़कर और इंडेक्स 0 पर उसका पहला अक्षर निकालकर पढ़ा जाता है: "char ch = in.next().charAt(0);"
ICSE कंप्यूटर एप्लीकेशन मार्किंग स्कीम
2
स्कैनर का उपयोग करते समय "अनकंज्यूम्ड न्यूलाइन" गड़बड़ी का कारण बताएं और इसे कैसे ठीक करें।
उत्तर एवं व्याख्या देखें
उत्तर: नेक्स्टइंट() जैसी विधियां केवल संख्यात्मक वर्णों को पढ़ती हैं, इनपुट बफर में ENTER कुंजी द्वारा उत्पन्न न्यूलाइन वर्ण (\n) को छोड़ देती हैं। अगली अगली लाइन() तुरंत इस बची हुई नई लाइन का उपभोग करती है और उपयोगकर्ता इनपुट की प्रतीक्षा किए बिना समाप्त हो जाती है। समाधान एक डमी "in.nextLine();" सम्मिलित करना है स्ट्रिंग को पढ़ने से पहले बफर को फ्लश करने के लिए।
ICSE कंप्यूटर एप्लीकेशन मार्किंग स्कीम
3
स्कैनर वर्ग का उपयोग करने के लिए कौन सा पैकेज आयात किया जाना चाहिए?
उत्तर एवं व्याख्या देखें
उत्तर: "java.util" पैकेज ("import java.util.Scanner;" या "import java.util.*;" के माध्यम से)।
ICSE कंप्यूटर एप्लीकेशन मार्किंग स्कीम
4
स्कैनर वर्ग के अगले() और नेक्स्टलाइन() तरीकों के बीच अंतर करें।
उत्तर एवं व्याख्या देखें
उत्तर: "next()" किसी भी रिक्त स्थान सीमांकक (स्पेस, टैब, या न्यूलाइन) पर रुककर, एक शब्द पढ़ता है। "नेक्स्टलाइन()" आंतरिक रिक्त स्थान सहित पाठ की पूरी पंक्ति को तब तक पढ़ता है जब तक उपयोगकर्ता ENTER कुंजी नहीं दबाता।
ICSE कंप्यूटर एप्लीकेशन मार्किंग स्कीम
5
स्कैनर और बफ़रेडरीडर के बीच तीन मुख्य अंतर क्या हैं?
उत्तर एवं व्याख्या देखें
उत्तर: 1। पैकेज: स्कैनर java.util में है; बफ़रेडरीडर java.io में है। 2. पार्सिंग: स्कैनर स्वचालित रूप से आदिम प्रकारों को पार्स करता है (नेक्स्टइंट); बफ़रेडरीडर केवल स्ट्रिंग्स (रीडलाइन) को पढ़ता है जिसके लिए रैपर विधियों (Integer.parseInt) की आवश्यकता होती है। 3. अपवाद: बफ़रेडरीडर को अनिवार्य रूप से "थ्रो IOException" की आवश्यकता होती है; स्कैनर नहीं करता है।
ICSE कंप्यूटर एप्लीकेशन मार्किंग स्कीम
6
यदि प्रोग्राम निष्पादित होने पर उपयोगकर्ता "टेन" टेक्स्ट में प्रवेश करता है तो कौन सा रनटाइम अपवाद होता है: "int n = in.nextInt();"?
उत्तर एवं व्याख्या देखें
उत्तर: InputMismatchException (java.util पैकेज से)।
ICSE कंप्यूटर एप्लीकेशन मार्किंग स्कीम
7
क्या क्या सिंटैक्स त्रुटि और तार्किक त्रुटि के बीच अंतर है?
उत्तर एवं व्याख्या देखें
उत्तर: एक सिंटैक्स त्रुटि जावा भाषा के व्याकरणिक नियमों का उल्लंघन करती है और संकलन-समय पर संकलक द्वारा पकड़ी जाती है (उदाहरण के लिए, अर्धविराम गायब)। एक लॉजिकल एरर संकलित होता है और क्रैश हुए बिना चलता है, लेकिन एक गलत एल्गोरिदम के कारण गलत आउटपुट उत्पन्न करता है (उदाहरण के लिए, क्षेत्र के बजाय परिधि की गणना करना)।
आईसीएसई कंप्यूटर एप्लीकेशन अंकन योजना
8
"System.in" कथन में क्या दर्शाता है: "स्कैनर एससी = नया स्कैनर (System.in);"?
उत्तर एवं व्याख्या देखें
उत्तर: "System.in" एक पूर्वनिर्धारित स्थिर इनपुटस्ट्रीम ऑब्जेक्ट है जो मानक कीबोर्ड इनपुट स्ट्रीम का प्रतिनिधित्व करता है।
आईसीएसई कंप्यूटर एप्लीकेशन अंकन योजना
अध्याय का अध्ययन पूर्ण हुआ?
अभ्यास के लिए तैयार?

ऑनलाइन CBT टेस्ट देकर तैयारी का मूल्यांकन करें

झारखण्ड बोर्ड परीक्षा पैटर्न पर आधारित बहुविकल्पीय प्रश्नों का ऑनलाइन टेस्ट दें। तुरंत परिणाम, समय विश्लेषण और प्रत्येक प्रश्न का विस्तृत हल प्राप्त करें।

AI अध्ययन मित्र

त्वरित शंका समाधान

जावा में इनपुट (Input in Java) में कोई संदेह या प्रश्न है? हमारे AI अध्ययन मित्र से तुरंत समझें।