首页 > 解决方案 > java-如何正确添加时间?

问题描述

我的代码无法正常工作,例如,当用户现在输入的是 5 h 43 m 和 7 s 并且用户想要添加 3 h 50 m 和 57 s 代码计算并显示添加的时间,但它显示8 小时 93 米和 64 秒,但我希望在 60 米后显示 9 小时 34 米和 4 秒,所以你能帮帮我。

import java.util.Scanner;
class Main {
    public static void main(String[] args) {
        Scanner user_input = new Scanner (System.in);
    
        int startup_hour;
        int startup_minute;
        int startup_second;
    
        int add_hours;
        int add_minutes;
        int add_seconds;
    
        System.out.print("what time is it right now(hour)? \n");
        startup_hour = user_input.nextInt();
    
        System.out.print("what time is it right now(minutes? \n");
        startup_minute = user_input.nextInt();
    
        System.out.print("what time is it right now(seconds)? \n");
        startup_second = user_input.nextInt();
    
    
        System.out.println("The starting time is " + startup_hour
            + " hours " + startup_minute + " minutes " + "and "
            + startup_second + " seconds \n");
    
        System.out.print("How many hours you wanna add? \n");
        add_hours = user_input.nextInt();
    
        System.out.print("How many minutes you wanna add? \n");
        add_minutes = user_input.nextInt();
    
        System.out.print("How many seconds you wanna add? \n");
        add_seconds = user_input.nextInt();
        
        System.out.println("The user wanna add " + add_hours
            + " hours " + add_minutes + " minutes "
            + "and " + add_seconds + " seconds \n");

        int totalHours = (startup_hour + add_hours);
        int totalMinutes = (startup_minute + add_minutes);
        int totalSeconds = (startup_second + add_seconds);
    
        if (totalSeconds == 60){
            totalMinutes++; 
            totalSeconds = 0;
        }

        if (totalMinutes == 60){
            totalHours++;
            totalMinutes = 0;
        }
    
        System.out.println("After adding, the time would then be "
           + totalHours + " hours " + totalMinutes + " Minutes "
           + totalSeconds + " Seconds ");
    
              *emphasized text*
    }
}

感谢你

标签: java

解决方案


您的程序无法运行的原因是因为您正在处理时间,而不使用标准单位,即seconds.

例如

假设启动时间为1 hours 3 minutes and 57 seconds。并且用户想要添加,1 hour 57 minutes and 3 seconds.

正确答案是,3 hours 1 Minutes 0 Seconds但你的程序会返回2 hours 61 Minutes 0 Seconds.

现在,为什么会发生这种情况?

原因是:

  • 如前所述,您没有使用标准单位 ( seconds) 处理时间。
  • 循环中的条件if不正确。您只检查 是否minutes/seconds等于 60。如果minutesorseconds是 61 或更多怎么办?

解决方案:

最简单的解决方案是,首先将 time 转换为seconds,添加您要添加​​的时间,然后将其转换回如果您hours:minutes:seconds.使用.ifseconds

这是修改后的代码,可以正常工作:

import java.util.Scanner;
    
public class Test 
{

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

    int startup_hour;
    int startup_minute;
    int startup_second;
    int add_hours;
    int add_minutes;
    int add_seconds;

    System.out.print("What time is it right now(hour)    : ");
    startup_hour = user_input.nextInt();

    System.out.print("What time is it right now(minutes) : ");
    startup_minute = user_input.nextInt();

    System.out.print("What time is it right now(seconds) : ");
    startup_second = user_input.nextInt();

    System.out.println("The starting time is " + startup_hour + " hours " + startup_minute + " minutes "
            + "and " + startup_second + " seconds.");
    System.out.println();

    System.out.print("How many hours you wanna add   : ");
    add_hours = user_input.nextInt();

    System.out.print("How many minutes you wanna add : ");
    add_minutes = user_input.nextInt();

    System.out.print("How many seconds you wanna add : ");
    add_seconds = user_input.nextInt();

    System.out.println("The user wanna add " + add_hours + " hours " + add_minutes + " minutes "
            + "and " + add_seconds + " seconds.");
    System.out.println();

    int totalSecondsAtStart = (startup_hour * 60 * 60) + (startup_minute * 60) + startup_second;
    int totalSecondsToAdd = (add_hours * 60 * 60) + (add_minutes * 60) + (add_seconds);
    int totalSeconds = totalSecondsAtStart + totalSecondsToAdd;

    //Convert total seconds to hour, minutes and seconds;
    int totalMinutes = (totalSeconds / 60);
    int totalHours = (totalMinutes / 60);

    int finalHours = totalHours;
    int finalMinutes = totalMinutes - (totalHours * 60);
    int finalSeconds = totalSeconds - (totalMinutes * 60);

    System.out.println("After adding, the time would then be " + finalHours + " hours"
      + " " + finalMinutes + " Minutes " + finalSeconds + " Seconds.");
}
}

请注意我如何将时间转换回hours:minutes:seconds.


推荐阅读