【问题标题】:How can I subtract minutes from the time I input?如何从我输入的时间中减去分钟?
【发布时间】:2023-03-23 11:39:01
【问题描述】:

我正在做我教授的家庭作业,要求我写一个类来表示以小时和分钟为单位的时间。我必须能够在时间上加上小时,从时间中减去小时,在时间上加上分钟,从时间中减去分钟。我坚持要增加分钟的时间。如果时间是 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 object time java.util.scanner


    【解决方案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】:

      所以,你需要做的是计算出在指定时间值内的小时数,并计算出剩余的分钟数(一旦你取出小时数)

      幸运的是,这比较容易,也比较常见,例如...

      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]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多