A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 烟海 于 2014-9-2 00:32 编辑

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


需求很简单,代码实现的话,其实也没太复杂,不过思路分析,以及思考的过程,还是有些麻烦的,
分享一个自己写的,认为可能最简洁的代码了,贴出来探讨下,看看有无更简洁的方法。这里考虑到了999天的情况,更多的就没考虑了。
  1. import java.util.*;
  2. public class Test3 {
  3.         public static void main(String[] args) {
  4.                 int time = new Scanner(System.in).nextInt();
  5.                 printTime(time);
  6.         }
  7.         public static void printTime(int time){
  8.                 String[] str = {"时","分","秒"};
  9.                 for (int j = 0 ,i = 3600; time>0; i/=60,j++) {
  10.                         if(time>=86400){
  11.                                 System.out.print(time/86400+"天");
  12.                                 time = time%24;
  13.                         }
  14.                         if(time>=i){
  15.                                 if(time==0){}
  16.                                 else{
  17.                                         System.out.print(time/i+str[j]);
  18.                                 }
  19.                                 time = time%i;
  20.                         }
  21.                 }
  22.         }
  23. }
复制代码






评分

参与人数 1技术分 +1 收起 理由
格子、 + 1

查看全部评分

31 个回复

正序浏览
本帖最后由 李天富 于 2014-9-7 12:11 编辑
  1. import java.util.*;
  2. class  timetest
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int time = new Scanner(System.in).nextInt();
  7.                 transTime(time);
  8.         }
  9.         public static void transTime(int num)
  10.         {
  11.                 String[] unit={"天","时","分","秒"};
  12.                 int[] time=new int[4];
  13.                 int temp=0;
  14.                 time[0]=num/86400;
  15.                 temp=num%86400;
  16.                 time[1]=temp/3600;
  17.                 temp=temp%3600;
  18.                 time[2]=temp/60;
  19.                 time[3]=temp%60;
  20.                 for (int i=0;i<4 ;i++ )
  21.                 {
  22.                         if(i!=3&&time[i]==0)
  23.                                 continue;
  24.                         System.out.print(time[i]+unit[i]);
  25.                 }
  26.         }
  27. }
复制代码
简单写了下,就是不知道对于java来说,条件判断和做除法,哪个更为简洁。
回复 使用道具 举报
许愿じ☆VE杰 来自手机 中级黑马 2014-9-7 07:57:12
31#
嗯,学习了
回复 使用道具 举报
烟海 发表于 2014-9-7 00:33
正常是三批录取。。。最近几期都是两批录取。。。。。

建议赶得上第一批录取。。确实会简单很多。。 ...

额……9月24的要是14好左右申请的话 是不是就第二三批了?
回复 使用道具 举报
大成哥 发表于 2014-9-5 09:20
哦哦 加油!一般录取分几批?有时间限制么

正常是三批录取。。。最近几期都是两批录取。。。。。

建议赶得上第一批录取。。确实会简单很多。。
回复 使用道具 举报
public class Test1 {
       
        public static int min = 60;  //1分=60秒
        public static int hour = min*60;  //1时=60分
        public static int day = hour*24; //1天=24时

        public static void main(String[] args) {
               
                        //实例化scanner
                    Scanner scan = new Scanner(System.in);
                   
                    //实例化StringBuilder,用于存储元素
                    StringBuilder sbu = new StringBuilder();
                   
                    System.out.print("请输入一个数字:");
                    //接收键盘录入,接收一个int型数字
                    int num = scan.nextInt();
           
                                    if(num/day != 0) {  //去除0
                                           
                                            sbu.append((num/day + "天"));
                                    }
                      
                        num = num%day;
                        if (num/hour != 0){
                               
                                sbu.append((num/hour + "小时"));
                        }
                        
                        num = num%hour;
                        if (num/min != 0) {
                               
                                sbu.append((num/min + "分"));
                        }
                        
                        num = num%min;
                        if (num%min != 0) {
                               
                                sbu.append(num + "秒");
                        }
                        //输出结果
                        System.out.println(sbu.toString());
                   
        }

}
回复 使用道具 举报
烟海 发表于 2014-9-2 17:25
44期。。9。9的。。。。

哦哦 加油!一般录取分几批?有时间限制么
回复 使用道具 举报
烟海 发表于 2014-9-2 11:45
那个整数转出中文显示。。。比这个还复杂挺多。。。
那一题,困扰了我将近2天的时间。。最后才用最笨的方 ...

哈,只是为了达到目的的话,我倒是写的飞快。不过没有你简洁,写的挺好的
回复 使用道具 举报
烟海 发表于 2014-9-2 22:10
但是这里面并没有用io流和data 。。。都是最简单的代码。。

那我也没看懂- -. 还没学到那里


刚刚看完异常,准备明天学package
回复 使用道具 举报
原来这样啊,不错不错
回复 使用道具 举报
noiary 发表于 2014-9-2 21:24
哈哈哈 我只会这个啊 ,  你写的那些什么System.in  什么io流 DATE神马的  我都不会 ...

但是这里面并没有用io流和data 。。。都是最简单的代码。。
回复 使用道具 举报
烟海 发表于 2014-9-2 19:14
这代码写的也太复杂了吧 。。虽然确实考虑到了各种情况。。。考虑到了年的情况。。 ...

哈哈哈 我只会这个啊 ,  你写的那些什么System.in  什么io流 DATE神马的  我都不会{:3_57:}
回复 使用道具 举报
不明觉厉
回复 使用道具 举报
安茹黑马 发表于 2014-9-2 19:35
我测试了好几遍啊,%86400没有任何问题啊,反倒是改成24会出错的,还有如果是1天整的话,因为for里面要判 ...

单纯time = 0 ,这个情况确实没考虑到。。。

但是自然情况下,会出现0秒的情况吗?

还需要多长时间能好?还需要1秒,还需要0秒??

不过也算是这个情况没考虑。
回复 使用道具 举报
安茹黑马 发表于 2014-9-2 19:35
我测试了好几遍啊,%86400没有任何问题啊,反倒是改成24会出错的,还有如果是1天整的话,因为for里面要判 ...

确实需要%86400 ,这个地方测试的时候没注意,所以这地方判断出错误了。。
回复 使用道具 举报
这个必须收藏啊
回复 使用道具 举报
烟海 发表于 2014-9-2 19:12
是%24 ,因为是天数转成小时。。。。%86400就出问题了。。。你自己测试下。。。
15行的if ,是为了判断0分 ...

我测试了好几遍啊,%86400没有任何问题啊,反倒是改成24会出错的,还有如果是1天整的话,因为for里面要判断条件的,time要大于0的,所以time如果等于0的话,根本就进不了循环体内啊,难道是我想错了??我有点怀疑我自己了
回复 使用道具 举报
安茹黑马 发表于 2014-9-2 18:02
楼主写的这个程序很精简,我当初也做了这题,我用了一大堆的if   和else  if  ,还是你这个看起来比较清爽 ...

很早就看到这一题,就想写一写了。。
只是一直没写,昨天一个同学遇到这一题。。我想想,觉得再重新写写,练练手。。
前前后后花了两个小时,写了两遍代码。。
第二遍,精简成这个样子。。。
回复 使用道具 举报
noiary 发表于 2014-9-2 14:19
你说我容易嘛~~~

这代码写的也太复杂了吧 。。虽然确实考虑到了各种情况。。。考虑到了年的情况。。
回复 使用道具 举报

求告知细节。。如何更简单的实现这一个需求?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马