Электронные часы. Как из консоли вивеси правильный формат h:mm:ss ? (Java)
Дано количество секунд int seconds, которое вводится с консоли. Это число представляет собой текущее суточное время как количество прошедших с полнуочи секунд. Затем программа должна напечатать вывод экрана электронных часов для этого времени. Надо вывести в консоль текущее время в формате h:mm:ss (possible values: [0:00:00; 23:59:59]).
Входное значение задается через System.in. Выходное значение должно быть напечатано в System.out
Усложненный вариант: попробуйте решить задачу без использования if и циклов.
У меня не проходит только один тест (возможно из-за формата времени):
При вводе числа 86229
Expected :23:57:09 Actual :0:57:09
Остальные тесты:
- Arguments.of(60, "0:01:00"),
- Arguments.of(3599, "0:59:59"),
- Arguments.of(86229, "23:57:09"), // вот етот не проходит
- Arguments.of(86400, "0:00:00"),
- Arguments.of(89999, "0:59:59"),
- Arguments.of(86460, "0:01:00")
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Input seconds: ");
int s = scanner.nextInt();
int sec = s % 60;
int min = (s / 60) % 60;
int hours = (s / 60) / 3600;
String strSec = (sec < 10) ? "0" + Integer.toString(sec) : Integer.toString(sec);
String strMin = (min < 10) ? "0" + Integer.toString(min) : Integer.toString(min);
String strHours = (hours < 10) ? "" + Integer.toString(hours) : Integer.toString(hours);
System.out.println(strHours + ":" + strMin + ":" + strSec);
}
Ответы (3 шт):
Сделал отдельной функцией и использовал форматирование строк через String.format, чтобы вывести данные
Пример:
public static String secondsToStr(int seconds) {
int hh = seconds / 3600 % 24;
int mm = seconds % 3600 / 60;
int ss = seconds % 3600 % 60;
return String.format("%d:%02d:%02d", hh, mm, ss);
}
public static void main(String[] args) throws Exception {
for (Integer seconds : Arrays.asList(60, 3599, 86229, 86400, 89999, 86460)) {
System.out.println(seconds + ": " + secondsToStr(seconds));
}
}
Результат:
60: 0:01:00
3599: 0:59:59
86229: 23:57:09
86400: 0:00:00
89999: 0:59:59
86460: 0:01:00
Scanner scanner = new Scanner(System.in);
int seconds = scanner.nextInt();
int sec = seconds % 60;
int min = seconds / 60;
int hour = seconds / 3600;
int dif = (seconds - (hour * 3600)) / 60;
String strSec = ((sec < 10) ? "0" + sec : Integer.toString(sec));
String strMin = ((min < 10) ? "0" + min : (dif == 0 || dif == 1) ? "0" + Integer.toString(dif) : Integer.toString(dif));
String strHour = ((hour < 10) ? "" + hour : (hour == 24) ? "0" : Integer.toString(hour));
System.out.println(strHour + ":" + strMin + ":" + strSec);
Тоже решаю такую задачу. Работает вроде.
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int seconds = scanner.nextInt();
int hours = seconds / 3600;
int minutes = (seconds % 3600) /60;
int seconds1 = seconds % 60;
String hours1 = (hours < 24)? "" + hours: (hours==24)? "0" :Integer.toString(hours) ;
System.out.printf ( hours1 + ":" + "%02d:%02d", minutes, seconds1);
}