【问题标题】:Avoiding unnecessary value inputted seconds must convert to minutes, seconds, hours, days in JAVA避免不必要的值输入秒必须在JAVA中转换为分钟,秒,小时,天
【发布时间】:2018-03-14 23:33:17
【问题描述】:

编写一个java代码,将秒转换为分钟、秒、小时和天。 但不应打印 0 值。

****例如:****

如果用户给出 102,程序应该打印 1 分 42 秒。

不是 1 分 42 秒 0 小时 0 天。

但我写了一个显示“0”值的代码。比如,如果用户给出 102, 程序打印,0 天 0 小时 1 分钟 42 秒。

import java.util.Scanner;

public class clock {

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

    System.out.println("Please input seconds");
    int seconds = keyboard.nextInt();
    int minute,hour,day;

    minute = seconds/60;
    seconds = seconds%60;
    hour = minute / 60;
    minute = minute % 60;
    day = hour / 24;
    hour = hour % 24; 
    System.out.printf("%d seconds and %d minutes %d hours %d days",seconds,minute,hour,day);
  }
}

即使有人可以给我算法也可以:)

【问题讨论】:

  • 你可以使用 StringBuilder 和 if-else
  • 所以你的意思是...... 如果 小时数为零,则不要打印它,如果 天数为零,不要'不打印,对吧? (提示在此评论中。)
  • 如果不麻烦,您能说得更具体些吗?其实我是个新手。
  • 听起来像是一个学习练习。
  • Makoto 实际上给了您答案,而不是为您编写代码。第二个提示,阅读docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html

标签: java


【解决方案1】:

雅虎!得到答案!问题很容易解决!!!!

import java.util.Scanner;
public class clock {
public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    System.out.println("please input the seconds");
    int seconds = keyboard.nextInt();
    int minutes, hour, day ;   
    minutes = seconds / 60; 
    seconds = seconds % 60; 

    hour = minutes / 60; 
    minutes = minutes % 60;

    day = hour / 24 ;
    hour = hour % 24 ; 

    if (seconds >0){
         System.out.printf("%d Seconds ",seconds);
    }
    if (minutes > 0){
         System.out.printf("%d Minutes ",minutes);
    }
    if (hour > 0){
         System.out.printf("%d Hour ",hour); 
    }
    if (day > 0){
    System.out.printf("%d day ",day);
    }
  }
}

【讨论】:

    【解决方案2】:

    编辑您的代码:

    public static void main(String[] args) { 扫描仪键盘=新扫描仪(System.in);

      System.out.println("Please input seconds");
      int seconds = keyboard.nextInt();
      int minute,hour,day;
    
      minute = seconds/60;
      seconds = seconds%60;
      hour = minute / 60;
      minute = minute % 60;
      day = hour / 24;
      hour = hour % 24; 
      StringBuffer sb = new StringBuffer(); //This is used based on your requirement for dynamic output,each of the below conditions will add chars to string accordingly
      if(seconds != 0){
       sb.append(seconds +" seconds and ");}
      if(minute !=0){
       sb.append(minute +" minutes ");}
      if(hour != 0){
       sb.append(hour +" hours ");}
      if(day != 0){
        sb.append(day +" days");}
      System.out.printf(sb.toString());
    

    }

    【讨论】:

    • 您应该提供有用的解释来补充代码建议,即您更改了什么以及为什么需要它
    • 有什么方法可以在不使用字符串缓冲区和字符串生成器类的情况下对其进行编码?????
    • 你可以使用字符串连接,但是字符串缓冲区使用的内存更少,处理字符串的速度更快。
    • 这实际上是 Java 9 中的 not the case,并且由于 Java 在处理字符串连接方面变得更加智能,因此使用 StringBuilders 的代码实际上会受到性能影响。 :)
    【解决方案3】:

    您只需要打印不为 0 的值。因此您需要检查值是否为零。您可以使用这样的if-statement 执行此操作:

    if( day == 0) {
      // Code here will only execute if the value of day is zero
    }
    

    或者,如果您只想在值为零时触发,请检查day != 0

    这样,我们可以构建一个只有非零值的字符串:

    String output = "";
    
    // First the days
    if( days != 0 ) {
      output += days + " days";
    }
    
    // Then the hours
    if( hours != 0 ) {
      output += hours + " hours ";
    }
    
    // etc
    

    然后当你完成后,你可以打印结果行。

    System.out.println(output.trim());
    

    我们调用trim() 方法来消除行首或行尾的任何多余空格。

    请注意,如果您使用的是数字,并且该数字可以是负数,您可能需要检查 days > 0 而不是不相等。否则你可能会打印-1 days,这很奇怪。

    【讨论】:

      猜你喜欢
      • 2016-07-14
      • 1970-01-01
      • 2012-01-06
      • 2017-05-10
      • 2012-09-27
      • 1970-01-01
      相关资源
      最近更新 更多