P5707题解

· · 题解

没有人发Java题解,那么我首当其冲来给大家发一个Java的题解。

首先我们要知道,用于操控时间的除了最常用的 Date 类,还有

这么一看,这道题使用起来比较方便的就是 Calendar 类

Calendar 类中用一下这些常量表示不同的意义,jdk 内的很多类其实都是采用的这种思想。

用于操作时间:

Calendar c1 = Calendar.getInstance();
  c1.add(Calendar.DATE, 10); 
 c1.add(Calendar.DATE, -10); //把c1对象的日期加上-10,也就是c1所表的日期的10天前的日期,其它所有的数值会被重新计算。

其他字段属性的add的意义以此类推。

这样一来,其他题解中说的那些坑也就减少了很多。比如说就不用考虑天数的问题了,Java自己帮你处理了。

还是以往的套路,相对于其他语言来说稍微麻烦一点点的,使用 Scanner 的对象进行输入。使用 Scanner 类时需要


Scanner scanner = new Scanner(System.in);
int s = scanner.nextInt(); //路程。
int y = scanner.nextInt(); //速度。

之后再用 Calendar类 实例进行实践操作。

Calendar date = Calendar.getInstance(); //创造 Calendar 类实例。
date.set(2021, Calendar.MAY, 5, 8, 0, 0); //设置时间(不设置默认为计算机当前时间。)

上面那一句对应 Calendar 类中函数 。

public final void set(int year, int month, int date, int hourOfDay, int minute,int second)
date.add(Calendar.MINUTE, s % y == 0 ? -(s / y) : -(s / y) - 1); // 使用三目运算符。因为如果路程不能整除速度的话需要再使用一分钟填满。

之后再使用 SimpleDateFormat 进行时间格式化再输出。

这里只需要输出 小时:分钟,所以格式化的格式为:HH:mm

SimpleDateFormat format = new SimpleDateFormat("HH:mm"); //创造格式化 HH:mm 的 SimpleDateFormat 对象。

最后在输出的时候要将 Calendar 类转换为长整型输出,否则会报错。

而日期类都可以转换成长整型( long )格式,所以:

System.out.println(format.format(date.getTime())); // getTime()获得长整形时间

完整代码

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int s = scanner.nextInt();
        int y = scanner.nextInt();
        Calendar date = Calendar.getInstance();
        date.set(2021, Calendar.MAY, 5, 8, 0, 0);
        date.add(Calendar.MINUTE, -10);
        date.add(Calendar.MINUTE, s % y == 0 ? -(s / y) : -(s / y) - 1);
        SimpleDateFormat format = new SimpleDateFormat("HH:mm");
        System.out.println(format.format(date.getTime()));
    }
}

希望大家有所收获 ~φ(≧ω≦*)♪