मैं चाहता हूं कि मेरा प्रोग्राम केवल स्ट्रिंग स्वीकार करे और उपयोगकर्ता इनपुट अमान्य होने पर एक संदेश का संकेत दे।

import java.util.Scanner;
public class Details{

    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        String lastname;
        String firstname;
        String middlename;

        System.out.print("Enter Number of passenger : ");
        int passenger = input.nextInt(); 

        for(int x = 0 ; x < passenger ; x++){
            do{
                System.out.print("\nEnter Lastname  :");
                lastname = input.nextLine().trim();

                if(lastname.equals("") || lastname.equals(" "))
                {                 
                    System.out.print("\nEnter Neccessary Details");               
                }
            } while(lastname.isEmpty());

            do{
                System.out.print("\nEnter Firstname : ");
                firstname = input.nextLine();

                if(firstname.equals("") || firstname.equals(" "))
                {
                    System.out.print("\nEnter Neccessary Details");    
                }
            } while(firstname.isEmpty());

            do{
                System.out.print("\nEnter Firstname : ");
                middlename = input.nextLine();

                if(middlename.equals("") || middlename.equals(" "))
                {
                    System.out.print("\nEnter Neccessary Details");    
                }
            }while(middlename.isEmpty());

        }//end of forloop

    }
}

मैं पहले से ही इस कोड को आजमाता हूं, सबसे पहले यह काम करता है लेकिन यह लंबे समय तक तार्किक त्रुटि दिखाता है। और मुझे कुछ इस तरह का आउटपुट दें।

    sample output
    Enter Firstname  : // the problem is, it seems has already have an input
    Enter Neccessary Details
    Enter Firstname  :

तो मैं इसे कैसे ठीक कर सकता हूं? स्ट्रिंग इनपुट को प्रमाणित करने का कोई वैकल्पिक तरीका है? कृपया इसे सरल रखें मैं सिर्फ एक नौसिखिया हूँ धन्यवाद

0
Smile Kenny 8 फरवरी 2020, 16:05
1
क्या आप पूरी जावा कक्षा दिखा सकते हैं?
 – 
user10871691
8 फरवरी 2020, 16:14
इसके बारे में खेद है, मैंने इसे संपादित किया
 – 
Smile Kenny
8 फरवरी 2020, 16:28
1
क्या आप कृपया इस बारे में अधिक विशिष्ट हो सकते हैं कि विशेष रूप से आपको त्रुटियाँ कहाँ मिलती हैं? इनपुट क्या है और आपको वास्तव में क्या त्रुटि मिलती है?
 – 
HimBromBeere
8 फरवरी 2020, 16:37
1
ऐसा लगता है कि आप केवल एक ही नहीं, अनेक यात्री बनाना चाहते हैं। तो आपको निश्चित रूप से एकाधिक lastName और firstName की आवश्यकता है। तो एक क्लास Passenger बनाएं जिसमें एक फर्स्ट- और एक लास्टनाम हो। फिर एक List<Passenger> का उपयोग करें और बाहरी लूप के प्रत्येक पुनरावृत्ति पर एक नया Passenger बनाएं।
 – 
HimBromBeere
8 फरवरी 2020, 16:43

4 जवाब

क्योंकि Scanner.nextInt विधि आपके इनपुट में न्यूलाइन कैरेक्टर को नहीं पढ़ती है, आपको nextInt के बाद लाइन का उपभोग करने की आवश्यकता है:

int passenger = input.nextInt();
input.nextLine();

इससे ऐसा लगता है कि इसमें पहले से ही एक इनपुट है समस्या हल हो जाएगी।

विवरण के लिए यह देखें।

0
user10871691user10871691 8 फरवरी 2020, 16:43

आप शुरुआत में और स्ट्रिंग के अंत में सभी रिक्त स्थान को हटाने के लिए trim() विधि का उपयोग कर सकते हैं और फिर जांच सकते हैं कि यह खाली है या नहीं:

firstname = input.nextLine().trim();

संपादित करें: यह कोड आपकी आवश्यकता के अनुसार काम करता प्रतीत होता है:

import java.util.Scanner;

public class Details {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String lastname;
        String firstname;
        String middlename;

        System.out.println("Enter Number of passenger : ");
        int passenger = input.nextInt();
        input.nextLine();

        for (int x = 0; x < passenger; x++) {
            do {
                System.out.println("Enter Lastname  :");
                lastname = input.nextLine().trim();
                if (lastname.isEmpty()) {
                    System.out.println("\nEnter Neccessary Details");
                }
            } while (lastname.isEmpty());

            do {
                System.out.println("Enter Firstname : ");
                firstname = input.nextLine().trim();
                if (firstname.isEmpty()) {
                    System.out.println("\nEnter Neccessary Details");
                }
            } while (firstname.isEmpty());

            do {
                System.out.println("Enter Middlename : ");
                middlename = input.nextLine().trim();
                if (middlename.isEmpty()) {
                    System.out.println("Enter Neccessary Details");
                }
            } while (middlename.isEmpty());
        }
    }
}

यहाँ मुख्य परिवर्तन यह है कि मैंने System.out.print को System.out.println से बदल दिया है। System.out.print किसी भी तरह से केवल input.nextLine() पढ़ने के बाद ही प्रिंट होता है (System.out.flush प्रिंटिंग के ठीक बाद काम नहीं करता), तो ऐसा लगता है कि आप अपने इनपुट की शुरुआत में एंटर बटन दबाते हैं, और वह खाली है लाइन Scanner द्वारा पढ़ी जाती है। साथ ही मैंने passenger गिनती पढ़ने के ठीक बाद input.nextLine() लाइन जोड़ी, इसलिए Scanner उस नंबर को पढ़ने के बाद अगली पंक्ति में चला जाता है।

0
ardenit 8 फरवरी 2020, 16:44

ऐसा लगता है कि स्कैनर को एक ही एक से अधिक बार उपयोग करने के कारण समस्याएँ आ रही हैं। यहाँ की तरह एक विधि में स्कैनर का उपयोग करने का प्रयास करें:

public String getInput () {

Scanner sc = new Scanner(System.in);
return sc.nextLine(); 
}

और फिर उपयोग करें

firstname = getInput();
0
niklascube 8 फरवरी 2020, 16:46

ऐसा लगता है कि आप एक से अधिक यात्री बनाना चाहते हैं, न कि केवल एक। तो आपको निश्चित रूप से एकाधिक lastName और firstName की आवश्यकता है। तो एक वर्ग Passenger बनाएं जिसमें पहला और अंतिम नाम हो। फिर एक List<Passenger> का उपयोग करें और बाहरी लूप के प्रत्येक पुनरावृत्ति पर एक नया Passenger बनाएं।

तो आपको यह करना चाहिए:

class Passenger {
    String lastname;
    String firstname;
    String middlename;
}

अब आपके main में आपको एक List<Passenger> की आवश्यकता है:

List<Passenger> passengers = new ArrayList<>();

अब मैं आपके तीन डू-लूप-लूप से एक विधि निकालने का सुझाव दूंगा, ताकि एक ही सत्यापन-विधि हो:

String getInput(String kind) {
    String result;
    do{
        System.out.print("\nEnter " + kind + " : ");
        result = input.nextLine().trim();
    } while(result.isEmpty());
}

अंत में इसे अपने लूप में main के भीतर डालें और एक नया Passenger बनाएं, जैसा कि ऊपर बताया गया है:

static void main(String[] args) {
    List<Passenger> passengers = new ArrayList<>();
    Scanner input = new Scanner(System.in);

    System.out.print("Enter Number of passenger : ");
    Integer numPassengers = input.nextInt(); 

    for(int x = 0; x < numPassengers; x++){
        String firstName = getInut("FirstName");
        String lastName = getInput("LastName");
        String MiddleName = getInput("MiddleName");
        passengers.add(new Passenger(firstName, lastName, middleName);
    }
}

बेशक आपको अपने Passenger-क्लास के लिए एक कंस्ट्रक्टर चाहिए जो तीन String-args स्वीकार करता हो। इसके अलावा आपको सार्वजनिक क्षेत्रों को कभी भी उजागर नहीं करना चाहिए जैसा मैंने ऊपर किया था, इसके बजाय एक सार्वजनिक गेट-विधि है। तो आपकी कक्षा इस तरह दिखनी चाहिए:

class Passenger {
    String firstName;
    String lastName;
    String middleName;

    public Passenger(String firstName, lastName, middleName) { // constructor
        this.firstName = firstName;
        this.lastName = lastName;
        this.middleName = middleName;
    }

    public String getFirstName { return this.firstName; }
    public String getLastName { return this.lastName; }
    public String getMiddleName { return this.middleName; }
}
0
HimBromBeere 8 फरवरी 2020, 16:59