2009-09-23 15 views
24

मैं निम्नलिखित कोड है:जावा स्कैनर वर्ग पढ़ने तार

How many names are you going to save:3 
Type a name: Type a name: John Doe 
Type a name: John Lennon 

सूचना कैसे यह पहला नाम प्रविष्टि को छोड़ दिया ??:

int nnames; 
String names[]; 

System.out.print("How many names are you going to save: "); 
Scanner in = new Scanner(System.in); 
nnames = in.nextInt(); 
names = new String[nnames]; 

for (int i = 0; i < names.length; i++){ 
    System.out.print("Type a name: "); 
    names[i] = in.nextLine(); 
} 

और उस कोड के लिए उत्पादन पीछा कर रहा है यह इसे छोड़ दिया और सीधे दूसरे नाम प्रविष्टि के लिए चला गया। मैंने यह देखने की कोशिश की है कि इसका क्या कारण है लेकिन मुझे लगता है कि मैं इसे पकड़ने में सक्षम नहीं हूं। मुझे आशा है कि किसी के द्वारा मेरी सहायता की जा सकती है। धन्यवाद

+2

सटीक (वास्तव में, सटीक) के मैच http://stackoverflow.com/questions/1466008/ जावा-स्कैनर-वर्ग-पढ़ने-तार / – CPerkins

उत्तर

26

त्रुटि का कारण यह है कि अगला INT केवल पूर्णांक खींचता है, न कि नई लाइन। यदि आप अपने लूप से पहले in.nextLine() जोड़ते हैं, तो यह खाली नई लाइन खाएगा और आपको 3 नाम दर्ज करने की अनुमति देगा।

int nnames; 
String names[]; 

System.out.print("How many names are you going to save: "); 
Scanner in = new Scanner(System.in); 
nnames = in.nextInt(); 

names = new String[nnames]; 
in.nextLine(); 
for (int i = 0; i < names.length; i++){ 
     System.out.print("Type a name: "); 
     names[i] = in.nextLine(); 
} 

या बस लाइन पढ़ें और मूल्य को एक पूर्णांक के रूप में पार्स करें।

int nnames; 
String names[]; 

System.out.print("How many names are you going to save: "); 
Scanner in = new Scanner(System.in); 
nnames = Integer.parseInt(in.nextLine().trim()); 

names = new String[nnames]; 
for (int i = 0; i < names.length; i++){ 
     System.out.print("Type a name: "); 
     names[i] = in.nextLine(); 
} 
2

ऐसा इसलिए है क्योंकि in.nextInt() लाइन नहीं बदलता है। तो आप अपने लूप में अपने in.nextLine() द्वारा endOfLine को पढ़ने के कारण पहले "एंटर" (3 दबाए जाने के बाद) का कारण बनते हैं।

यहाँ एक छोटा सा परिवर्तन है कि आप कर सकते हैं:

int nnames; 
    String names[]; 

    System.out.print("How many names are you going to save: "); 
    Scanner in = new Scanner(System.in); 
    nnames = Integer.parseInt(in.nextLine()); 
    names = new String[nnames]; 

    for (int i = 0; i < names.length; i++){ 
      System.out.print("Type a name: "); 
      names[i] = in.nextLine(); 
    } 
2

इसका कारण यह है in.nextInt() को केवल पूर्णांक संख्या प्राप्त करते हैं, एक नई लाइन प्राप्त नहीं होता है। तो आप इनपुट 3 और "एंटर" दबाएं, लाइन का अंत innenelineline() द्वारा पढ़ा जाता है।

int nnames; 
String names[]; 

System.out.print("How many names are you going to save: "); 
Scanner in = new Scanner(System.in); 
nnames = in.nextInt(); 
in.nextLine(); 
names = new String[nnames]; 

for (int i = 0; i < names.length; i++){ 
     System.out.print("Type a name: "); 
     names[i] = in.nextLine(); 
} 
0

आप हो सकता था बस names[i] = in.next();

के साथ बदल दिया

names[i] = in.nextLine(); अगले का उपयोग करना() केवल वापस आ जाएगी क्या एक अंतरिक्ष से पहले आता है:

यहाँ मेरी कोड है। अगली पंक्ति() वर्तमान लाइन को लौटने के बाद स्वचालित रूप से स्कैनर को नीचे ले जाती है।

3

sc.nextLine() का उपयोग करें; ताकि हम स्ट्रिंग की अंतिम पंक्ति पढ़ सकते हैं दो समय

sc.nextLine() sc.nextLine()

संबंधित मुद्दे