黑马程序员技术交流社区

标题: 请问以下代码怎么优化?看起来好多重复的,就是想不出来怎么优化,各位帮忙看看。 [打印本页]

作者: 蒙鹏飞    时间: 2014-6-19 10:13
标题: 请问以下代码怎么优化?看起来好多重复的,就是想不出来怎么优化,各位帮忙看看。

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

  8. */

  9. class PrintTime
  10. {
  11.         public static void sop(int s)
  12.         {
  13.                 if(s<0)
  14.                         System.out.print("非法值");
  15.                 if(s>=(60*60*24))
  16.                 {
  17.                         int a = 0;
  18.                         a = s/(60*60*24);
  19.                         s = s - (a*(60*60*24));
  20.                         System.out.print(a+"天");
  21.                 }

  22.                 if(s>=(60*60))
  23.                 {
  24.                         int a = 0;
  25.                         a = s/(60*60);
  26.                         s = s - (a*(60*60));
  27.                         System.out.print(a+"小时");
  28.                 }

  29.                 if(s>=60)
  30.                 {
  31.                         int a = 0;
  32.                         a = s/60;
  33.                         s = s - (a*60);
  34.                         System.out.print(a+"分");
  35.                 }

  36.                 if(s>0)
  37.                 {
  38.                         System.out.print(s+"秒");
  39.                 }
  40.         }
  41. }


  42. class  Test1
  43. {
  44.         public static void main(String[] args)
  45.         {
  46.                 PrintTime pt = new PrintTime();

  47.                 pt.sop(86400);
  48.         }
  49. }
复制代码

作者: 牛兴亮    时间: 2014-6-19 11:37
string showTime,GetS,GetM,GetH,GetD;

GetS=s%60+"秒";
s=s/60;
GetM= s%60+"分";
s=s/60;
GetH=s%24+"时";
s=s/24;
GetD=s+"天";

showTime +=(GetD!="天")? GetD:"";
showTime +=(GetH!="时")? GetH:"";
showTime +=(GetM!="分")? GetM:"";
showTime +=(GetS!="秒")? GetS:"";

System.out.print(showTime);
作者: 鲍云龙    时间: 2014-6-19 11:38
本帖最后由 鲍云龙 于 2014-6-19 11:59 编辑
  1. class PrintTime {
  2.         private static final int DAY_SECS = 60 * 60 * 24;// 每天的秒数
  3.         private static final int HOUR_SECS = 60 * 60;// 每小时的秒数
  4.         private static final int MINUTE_SECS = 60;// 每分的秒数

  5.         public void sop(int secs) {
  6.                 if(secs<=0){
  7.                         System.out.print("非法值");
  8.                 }
  9.                 int d,h,m,s;
  10.                 d = secs / DAY_SECS;
  11.                 h = (secs % DAY_SECS) / HOUR_SECS;
  12.                 m = secs % HOUR_SECS / MINUTE_SECS;
  13.                 s = secs % MINUTE_SECS;

  14.                 if (d != 0) {
  15.                         System.out.print(d + "天");
  16.                 }
  17.                 if (h != 0) {
  18.                         System.out.print(h + "时");

  19.                 }
  20.                 if (m != 0) {
  21.                         System.out.print(m + "分");
  22.                 }
  23.                 if (s != 0) {
  24.                         System.out.print(s + "秒");
  25.                 }
  26.         }
  27. }

  28. class Test1 {
  29.         public static void main(String[] args) {
  30.                 PrintTime pt = new PrintTime();
  31.                 pt.sop(86400);
  32.         }

  33. }
复制代码

作者: 3盐酸1硝酸    时间: 2014-6-19 12:22
public static void sop(int s)
        {
                        if(s<0)
                                System.out.print("非法值");
                        int day,hours,minutes, seconds;
                               
                        day= s>=(60*60*24)?s/(60*60*24):0;//得到天数

                        s=s - (day*(60*60*24));
                       
                        seconds=s%(60);//得到秒,s-seconds 肯定能被60整除 方便计算分钟和小时

                        hours= s>=(60*60)?(s-seconds)/(60*60):0;//得到小时  

                        minutes=s>60?((s-seconds)/(60))%60:0;//得到分钟  

                        System.out.print(day+"天"+hours+"小时"+minutes+"分钟"+seconds+"秒");

        }
不知道这样行不

作者: 蒙鹏飞    时间: 2014-6-19 13:01
牛兴亮 发表于 2014-6-19 11:37
string showTime,GetS,GetM,GetH,GetD;

GetS=s%60+"秒";

你这是。太高深了完全看不懂。。
作者: 蒙鹏飞    时间: 2014-6-19 13:51
鲍云龙 发表于 2014-6-19 11:38

Ok。谢谢了
作者: 郑飞    时间: 2014-6-19 14:05
我基础题也遇到这题了....还在研究中
作者: 客剑    时间: 2014-6-20 20:43
一样一样的,编程挺简单,但是 “从键盘输入一个数字 ”这句怎么解???在DOS命令行输入还是如楼主一样直接赋值给它啊
作者: 客剑    时间: 2014-6-20 20:52
3盐酸1硝酸 发表于 2014-6-19 12:22
public static void sop(int s)
        {
                        if(s=(60*60*24)?s/(60*60*24):0;//得到天数

你也太直了吧,真是怎么想怎么写呀,重复算这么多次,不麻烦吗,二楼的哥们代码多简练,判断非法值后还继续下面的计算吗?要加else,再继续下去吧
作者: Aron    时间: 2014-6-21 00:11
过来逛逛
作者: 蒙鹏飞    时间: 2014-6-26 09:03
感谢版主,基础题竟然也得技术分。。:handshake




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