黑马程序员技术交流社区

标题: 3、 从键盘接受一个数字,打印该数字表示的时间,最大单位到天, [打印本页]

作者: 刘俊强    时间: 2014-4-9 14:23
标题: 3、 从键盘接受一个数字,打印该数字表示的时间,最大单位到天,
  1. package com.itheima;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;

  5. import com.sun.corba.se.impl.protocol.JIDLLocalCRDImpl;

  6. /**
  7. * 3、 从键盘接受一个数字,打印该数字表示的时间,最大单位到天,例如:
  8. 键盘输入6,打印6秒;
  9. 键盘输入60,打印1分;
  10. 键盘输入66,打印1分6秒;
  11. 键盘输入666,打印11分6秒;
  12. 键盘输入3601,打印1小时1秒
  13. * @author Administrator
  14. *
  15. */
  16. public class Test3 {
  17.         private int time;
  18.         public static void main(String[] args) {
  19.                 Test3 test3=new Test3();
  20.                 test3.printTime(test3.getTime());
  21.         }
  22.         private int getTime() {
  23.                 // TODO Auto-generated method stub
  24.                 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  25.                 try {
  26.                         time=Integer.parseInt(br.readLine());
  27.                 } catch (NumberFormatException e) {
  28.                         // TODO Auto-generated catch block
  29.                         e.printStackTrace();
  30.                 } catch (IOException e) {
  31.                         // TODO Auto-generated catch block
  32.                         e.printStackTrace();
  33.                 }
  34.                 /*System.out.print(time);*/
  35.                 return time;
  36.         }
  37.         private void  printTime(int time) throws ArithmeticException{
  38.                 int t[]=new int[4];
  39.                 int k=time;
  40.                
  41.                         t[0]=time/(60*60*24);
  42.                         time=k;
  43.                         t[1]=(time%(60*60*24))/(60*60);
  44.                         time=k;
  45.                         t[2]=((time%((60*60*24))%(60*60)))/60;
  46.                         time=k;
  47.                         t[3]=time%(60*60*24)%(60*60)%60;
  48.                
  49.                 System.out.print(t[0]+"天"+t[1]+"时"+t[2]+"分"+t[3]+"秒");
  50.         }
  51. }
复制代码

大神帮我看一下,有木有简单点的办法,这是我自己写的,感觉有点麻烦,希望大家能告诉我一个简单的算法。
作者: 水蓝    时间: 2014-4-9 17:39
本帖最后由 水蓝 于 2014-4-9 17:41 编辑

楼主过于专注定程序算法的设计,没有注意对计算中常量的提取,造成了代码可读性较差。
以下代码不完善,仅供参考:
  1. public class Test3 {
  2.         
  3.         //1分=60秒
  4.         public static int min2Seconds = 60;
  5.         
  6.         //1时=60分
  7.         public static int hour2Seconds = min2Seconds*60;
  8.         
  9.         //1天=24时
  10.         public static int day2Seconds = hour2Seconds*24;
  11.         
  12.         public static void main(String[] args)
  13.         {
  14.                 //键盘输入楼主自己写吧~~~这边用个数据模拟输入后的值
  15.                 int testSec = 1024;
  16.                
  17.                 System.out.print(testSec/day2Seconds + "天");
  18.                 testSec = testSec%day2Seconds;
  19.                
  20.                 System.out.print(testSec/hour2Seconds + "时");
  21.                 testSec = testSec%hour2Seconds;
  22.                
  23.                 System.out.print(testSec/min2Seconds + "分");
  24.                 testSec = testSec%min2Seconds;
  25.                
  26.                 System.out.println(testSec + "秒");
  27.         }
  28. }
复制代码

作者: alucard    时间: 2014-4-11 10:28
  1. mport java.util.Scanner;

  2. public class ShowTime {

  3.     public static void main(String[] args) {
  4.         int time = getInt();
  5.         outTime(time);
  6.     }
  7.    
  8.     /**
  9.      * 获取从控制台输入数字
  10.      * @param name
  11.      * @return
  12.      */
  13.     private static int getInt() {
  14.         boolean flog = true;
  15.         int result = 0;
  16.         while (flog){
  17.             Scanner sc = new Scanner(System.in);
  18.             System.out.println("输入一个大于0的整数:");
  19.             try{
  20.                 result = Integer.parseInt(sc.nextLine());
  21.                 if (result < 0) {
  22.                     throw new Exception("输入的值必须大于等于0");
  23.                 }
  24.                 flog = false;
  25.             } catch(Exception e) {
  26.                 System.out.println("输入值非法,请输入大于0的整数!");
  27.             }
  28.         }
  29.         return result;
  30.     }
  31.    
  32.     private static void outTime(int time){
  33.         int s = 0, m = 0, h = 0, d = 0;
  34.         if (time < 0) return ;
  35.         if (time < 60) {
  36.             s = time;
  37.         } else if (time >= 60 && time < 60*60 ){
  38.             m = time/60;
  39.             s = time%60;
  40.         } else if (time >= 60*60 && time < 24*60*60){
  41.             h = time/(60*60);
  42.             m = time%(60*60)/60;
  43.             s = time%(60*60)%60;
  44.         } else {
  45.             d = time/(24*60*60);
  46.             h = time%(24*60*60)/(60*60);
  47.             m = time%(24*60*60)%(60*60)/60;
  48.             s = time%(24*60*60)%(60*60)%60;
  49.         }
  50.         out(d, h, m, s);
  51.     }
  52.    
  53.     private static void out(int d, int h, int m, int s) {
  54.         String str = "";
  55.         if (d != 0) {
  56.             str += d + "天";
  57.         }
  58.         if (h != 0) {
  59.             str += h + "小时";
  60.         }
  61.         if (m != 0) {
  62.             str += m + "分钟";
  63.         }
  64.         if (s != 0) {
  65.             str += s + "秒";
  66.         }
  67.         System.out.println(str);
  68.     }
  69. }
复制代码





作者: ashinfree1204    时间: 2014-7-29 20:13
LIHAI,...........
作者: ς高眼光の目标    时间: 2014-10-8 01:36
很牛的
      
作者: 卷毛拉风    时间: 2014-11-5 22:38
这道题怎么复杂啊
作者: 各有千秋    时间: 2014-11-12 16:06
牛人啊!
作者: 钟道上    时间: 2015-1-13 15:55
  1. public class T2 {
  2.         static int min,hour,day,s;//编写过程发现这三个数范围很大
  3.         // 分别定义常量mintime,hourtime,daytime用来分割四种情况
  4.                 final static int mintime=60,hourtime=60*60,daytime=60*60*24;
  5.         //定义一个输出用的函数sop
  6.                 public static void sop(Object obj){
  7.                         System.out.print(obj);
  8.                 }
  9.         public static void main(String[] args){
  10.                 Scanner in=new Scanner(System.in);
  11.                 int x=0;
  12.                 try {
  13.                         x=in.nextInt();
  14.                 } catch (Exception e) {//异常处理
  15.                         System.out.println("请下次输入数字,如:1,6,41等");
  16.                 }
  17.                
  18.                 printTime(x);
  19.                
  20.         }

  21.         private static void printTime(int x) {
  22.                
  23.                 if(x<0)
  24.                         sop("你丫不懂秒数是正整数么?如:13,67,16等");
  25.                 else if(x>=daytime){
  26.                         day=x/daytime;
  27.                         if(day!=0)
  28.                                 sop("总秒数"+x+"秒对应的时间为:\n"+day+"天");
  29.                         hour=(x%daytime)/hourtime;
  30.                         if(hour!=0)
  31.                                 sop(hour+"小时");
  32.                         min=(x%hourtime)/mintime;
  33.                         if(min!=0)
  34.                                 sop(min+"分");
  35.                         s=x%mintime;
  36.                         if(s!=0)
  37.                                 sop(s+"秒");
  38. //发现不合乎要求:sop("对应的时间为:\n"+day+"天"+hour+"小时"+min+"分"+s+"秒");
  39.                 }
  40.                 else if(x>=hourtime){
  41.                         hour=(x%daytime)/hourtime;
  42.                         if(hour!=0)//为了避免出现如0分的情况
  43.                                 sop("总秒数"+x+"秒对应的时间为:\n"+hour+"小时");
  44.                         min=(x%hourtime)/mintime;
  45.                         if(min!=0)
  46.                                 sop(min+"分");
  47.                         s=x%mintime;
  48.                         if(s!=0)
  49.                                 sop(s+"秒");
  50.                 }
  51.                 else if(x>=mintime){
  52.                         min=(x%hourtime)/mintime;
  53.                         if(min!=0)
  54.                                 sop("总秒数"+x+"秒对应的时间为:\n"+min+"分");
  55.                         s=x%mintime;
  56.                         if(s!=0)
  57.                                 sop(s+"秒");
  58.                 }else {
  59.                         s=x%mintime;
  60.                         if(s!=0)
  61.                                 sop("总秒数"+x+"秒对应的时间为:\n"+s+"秒");
  62.                 }                       
  63.         }       
  64. }
复制代码

作者: 青岛_黑马    时间: 2015-2-6 12:34
class Test1
{
        public static void main(String[] args)
        {
                Scanner sc =new Scanner(System.in);//创建对象
                int x =sc.nextInt();//x为接受的数字
                if(x<0)
                        System.out.println("输入错误");
                if (0<=x&&x<60)
                {
                        System.out.println(x+"秒");
                }
                if (60<=x&&x<3600)
                {
                        System.out.println(x/60+"分"+x%60+"秒");
                }
                if (3600<=x&&x<86400)
                {
                        System.out.println(x/3600+"时"+x%3600/60+"分"+x%3600%60+"秒");
                }
                if (86400<=x)
                {
                        System.out.println(x/86400+"天"+x%84600/3600+"时"+x%86400%3600/60+"分"+x%86400%3600%60+"秒");

                }
               
        }
}  这样做也对吧?
作者: 少年闰土    时间: 2015-6-6 19:22
import java.util.Scanner;

/*
题目3:从键盘接受一个数字,打印该数字表示的时间,最大单位到天,例如:
键盘输入6,打印6秒;
键盘输入60,打印1分;
键盘输入66,打印1分6秒;
键盘输入666,打印11分6秒;
键盘输入3601,打印1小时1秒
*/

public class Test_3 {
        //将一分钟换算成秒
        static final  int MINUTE = 60;
        //将小时换算成秒
        static final int HOUR = MINUTE * 60;
        //将一天换算成秒
        static final int DAY = HOUR * 12;
       
        public static void main(String[] args) {
                int number = 0;

                number = getNumber();
                printTime(number);
        }
       
        public static int getNumber() {
                int number = 0;
                Scanner input = new Scanner(System.in);
                System.out.println("please input a number:");
                number = input.nextInt();
                input.close();
               
                return number;
        }
       
        public static void printTime(int number) {
                //时间大于一天
                if (number >= DAY) {
                        int numDay = number / DAY; //获得天数
                        number = number % DAY; //剩下不足一天的秒数
                        System.out.print(numDay + "天");
                }
               
                //时间大于一小时
                if (number >= HOUR) {
                        int numDay = number / HOUR; //获得小时数
                        number = number % HOUR; //剩下不足一小时的秒数
                        System.out.print(numDay + "小时");
                }
               
                //时间大于一分钟
                if (number >= MINUTE) {
                        int numDay = number / MINUTE; //获得分钟数
                        number = number % MINUTE; //剩下不足一分钟
                        System.out.print(numDay + "分");
                }
               
                if (number != 0) {
                        System.out.println(number + "秒");
                }
        }

}


作者: 林以    时间: 2015-12-8 20:38
很牛逼




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2