【问题标题】:How to add up minutes and seconds in continuation from previous input如何从先前的输入继续添加分钟和秒
【发布时间】:2021-05-20 20:24:19
【问题描述】:

我试图弄清楚如何将用户输入的分钟和秒数相加。我不是从当前时间开始添加的,所以我知道我需要一个循环来将输入的所有分钟数和秒数相加。我还希望将加到 60 的秒数添加到分钟中,而不是将其列为一堆秒。这是我的代码:

import java.util.*;

public class timeAdder {
     public static void main(String[] args) {
         Scanner keyb = new Scanner (System.in);
         System.out.println ("Welcome to the Time Adder!\n ");
         System.out.println("Enter 5 time durations in minutes and seconds\n ");
         
         System.out.print ("Duration 1, how many minutes? ");
         int min = keyb.nextInt();
         System.out.print ("Duration 1, how many seconds? ");
         int sec = keyb.nextInt();
         System.out.print ("Duration 2, how many minutes? ");
         min=keyb.nextInt();
         System.out.print ("Duration 2, how many seconds? ");
         sec= keyb.nextInt();
         System.out.print ("Duration 3, how many minutes? ");
         min = keyb.nextInt();
         System.out.print ("Duration 3, how many seconds? ");
         sec = keyb.nextInt();
         System.out.print ("Duration 4, how many minutes? ");
         min = keyb.nextInt();
         System.out.print ("Duration 4, how many seconds? ");
         sec = keyb.nextInt();
         System.out.print ("Duration 5, how many minutes? ");
         min = keyb.nextInt();
         System.out.print ("Duration 5, how many seconds? ");
         sec = keyb.nextInt();

         System.out.println("The total of the 5 times is: \n");         
     }
}

【问题讨论】:

  • 注意:你有很多重复的代码。您可以改用 (for) 循环。

标签: java java-time duration


【解决方案1】:

我建议您使用java.time.Duration,它以ISO-8601 standards 为模型,并作为JSR-310 implementation 的一部分与Java-8 一起引入。 Java-9 引入了一些更方便的方法。

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

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

        System.out.println("Welcome to the Time Adder!\n ");
        System.out.println("Enter 5 time durations in minutes and seconds\n ");

        System.out.print("Duration 1, how many minutes? ");
        duration = duration.plusMinutes(keyb.nextInt());
        System.out.print("Duration 1, how many seconds? ");
        duration = duration.plusSeconds(keyb.nextInt());
        System.out.print("Duration 2, how many minutes? ");
        duration = duration.plusMinutes(keyb.nextInt());
        System.out.print("Duration 2, how many seconds? ");
        duration = duration.plusSeconds(keyb.nextInt());
        System.out.print("Duration 3, how many minutes? ");
        duration = duration.plusMinutes(keyb.nextInt());
        System.out.print("Duration 3, how many seconds? ");
        duration = duration.plusSeconds(keyb.nextInt());
        System.out.print("Duration 4, how many minutes? ");
        duration = duration.plusMinutes(keyb.nextInt());
        System.out.print("Duration 4, how many seconds? ");
        duration = duration.plusSeconds(keyb.nextInt());
        System.out.print("Duration 5, how many minutes? ");
        duration = duration.plusMinutes(keyb.nextInt());
        System.out.print("Duration 5, how many seconds? ");
        duration = duration.plusSeconds(keyb.nextInt());

        // In default format
        System.out.println(duration);

        // Custom format
        // ####################################Java-8####################################
        String formattedElapsedTime = String.format("%02d:%02d:%02d", duration.toHours() % 24,
                duration.toMinutes() % 60, duration.toSeconds() % 60);
        System.out.println("The total of the 5 times is: " + formattedElapsedTime);
        // ##############################################################################

        // ####################################Java-9####################################
        formattedElapsedTime = String.format("%02d:%02d:%02d", duration.toHoursPart(), duration.toMinutesPart(),
                duration.toSecondsPart());
        System.out.println("The total of the 5 times is: " + formattedElapsedTime);
        // ##############################################################################

    }
}

示例运行:

Welcome to the Time Adder!
 
Enter 5 time durations in minutes and seconds
 
Duration 1, how many minutes? 5
Duration 1, how many seconds? 10
Duration 2, how many minutes? 15
Duration 2, how many seconds? 20
Duration 3, how many minutes? 25
Duration 3, how many seconds? 30
Duration 4, how many minutes? 35
Duration 4, how many seconds? 40
Duration 5, how many minutes? 45
Duration 5, how many seconds? 50
PT2H7M30S
The total of the 5 times is: 02:07:30
The total of the 5 times is: 02:07:30

进一步改进:

我建议您对五组输入使用循环。

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

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

        System.out.println("Welcome to the Time Adder!\n ");
        System.out.println("Enter 5 time durations in minutes and seconds\n ");

        for (int i = 1; i <= 5; i++) {
            System.out.print("Duration " + i + ", how many minutes? ");
            duration = duration.plusMinutes(keyb.nextInt());
            System.out.print("Duration " + i + ", how many seconds? ");
            duration = duration.plusSeconds(keyb.nextInt());
        }

        // In default format
        System.out.println(duration);

        // Custom format
        // ####################################Java-8####################################
        String formattedElapsedTime = String.format("%02d:%02d:%02d", duration.toHours() % 24,
                duration.toMinutes() % 60, duration.toSeconds() % 60);
        System.out.println("The total of the 5 times is: " + formattedElapsedTime);
        // ##############################################################################

        // ####################################Java-9####################################
        formattedElapsedTime = String.format("%02d:%02d:%02d", duration.toHoursPart(), duration.toMinutesPart(),
                duration.toSecondsPart());
        System.out.println("The total of the 5 times is: " + formattedElapsedTime);
        // ##############################################################################

    }
}

【讨论】:

  • 如何用“27分5秒”这样的词显示总时间
  • 谢谢,奥莱。 @user15200162 - 如果您还不能弄清楚 Ole 的建议,或者如果您难以使用 printf,您可以使用 System.out.println("The total of the 5 times is " + duration.toHoursPart() + " hours " + duration.toMinutesPart() + " minutes and " + duration.toSecondsPart() + " seconds.")。但是,我强烈建议您通过 docs.oracle.com/javase/7/docs/api/java/util/Formatter.html 并在那里练习示例。
  • 它确实必须以分钟和秒为单位。就像它不能再显示 0 小时了,我很难修复它
  • @user15200162 - 在这种情况下,它应该是System.out.println("The total of the 5 times is " + duration.toMinutes() + " minutes and " + duration.toSecondsPart() + " seconds.")
【解决方案2】:

把所有的分和秒分别加起来,然后做

min+=sec/60; 
sec=sec%60;

     ...
     System.out.print ("Duration 2, how many minutes? ");
     min+=keyb.nextInt();
     System.out.print ("Duration 2, how many seconds? ");
     sec+= keyb.nextInt();
     ...
     min+=sec/60; 
     sec=sec%60;

【讨论】:

    猜你喜欢
    • 2022-01-07
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多