Я просто получаю время в формате ЧЧ: ММ и проверяю, больше ли оно, чем 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);
Я рекомендую вам не использовать SimpleDateFormat
и Date
. Эти классы плохо спроектированы и давно устарели, а первые, как известно, доставляют много хлопот. Вместо этого просто используйте LocalTime
из java.time, современный API даты и времени Java.
Будет ли 12:15 считаться после 9:30? Я ввел 12:15
, и ваш фрагмент напечатал 0
. Это не столько ваша вина, сколько SimpleDateFormat
неподобающее поведение.
Используйте for loop
для повторения списка времени. Кроме того, вам не нужно значение n, вы можете получить его напрямую с помощью list.size()
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html
Предполагается, что значение n вводится пользователем. Требуется.
Также это больше похоже на комментарий, а не на ответ.
Не следует предлагать прямые решения. Это не то, как работает stackoverflow. Пожалуйста, прочтите рекомендации еще раз.
Это должно сделать это. Это базовая реализация, вы можете оптимизировать ее по своему усмотрению.
РЕДАКТИРОВАТЬ (с поясняющими комментариями):
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? Не могли бы вы объяснить это?
Try catch используется для принятия защитного программирования. Что делать, если строка, введенная пользователем, не может быть проанализирована в DateFormat? Кроме того, без try-catch это будет ошибка времени компиляции.
если мы используем sc.nextLine(), это показывает исключение. Почему мы не можем использовать это?
Петли — ваш друг