Я знал способ отсрочки по минутам, например, с 22:50 до 2:10. Я вставил 200 в параметр метода задержки, я обеспокоен тем, что метод перемещения времени вперед не работает, поскольку я попытался установить время 1:20 и переместить 100 минут (1 час и 40 минут) вперед к 23:40. , Когда я попытался запустить код, вывод отображался 1:40 после перемещения времени вперед. Какая строка была неправильной в методе moveForward (int lostMinute)?
class Time
{
private int hour; // between 0 - 23
private int minute; // between 0 - 59
public Time()
{
this(0, 0);
}
public Time(int hr, int min)
{
hour = (hr >= 0 && hr < 24) ? hr : 0;
minute = (min >= 0 && min < 60) ? min : 0;
}
public int getHour()
{
return hour;
}
public int getMinute()
{
return minute;
}
public void setHour(int hour)
{
this.hour = (hour >= 0 && hour < 24) ? hour : 0;
public void setMinute(int minute)
{
this.minute = (minute >= 0 && minute < 60) ? minute : 0;
}
public String toString()
{
return String.format("%02d:%02d", hour, minute);
}
public void delay(int newMinute)
{
minute = minute + newMinute;
if(minute >= 60)
{
// (minute / 60) is an integer division and truncates the remainder, which refers to (minute % 60)
hour = hour + (minute / 60);
minute = minute % 60;
if(hour >= 24)
{
hour = hour % 24;
}
}
}
public void moveForward(int lostMinute)
{
if(minute < lostMinute)
{
hour = hour - ((60 + minute) / 60);
minute = (minute + 60) % 60;
if(hour < 0)
{
hour = (24 + hour) % 24;
}
}
else
{
minute = minute - lostMinute;
}
}
}
Я видел, что delay () работает правильно, а moveForward () - нет. Чтобы сделать нотацию времени более понятной для сортировки, я использовал String.format("%02d:%02d")
, чтобы указать время между 00:00 и 23:59. Обратите внимание, что я не использую import java.util.Calender;
или 'import java.util.Date; потому что часть моего проекта состоит в сортировке массива по часам, а затем по минутам. Например, если мы пытаемся создать проект автобусного терминала, мы предполагаем, что дата и календарь не имеют значения в расписании.
public class MainTime
{
public static void main(String[] args)
{
Time t1 = new Time(23:50);
Time t2 = new Time(1:20);
Time t3 = new Time(4:50);
Time t4 = new Time(18:30);
Time t5 = new Time(14:15);
t1.delay(200);
t2.moveForward(100);
t3.delay(100);
t4.moveForward(20);
t5.moveForward(160);
System.out.println(t1.toString());
System.out.println(t2.toString());
System.out.println(t3.toString());
System.out.println(t4.toString());
System.out.println(t5.toString());
}
}
Ограничения: когда изменение времени больше минуты в параметре и когда час приближается к нулю. Когда я запускал код в NetBeans, у t1
было 2:10, когда я добавил 200 в 23:50 в методе delay(newMinute)
; У t2
было 1:40, когда я вычитал 100 из 1:20 в moveForward(lostMinute)
методе; t3
было 6:30, когда я добавил 100 в 4:50 в delay(newMinute)
; t4
имел 18:10, когда я вычитал 20 из 18:30 в moveForward(lostMinute)
; t5
имел 14: -25, когда я вычел 160 из 14:15 в moveForward(lostMinute)
. Переменные t2
и t5
после выполнения на самом деле должны быть 23:40 и 11:35 соответственно.
Пожалуйста, определите, какие строки в public void moveForward(int lostMinute)
дают неправильный вывод после вычитания минут из заданного времени.
В случае, если минута обнуляется, 60 и запись по модулю %
может быть полезна; в случае, если время обнуляется, 24 и модульная запись %
могут быть полезны. Я надеюсь, что moveForward(lostMinute)
будет хорошо работать в тех случаях, когда minute < 0
и когда hour < 0
.