Электронные часы. Как из консоли вивеси правильный формат 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 шт):

Автор решения: gil9red

Сделал отдельной функцией и использовал форматирование строк через 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
→ Ссылка
Автор решения: user490399

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);
→ Ссылка
Автор решения: Zupelmantuz

Тоже решаю такую задачу. Работает вроде.

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);

}
→ Ссылка