Сравнение времени в java

Я просто получаю время в формате ЧЧ: ММ и проверяю, больше ли оно, чем 9:30, тогда счет c увеличивается на 1. Я только что сделал это для времени ввода одного пользователя. Но мне нужно получить несколько раз от пользователя и сравнить. Если оно больше 9:30, увеличьте значения счетчика. Сначала получите значение n, а затем получите n времени от пользователя. Как я могу изменить свой код, чтобы получить n времени и сравнить его?

Scanner input = new Scanner(System.in);
 String time = input.nextLine();
 System.out.println();
 int c=0;
String time2 = "9:30";
 DateFormat sdf = new SimpleDateFormat("hh:mm");
 Date d1 = sdf.parse(time);
 Date d2 = sdf.parse(time2);
 if (d1.after(d2))
 {
     c++;
}
System.out.println(c);

Петли — ваш друг

Benjamin Urquhart 13.06.2019 18:20

Я рекомендую вам не использовать SimpleDateFormat и Date. Эти классы плохо спроектированы и давно устарели, а первые, как известно, доставляют много хлопот. Вместо этого просто используйте LocalTime из java.time, современный API даты и времени Java.

Ole V.V. 13.06.2019 18:41

Будет ли 12:15 считаться после 9:30? Я ввел 12:15, и ваш фрагмент напечатал 0. Это не столько ваша вина, сколько SimpleDateFormat неподобающее поведение.

Ole V.V. 13.06.2019 20:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
47
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Используйте for loop для повторения списка времени. Кроме того, вам не нужно значение n, вы можете получить его напрямую с помощью list.size()

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html

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

Harshal Parekh 13.06.2019 18:24

Также это больше похоже на комментарий, а не на ответ.

Harshal Parekh 13.06.2019 18:25

Не следует предлагать прямые решения. Это не то, как работает stackoverflow. Пожалуйста, прочтите рекомендации еще раз.

user1467300 13.06.2019 18:27
Ответ принят как подходящий

Это должно сделать это. Это базовая реализация, вы можете оптимизировать ее по своему усмотрению.

РЕДАКТИРОВАТЬ (с поясняющими комментариями):

Scanner sc = new Scanner(System.in);

// accept user input for N
System.out.println("Enter N");
int n = sc.nextInt();

String time;
int c = 0;

// store the DateFormat to compare the user inputs with
String time2 = "9:30";
DateFormat sdf = new SimpleDateFormat("hh:mm");
Date d2 = null;
try {
    d2 = sdf.parse(time2);
} catch (ParseException e) {
    e.printStackTrace();
}

// iterate for N times, asking for a user input N times.
for (int i = 0; i < n; i++) {
    // get user's input to parse and compare
    System.out.println("Enter Time");
    time = sc.next();
    Date d1 = null;
    try {
        d1 = sdf.parse(time);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    if (d1.after(d2))  {
        c++;
    }
}
System.out.println(c);

Я не сильно изменил ваш код, просто добавил цикл и сделал то же самое N раз. Цитируя комментарии выше, «петли — ваш друг».

Надеюсь это поможет. Удачи. Комментарий, если у вас есть дополнительные вопросы.

Это работает..... Но почему вы использовали try catch? Не могли бы вы объяснить это?

Harini 13.06.2019 18:35

Try catch используется для принятия защитного программирования. Что делать, если строка, введенная пользователем, не может быть проанализирована в DateFormat? Кроме того, без try-catch это будет ошибка времени компиляции.

Harshal Parekh 13.06.2019 18:37

если мы используем sc.nextLine(), это показывает исключение. Почему мы не можем использовать это?

Harini 13.06.2019 19:03
stackoverflow.com/questions/22458575/… это поможет.
Harshal Parekh 13.06.2019 19:07

Другие вопросы по теме