Java программа пропускает запрос на ввод пользователя - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь узнать у пользователя дату и время. В моей программе у меня есть методы, чтобы спросить пользователя об этих значениях и методы для проверки входных данных. Однако в моей программе пользователь никогда не может ввести значение даты, поскольку программа продолжает проходить после этой точки и принимает нулевое значение для даты. Почему это? В результате методы проверки вызывают ошибку:

java.lang.NullPointerException

«Основной»

    public void bookAppointment(BankClient bc) {
    String date = askForDate();
    String time = askForTime();
    sendAppointmentNotification(createAppointmentNotification(date,time));
}

Метод запроса даты

    private String askForDate() {
    GetInputFromUserInter input = new GetInputFromUser();
    while(true) {
        String date = input.getUserInput("Date For Appointment in the form of DD/MM/YYYY");
        date.trim();
        if (validateDate(date)) {
            return date;
        }
        else {
            System.out.println(date+" is Invalid Date format");
        }
    }
}

Метод проверки даты

    private static boolean validateDate(String date) {
    System.out.println("here");
    SimpleDateFormat sdfrmt = new SimpleDateFormat("DD/MM/YYYY");
    sdfrmt.setLenient(false);
    try{
            Date javaDate = sdfrmt.parse(date);
    }
        /* Date format is invalid */
    catch (ParseException e){
        return false;
    }
    /* Return true if date format is valid */
        return true;
}

Получить метод ввода

    static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
public String getUserInput(String label) {
    String value = null;
    System.out.println( "\nProvide " + label + ":" );
    System.out.println( ">" );

    while(value !=null) {

        try {
            value = input.readLine();
        }

        catch (IOException ex) { ex.printStackTrace(); }            
    }
    return value;
};

1 Ответ

0 голосов
/ 18 февраля 2020

Причина, по которой ваша программа пропускает пользовательский ввод, заключается в том, что вы инициализируете String value = null в своем методе getUserInput(), а затем фактически произносите while null != null, что является ложным, и, следовательно, ваше время l oop никогда не выполняется. Я бы изменил код следующим образом:

String value = "";
System.out.println( "\nProvide " + label + ":" );
System.out.println( ">" );

while(value.equals("")) {

    try {
        value = input.readLine();
    }

    catch (IOException ex) { ex.printStackTrace(); }            
}
return value;

Тогда, если пользователь просто вводит спам, ничего не печатая, он будет постоянно предлагать ему что-то ввести.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...