2012-12-05 16 views
14

मैं जावा के लिए बहुत नया हूं लेकिन जावा: हाउ टू प्रोग्राम (9वीं संस्करण) पुस्तक के माध्यम से काम कर रहा हूं और एक उदाहरण पर पहुंचा हूं जहां मेरे जीवन के लिए मैं समस्या नहीं समझ सकता है।जावा के साथ NoSuchElementException .Util.Scanner

import java.util.Scanner; 
public class Addition { 
    public static void main(String[] args) { 
    // creates a scanner to obtain input from a command window 

    Scanner input = new Scanner(System.in); 

    int number1; // first number to add 
    int number2; // second number to add 
    int sum; // sum of 1 & 2 

    System.out.print("Enter First Integer: "); // prompt 
    number1 = input.nextInt(); // reads first number inputted by user 

    System.out.print("Enter Second Integer: "); // prompt 2 
    number2 = input.nextInt(); // reads second number from user 

    sum = number1 + number2; // addition takes place, then stores the total of the two numbers in sum 

    System.out.printf("Sum is %d\n", sum); // displays the sum on screen 
    } // end method main 
} // end class Addition 

मैं 'NoSuchElementException' त्रुटि हो रही है:

यहाँ पाठ्यपुस्तक में स्रोत कोड उदाहरण के एक (थोड़ा) संवर्धित संस्करण है

Exception in thread "main" java.util.NoSuchElementException 
at java.util.Scanner.throwFor(Scanner.java:838) 
at java.util.Scanner.next(Scanner.java:1461) 
at java.util.Scanner.nextInt(Scanner.java:2091) 
at java.util.Scanner.nextInt(Scanner.java:2050) 
at Addition.main(Addition.java:16) 
Enter First Integer: 

मैं समझता हूँ कि यह शायद है java.util से Scanner कक्षा के साथ असंगत स्रोत कोड में कुछ के कारण, लेकिन समस्या को कम करने के संदर्भ में मैं वास्तव में इससे आगे नहीं जा सकता।

+0

आप किस एसडीके का उपयोग कर रहे हैं? मैंने अभी आपके कोड को ग्रहण में चिपकाया है, और ऐसा लगता है कि यह ठीक काम करता है! – Curlystraw

+0

मै मैक ओएस एक्स पर टेक्स्टमैट के भीतर से प्रोग्राम चला रहा हूं, हालांकि जब मैं टर्मिनल से प्रोग्राम चलाता हूं, तो मुझे कोई त्रुटि नहीं मिलती है। तो मुझे लगता है कि यह स्रोत कोड – adaam

+1

@adaam के साथ कुछ भी करने के बजाए एक पर्यावरणीय मुद्दा है क्योंकि आपको यह त्रुटि मिल गई है क्योंकि टेक्स्टमैट टर्मिनल सिम्युलेटर इनपुट स्वीकार नहीं कर सकता (या ठीक से कॉन्फ़िगर नहीं किया गया), मुझे एक ही समस्या मिली शानदार पाठ 2. –

उत्तर

4

NoSuchElementExceptionगणना के nextElement विधि द्वारा फेंक दिया गया यह इंगित करने के लिए कि गणना में कोई और तत्व नहीं हैं।

http://docs.oracle.com/javase/7/docs/api/java/util/NoSuchElementException.html

कैसे इस बारे में:

if(input.hasNextInt()) 
    number1 = input.nextInt(); // if there is another number 
else 
    number1 = 0; // nothing added in the input 
+0

मुझे "परिवर्तनीय संख्या 1 प्रारंभ नहीं किया जा सकता है" और दूसरे चर के लिए समान है। – adaam

+0

इसका मतलब है कि आपने चर 'संख्या 1' को प्रारंभ नहीं किया है। 'int number1 = 0 आज़माएं; int संख्या 2 = 0; ' –

3

आपको वैरिएबल को मान निर्दिष्ट करने से पहले hasNextInt() का उपयोग करना चाहिए।

1

Integer#nextIntNoSuchElementException फेंकता है - अगर इनपुट

अगर वहाँ के साथ एक अगली पंक्ति है आपको जांचना चाहिए समाप्त हो रहा है Integer#hasNextLine

if(sc.hasNextLine()){ 
    number1=sc.nextInt(); 
} 
+0

बस एक sidenote, (मैं मैक ओएस एक्स का उपयोग करता हूं) मैं अपने स्रोत संपादक (टेक्स्टमैट- जो इस तरह की प्रक्रिया के लिए अनुमति देता है) के भीतर से इस स्रोत कोड को संकलित और चलाने की कोशिश कर रहा है। लेकिन मैं आपके सुझावों के बावजूद NoSuchElementException का अनुभव कर रहा हूं। जब मैं टर्मिनल के अंदर फ़ाइल को जावा और जावा करता हूं, तो ऊपर दिया गया उदाहरण पूरी तरह से चलता है - यह क्यों है? – adaam

3

NoSuchElementExceptionif no more tokens are available फेंक दिया जाएगा। यह if there's any integer available की जांच किए बिना nextInt() पर आक्रमण करके होता है। इसे होने से रोकने के लिए, आप यह देखने के लिए hasNextInt() का उपयोग कर सकते हैं कि कोई भी टोकन उपलब्ध है या नहीं।