Есть ли способ изменить формат пользовательского ввода (например: 900 -> 9:00)? - PullRequest
0 голосов
/ 05 октября 2019

В настоящее время я работаю со школьным классом, который позволяет читать ввод пользователя.

Вот мой текущий код, который спрашивает час, а затем минуты для бронирования автомобиля, потому что мне нужноукажите последний час в формате ЧЧЧММ:

 public class Facturation {
   public static void main (String [] args) {
      while (true) {

    System.out.println(MSG1);
     System.out.println (MSG_SOLLICITATION1);

   while (true ) { 
       HrDebut= Clavier.lireInt();
       if (HrDebut >= 9 && HrDebut <= 18 ) {
        break;
        } else {
        System.out.println (MSG_ERREUR);
        System.out.println (MSG_SOLLICITATION1);
         } }
   System.out.println (MSG_SOLLICITATION2);
   while (true) {
       MinDebut=Clavier.lireInt();
      if (MinDebut >= 00 && MinDebut <= 59 ){
    System.out.println("CONFIRMATION:" + "\n"
   + "Debut de la location:" + HrDebut + "h" + MinDebut 
     + "\n" + "\n" + MSG_RTR_MENU) ;
      Clavier.lireFinLigne();
    break;

Так что, если пользователь даст 9 + 34, конечный результат будет: 9h34.

Есть ли способ, чтобы только пользовательвведите 1 число от 900 до 1800 (с 9:00 до 18:00), а затем введите окончательный результат в формате ЧЧЧММ?

Например, пользовательский ввод 945 -> окончательный вывод - 9:45.

Спасибо.

Ответы [ 2 ]

1 голос
/ 05 октября 2019

java.time

В Java есть встроенный класс, представляющий время дня LocalTime, и средства для разбора строки в LocalTime и ее форматирования обратно в строку. Так что да, чтение времени как 934 или 1800 идет хорошо, и нет никакой причины для ручного форматирования, как вы делали в вопросе.

    DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("Hmm");
    DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("H'h'mm");
    LocalTime minTime = LocalTime.of(9, 0);
    LocalTime maxTime = LocalTime.of(18, 0);

    String userInput = "1800";
    LocalTime time = LocalTime.parse(userInput, inputFormatter);
    if (time.isBefore(minTime) || time.isAfter(maxTime)) {
        System.out.println("TODO put your error message here");
    } else {
        String output = time.format(outputFormatter);
        System.out.println("Debut de la location: " + output);
    }

Вывод из фрагмента кода примера:

Debut de la location: 18:00

Здесь может удивить одна деталь: строка шаблона входного формата Hmm обычно будет означать ввод трех цифр, одного цифры часа дня и двухзначной минутычасаОднако, когда Java видит, что есть четыре цифры, а не три, так как она знает, что час дня может иногда требовать двух цифр, она достаточно умна, чтобы понять, что 1800 - это двузначный час, 18 и двузначная минута, 00.

В шаблоне выходного формата, H'h'mm, одинарные кавычки вокруг h означают, что эта буква должна быть напечатана буквально, это не буква шаблона формата, такая как H и mm.

Если вы можете, я рекомендую вам прочитать ввод как String, а не int.

Если пользователь ввел время, которое не соответствуетс указанным, например, неправильным форматом или минутой часа, превышающей 59, LocalTime.parse выдаст DateTimeParseException, поэтому вы захотите перехватить это исключение, выдать сообщение об ошибке и попросить пользователя повторить попытку.

Ссылка: Обучающее руководство по Oracle: Дата и время , объясняющее, как использовать java.time.

1 голос
/ 05 октября 2019

1 - использовать класс сканера для ввода данных пользователем.

 Scanner scan= new Scanner(System.in);

2 - попросить пользователя ввести время в нужном формате, например 945 или 1230.

3 - затем использовать приведенную ниже логику методав вашем коде, чтобы получить часы и минуты.

public static void t() {
    int a = 1945;//suppose your time

    int minute = a%100; // your minute data
    System.out.println(minute);
    int hour = a/100;// your hour data
    System.out.println(hour);
}

В этом коде мы не позаботились о неправильном вводе. поэтому, если вы не уверены, что пользователь всегда будет предоставлять правильные данные, используйте логику для проверки исправления данных (например, число не может быть меньше 3 цифр или больше 4 цифр. диапазон времени составляет от 100 до 2400).

Если 1 час - пользователю нужно ввести 100.

...