【问题标题】:Time and hours in javajava中的时间和小时
【发布时间】:2021-11-23 19:24:33
【问题描述】:
import java.util.Scanner;

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

        System.out.println("Enter time of arrival: ");
        double time = input.nextDouble();
        int arrivalTime;
        arrivalTime = 0;
        arrivalTime += time;

        if (time % 20 != 0) {
            time %= 20;
            time = 20 - time;
            System.out.println(arrivalTime +time);
        }

        else if (((arrivalTime + time) % 100) == 60.0) {
            time += 40;
            System.out.println(arrivalTime + time);
        }
        else
            System.out.println("Now - " +arrivalTime);

    }
}

我被要求编写一个程序,该程序获取当前时间的输入并返回下一辆公共汽车离开的时间,因为我知道公共汽车每 20 分钟在 00、20、40 时离开,问题是如果我输入 2243 代表 22:43 我将返回 2260 而不是 2300

【问题讨论】:

  • 首先,不要为此使用双(浮点)变量

标签: java time


【解决方案1】:

java.time

我建议您使用java.time.Duration,它以ISO-8601 standards 为蓝本,并作为JSR-310 implementation 的一部分与Java-8 一起引入。

演示:

import java.time.Duration;
import java.time.LocalTime;
import java.util.Scanner;

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

        System.out.print("Enter time of arrival: ");
        showNextDepartureTime(input.nextLine());
    }

    static void showNextDepartureTime(String arrivalTime) {
        Duration nextDeparture = Duration.between(LocalTime.MIN, LocalTime.parse(arrivalTime));
        int remainder = nextDeparture.toMinutesPart() % 20;
        if (remainder != 0)
            nextDeparture = nextDeparture.minusMinutes(remainder).plusMinutes(20);

        System.out.printf("The next departure is at %2d:%02d", nextDeparture.toHoursPart(),
                nextDeparture.toMinutesPart());
    }
}

示例运行:

Enter time of arrival: 22:43
The next departure is at 23:00

另一个示例运行:

Enter time of arrival: 22:00
The next departure is at 22:00

更新

正如 Lino 在他的 comment 中所建议的,您可以按如下方式替换 if 正文:

if (remainder != 0)
    nextDeparture = nextDeparture.plusMinutes(20 - remainder);

【讨论】:

  • 注意:您也可以将if 替换为:nextDeparture = nextDeparture.plusMinutes(20 - remainder)。 IE。只需将差值“四舍五入”到下一个 20 的倍数
  • 感谢@Lino 的建议。您建议的解决方案的问题是当分钟为零时它不起作用,例如对于22:00,它将给出22:20 作为输出。
  • 啊,是的,你是对的,if 是必需的。所以要纠正我的评论:只有if 的主体可以替换为我之前写的
猜你喜欢
  • 1970-01-01
  • 2011-11-28
  • 2019-07-03
  • 2018-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多