如何从我输入的时间中减去分钟数?

How can I subtract minutes from the time I input?

提问人: 提问时间:9/29/2021 更新时间:9/29/2021 访问量:323

问:

我正在做教授的作业,要求我写一个班级,以小时和分钟表示时间。我必须能够在时间上添加小时,从时间中减去小时,在时间上添加分钟,从时间中减去分钟。我坚持在时间上增加分钟。如果时间是 11:00,我想增加 90 分钟。正确的输出是 12:30。但是对于我的代码,我的输出始终是 12。有人可以帮我修改我的代码以便添加分钟数吗?因为我也需要它来弄清楚如何减去分钟。

import java.util.Scanner;

public class Time {
    private int hour;
    private int minute;

    public Time() {
    }

    public Time(int newHour, int newMinute) {
        setTime(newHour, newMinute);
    }

    public void setTime(int h, int m) {
        setHour(h);
        setMinute(m);

    }

    public void setHour(int h) {
        hour = ((h >= 0 && h < 24) ? h : 0);
    }

    public void setMinute(int m) {
        minute = ((m >= 0 && m < 60) ? m : 0);
    }

    public int getHour() {
        return hour;
    }

    public int getMinute() {
        return minute;
    }

    public void addHours(int h) {
        setHour(hour + h);
        if (hour == 12)
            hour = 12;
        else if (hour > 12)
            hour = hour - 12;
    }

    public void subtractHours(int h) {
        setHour(hour - h);
        if (hour == 0)
            hour = 12;
        else if (hour > 12)
            hour = hour - 12;
        if (hour == 12)
            hour--;
    }

    public void addMinutes(int m) {
        setMinute(minute + m);
        if (m > 60)
            m = m + minute;
        else if (m <= 60)
            m = m + minute;
        addHours(m / 60);
    }

    public void subtractMinutes(int m) {
        setMinute(minute - m);
        if (m > 60)
            m = minute - m;
        else if (m <= 60)
            m = minute - m;
        if (m <= 60)
            hour += minute / 60;
        else if (m <= 60)
            minute += minute % 60;
    }

    @Override
    public String toString() {
        return "DateAndTime [hour=" + hour + ", minute=" + minute + "]";
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("Enter the time");
        System.out.print("Hours: ");
        int hour = input.nextInt();
        System.out.print("Minutes: ");
        int minute = input.nextInt();

        Time time = new Time(hour, minute);

        boolean done = false;

        while (!done) {
            System.out.println("1. Add Hours");
            System.out.println("2. Subtract Hours");
            System.out.println("3. Add Minutes");
            System.out.println("4. Subtract Minutes");
            System.out.print("Choice: ");
            switch (input.nextInt()) {
            case 1:
                time.addHours(input.nextInt());
                break;

            case 2:
                time.subtractHours(input.nextInt());
                break;

            case 3:
                time.addMinutes(input.nextInt());
                break;

            case 4:
                time.subtractMinutes(input.nextInt());
                break;
            }
            System.out.println("Time is: " + time.toString());

        }
    }

}
Java Eclipse 对象 时间 java.util.scanner

评论


答:

1赞 Scary Wombat 9/29/2021 #1

看看这个

setMinute(30 + 90);
->
minute = ((120 >= 0 && 120 < 60) ? m : 0);

分钟变为 0

之后

if (m > 60)
    m = m + minute;
else if (m <= 60)
    m = m + minute;

不执行任何分钟操作,仅更改本地范围的变量。

了解如何使用调试器。

2赞 MadProgrammer 9/29/2021 #2

因此,您需要做的是计算出指定时间值中的小时数,并计算出剩余的分钟数(一旦取出小时数)

幸运的是,这相对容易且相对常见,例如......

int time = 90;
int hours = time / 60;
int minutes = time % 60;

System.out.println(hours);
System.out.println(minutes);

将输出

1
30

因此,在 90 分钟内,您有 1 小时 30 分钟的时间,然后需要将其添加到您的基本值中,但是,一个稍微好一点的解决方案是将现有值转换为分钟,添加/减去所需的分钟,然后将值转换回小时/分钟。

例如。。。

public void addMinutes(int m) {
    int time = ((getHour() * 60) + getMinute()) + m;
    int hours = time / 60;
    int minutes = time % 60;

    setHour(hours);
    setMinute(minutes);
}

public void subtractMinutes(int m) {
    addMinutes(-m);
}

因此,通过这些修改,我们可以使用类似的东西......

Time time = new Time(11, 0);
time.addMinutes(90);

System.out.println(time);

其中输出...

DateAndTime [hour=12, minute=30]