2013-05-27 6 views
6

यहां मेरा कोड है - उद्देश्य रोगियों की संख्या के लिए कुछ बुनियादी जानकारी (आयु, नाम, लिंग) दर्ज करना है।जावा - एक सरणी (लूप के लिए) में उपयोगकर्ता इनपुट पढ़ने पर एक पंक्ति छोड़ना

public static void main(String[] args) { 

    int numPatients = 2; 

    int[] age = new int[numPatients]; 
    String[] gender = new String[numPatients]; 
    String[] name = new String[numPatients]; 
    Scanner in = new Scanner(System.in); 

    /* 
    * Obtaining patients details: name, gender, age 
    * First create a Scanner input variable to read the data 
    */ 
    for (int i = 0; i < numPatients; i++) 
    { 
    System.out.println("Enter name of patient " + (i+1)); 
    name[i] = in.nextLine(); 

    System.out.println("Enter gender (male/female) of patient " + (i+1)); 
    gender[i] = in.nextLine(); 

    System.out.println("Enter age of patient " + (i+1)); 
    age[i] = in.nextInt(); 
    } 

जब पाश 2 चर को जाता है इस मुद्दे को मैं आ रही है, यानि कि मैं रोगी का नाम के लिए कोई मान दर्ज करने में सक्षम नहीं हूँ। ऐसा लगता है कि वहां इनपुट लेना छोड़ दिया जाता है और सीधे अगले इनपुट पर जाता है, जो लिंग है।

Enter name of patient 1 
Mark 
Enter gender (male/female) of patient 1 
Male 
Enter age of patient 1 
34 
Enter name of patient 2 //Skipped. Could not enter input here 
Enter gender (male/female) of patient 2 
Jenna 

कोई विचार क्यों ऐसा होता है? क्या इसके बजाय BufferedReader का उपयोग करना बेहतर है?

उत्तर

7

यदि आपको Scanner का उपयोग करना होगा, तो हमेशाnextLine() का उपयोग करें। समस्या यह है कि nextInt()केवल इनपुट का पूर्णांक भाग पढ़ता है और एंटर कीप्रेस को पढ़ने से पहले बंद हो जाता है। फिर nextLine() पर अगली कॉल बफर में एंटर कीप्रेस और आपके द्वारा खाली नाम दर्ज की गई चीज़ों को देखती है।

तो आप की तरह कुछ कर सकते हैं:

age[i] = Integer.parseInt(in.nextLine()); 

और अपवाद है कि एक नंबर के अलावा अन्य अगर उपयोगकर्ता प्रकार कुछ नहीं होगा संभालने के लिए तैयार रहना।

+0

वास्तव में दिलचस्प है और मैं इसे पकड़ा नहीं होता। मदद के लिए धन्यवाद, ग्रेग। यह अब काम करता है! – JPwire

0

यदि आपको आश्वासन दिया जाता है कि नाम एक शब्द (पुरुष या महिला के लिए कोई मुद्दा नहीं है) तो आप स्ट्रिंग प्राप्त करने के लिए स्कैनर इनपुट को संशोधित कर सकते हैं;

in.next(); 

यह ठीक काम करता है (केवल अगर नाम एक शब्द है)।

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