时间计算器

本文介绍如何使用Java编写一个算法,根据用户输入的时间和操作次数,进行加减分钟的计算,处理时间跨越0点的情况。文章详细阐述了算法的各个步骤,包括时间拆分、接受操作次数、核心计算逻辑以及结果的输出处理。
摘要由CSDN通过智能技术生成

写一个算法:

要求:

        用户第一行会输入一个时间(包含时分)xx:xx

        第二行表示具体操作次数

        后面行数为操作次数,可以 为+2,-3等,代表操作了x分钟

写一个算法,计算当前时间,进行操作后时间(包含时分)

1.首先获取时间

用这四行处理输入的时间

用hour接受当前小时,min接受当前分钟

        Scanner in = new Scanner(System.in);
        String[] time = in.nextLine().split(":");
        int hour = Integer.valueOf(time[0]);
        int min = Integer.valueOf(time[1]);

获取操作次数

int n = in.nextInt();

2.接下来就开始核心代码

首先本计算不涉及年月日的计算,有两种解题思路:

        一、是分钟在加到60时,小时要加一;分钟在减到0后,小时要减一,分钟要变成59,且小时在减到0后,要赋值23。这个方法涉及到的判断和编写代码时,容易出错或存在缺漏。

        二、直接将小时和分钟全部转化为总分钟数,在这个基础上进行加减操作:

        如果进行减操作,结果是负数,代表一天时间以及不够减了,且有可能减的数不知一天,所以先对24(24小时)*60(60分钟)进行取余,保证最终减操作减到最后在一天之内浮动,在加24*60,将负数转为正数,结果为最终的总分钟数,在转成时分显示即可;

        如果进行加操作,结果大于24*60,代表超过了一天,,且有可能超过了不止一天,所以进行取余保证时间永远不超过一天,最终得到了总分钟数,在转成时分显示即可;

        二的方法在后续还可以替换成,年月日时分秒计算器操作,因此本文使用第二给方法。

int sum = hour * 60 + min;    //计算总分钟数

for(int i = 0 ; i < n ; i++) {
    String op = in.next();    //获取当前行
    if (op.length() > 1) {    //确保当前行有数据
        String flag = op.substring(0, 1);    //获得符号
        Integer opNum = Integer.valueOf(op.substring(1));    //获得计算的值

        if (flag.equals("-")) {    //减操作
            sum -= opNum;    //总分钟数减去此次操作的分钟数,若不为负数不需要进行后面操作
            if(sum < 0) {    //已经变为负数
                sum %= 60 * 24;  //取余,确保时间不会超过负的一天
                sum += 60 * 24;  //由时间不存在负数,但当前负数值加上一天的总分钟数就为最终结果
            }
        }else if (flag.equals("+")) {    //加操作
            sum += opNum;    //加操作,直接取余,减少判断是否超过一天
            sum %= 60 * 24;
        }
    }
}
hour = sum / 60;    //得到最终的小时的值
min = sum % 60      //取余结果为分钟的值

3.最后输出结果时需要注意

因为小时和分钟用int接,若结果为凌晨1点9分,输出会变成1:9

所以需要处理,在小时或分钟为个数的情况下,以情况加"0"

因此写了一个函数处理

public static void printTime(int hour, int min){
        if (hour < 10 && min < 10){
            System.out.println("0" + hour + ":0" + min);
            return;
        }else if (hour >= 10 && min < 10) {
            System.out.println(hour + ":0" + min);
            return;
        }else if (min >= 10 && hour < 10) {
            System.out.println("0" + hour + ":" + min);
            return;
        }
        System.out.println(hour + ":" + min);

}

 4.完整代码

public static void main(String[] args) {
    String[] time = in.nextLine().split(":");
    int hour = Integer.valueOf(time[0]);
    int min = Integer.valueOf(time[1]);

    int n = in.nextInt();

    int sum = hour * 60 + min;    //计算总分钟数

    for(int i = 0 ; i < n ; i++) {
        String op = in.next();    //获取当前行
        if (op.length() > 1) {    //确保当前行有数据
            String flag = op.substring(0, 1);    //获得符号
            Integer opNum = Integer.valueOf(op.substring(1));    //获得计算的值

            if (flag.equals("-")) {    //减操作
                sum -= opNum;    //总分钟数减去此次操作的分钟数,若不为负数不需要进行后面操作
                if(sum < 0) {    //已经变为负数
                    sum %= 60 * 24;  //取余,确保时间不会超过负的一天
                    sum += 60 * 24;  //由时间不存在负数,但当前负数值加上一天的总分钟数就为最终结果
                }
            }else if (flag.equals("+")) {    //加操作
                sum += opNum;    //加操作,直接取余,减少判断是否超过一天
                sum %= 60 * 24;
            }
        }
    }
    hour = sum / 60;    //得到最终的小时的值
    min = sum % 60      //取余结果为分钟的值
    printTime(hour, min);
}

public static void printTime(int hour, int min){
    if (hour < 10 && min < 10){
        System.out.println("0" + hour + ":0" + min);
            return;
    }else if (hour >= 10 && min < 10) {
        System.out.println(hour + ":0" + min);
        return;
    }else if (min >= 10 && hour < 10) {
        System.out.println("0" + hour + ":" + min);
        return;
    }
    System.out.println(hour + ":" + min);
}

注意:

若需要修改成其他时间类型的计算,更改总数sum和取余时和加减操作时的计算结果,且将输出方法更改即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值