Java 当小时和分钟变量低于零时,向前移动(lostTime)应如何给出正确的输出?

Java 当小时和分钟变量低于零时,向前移动(lostTime)应如何给出正确的输出?,java,netbeans,hour,minute,Java,Netbeans,Hour,Minute,我知道延迟几分钟的方法,例如,从22:50到2:10。我在延迟方法的参数中插入了200,我担心向前移动时间的方法不起作用,因为我尝试将时间设置为1:20,并将100分钟(1小时40分钟)向前移动到23:40。当我试图运行代码时,将时间向前移动后,输出显示为1:40。前进(int-lostMinute)方法中哪一行错误 约束条件是时间变化大于分钟参数以及小时变为零时。当我在NetBeans中运行代码时,t1在delay(newMinute)方法中将200添加到23:50中,得到了2:10t2的值为

我知道延迟几分钟的方法,例如,从22:50到2:10。我在延迟方法的参数中插入了200,我担心向前移动时间的方法不起作用,因为我尝试将时间设置为1:20,并将100分钟(1小时40分钟)向前移动到23:40。当我试图运行代码时,将时间向前移动后,输出显示为1:40。前进(int-lostMinute)方法中哪一行错误

约束条件是时间变化大于分钟参数以及小时变为零时。当我在NetBeans中运行代码时,
t1
delay(newMinute)
方法中将200添加到23:50中,得到了2:10<在
moveForward(lostMinute)
方法中,当我从1:20中减去100时,code>t2的值为1:40<代码>t3在
延迟(新分钟)
中,我在4:50中加了100,这是6:30<代码>t4当我在
向前移动(lostMinute)
中从18:30减去20时,代码>为18:10
t5
moveForward(lostMinute)
中,当我从14:15减去160时,得到了14:-25。执行后的变量
t2
t5
应分别为23:40和11:35。 请确定
public void moveForward(int lostMinute)
中的哪些行在从给定时间减去分钟后进行了不正确的输出。 如果分钟变为零,60和模表示法
%
可能有用;如果小时变为零,24和模表示法
%
可能有用。我希望
moveForward(lostMinute)
能够在
minute<0
hour<0
java.time的情况下正常工作 输出以注释的形式给出。我想这是你想要的。所以不要重新发明轮子。不要滚动自己的
Time
类,而是使用
LocalTime
。它在那里供您使用,它已经为您开发和测试
LocalTime
是一天中从00:00到23:59:59.9999999的时间间隔。除了它包括秒和秒的分数外,它与你的间歇时间一致。如果从未将秒数设置为0以外的值,则不会通过
toString
方法打印秒数。另外,
LocalTime
实现了
compariable
,因此排序非常简单

请注意,
LocalTime
对象是不可变的,因此它使用的方法不是mutator方法,而是使用新值返回新的
LocalTime
对象。上面的
plusMinutes
minutes
已经说明了这一点。也不是
myLocalTime.setHour(17)您需要
myLocalTime=myLocalTime.withHour(17),等等

你的代码出了什么问题? 您的
moveForward
方法似乎在将小时移回前一小时(例如从14:05移到13:55或从14:55移到13:05)的情况下正确处理了该小时。在这种情况下,你永远不会减去损失的
分钟
,我认为你应该这样做。当
minute
为0-59时,
((60+分钟)/60)
将始终为1,因此您总是精确减去1小时,而不是2小时或更多

一般来说,
delay
moveForward
的参数预期范围都不清楚。我认为他们应该被记录在案,并根据记录在案的限制对论点进行验证

链接
解释如何使用
java.time

旁注:您知道吗?使用那些过度改造轮子应该是一种进步。我只使用时间,而不是日期,以小时和分钟为单位。我目前正在进行的团队项目包括排队和排序算法,后者涉及到以小时和分钟为单位比较公交车的出发或到达时间。我假设日期和日历对于我刚才发布的时间类来说是可以忽略的。这正是
LocalTime
类的作用。。。处理时间而不是日期。我的意思是,这取决于你,但是考虑使用库函数作为那些没有错误的实现。我当然也建议<代码> LoalTime< /代码>。它的
plusMinutes
minutes
方法的计算大约在午夜结束。
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;
        }
    }
}
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());
    }
}
    LocalTime t1 = LocalTime.of(23, 50);
    t1 = t1.plusMinutes(200);
    System.out.println(t1.toString()); // 03:10

    LocalTime t2 = LocalTime.of(1, 20);
    t2 = t2.minusMinutes(100);
    System.out.println(t2.toString()); // 23:40

    LocalTime t3 = LocalTime.of(4, 50);
    t3 = t3.plusMinutes(100);
    System.out.println(t3.toString()); // 06:30

    LocalTime t4 = LocalTime.of(18, 30);
    t4 = t4.minusMinutes(20);
    System.out.println(t4.toString()); // 18:10

    LocalTime t5 = LocalTime.of(14, 15);
    t5 = t5.minusMinutes(160);
    System.out.println(t5.toString()); // 11:35