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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package com.itheima;
  2. /*
  3. *  从键盘接受一个数字,打印该数字表示的时间,最大单位到天,例如:

  4.         键盘输入6,打印6秒;       
  5.         键盘输入60,打印1分;
  6.         键盘输入66,打印1分6秒;
  7.         键盘输入666,打印11分6秒;
  8.         键盘输入3601,打印1小时1秒
  9. */
  10. /*
  11. * 思路:1.声明扫描仪用于接收用户输入的数字,2.利用if语句来判断用户输入的数据,根据公式运算后打印结果并满足需求。
  12. *                 3.使用"取余%"和"除/"来计算,并且程序中仅以秒为单位。4.使用for循环实现让用户自由选择是否继续运行程序,使程序更加人性化。
  13.         需要用到的数据;60秒为1分,3600秒为1小时,86400秒为1天。
  14. */

  15. import java.util.Scanner;        //导入一个扫描仪,用于实现程序与用户的互动。
  16. public class Test4 {
  17.         public static void main(String[] args){       
  18.                 Scanner in=new Scanner(System.in);         //声明一个扫描仪,创建对象in。
  19.                 for(int a=1;;a++){                //为避免测试时不断的运行,所以采用了for循环来实现自由退出和继续。
  20.                         System.out.println("请输入需要转换的秒数");        //与用户互动,提示输入。
  21.                         int num=in.nextInt();                //接受用户所输入的数据。
  22.                         if(num<60){                                        //判断用户输入的数据,此程序中只以秒为单位。
  23.                                 System.out.println(num+"秒");
  24.                         }
  25.                         else if(num>=60&&num<3600){               
  26.                                 System.out.println(num/60+"分"+num%60+"秒");       
  27.                                 //根据公式计算,60秒为1分,3600秒为1小时,86400秒为1天
  28.                         }
  29.                         else if(num>=3600&&num<86400){               
  30.                                         if(num%3600/60==0){                //此语句用于实现需求,只打印不为0的数据。
  31.                                                 System.out.println(num/3600+"小时"+num%3600%60+"秒");
  32.                                 }
  33.                                 else if(num%3600%60==0){        //此语句用于实现需求,只打印不为0的数据。
  34.                                                 System.out.println(num/3600+"小时"+num%3600/60+"分");
  35.                                 }
  36.                                 else{
  37.                                                 System.out.println(num/3600+"小时"+num%3600/60+"分"+num%3600%60+"秒");
  38.                                 }
  39.                         }
  40.                         else if(num>=86400){
  41.                                 if(num%86400/3600==0){                //此语句用于实现需求,只打印不为0的数据。
  42.                                                 System.out.println(num/86400+"天"+num%86400%3600/60+"分"+num%86400%60+"秒");
  43.                                 }
  44.                                 else if(num%86400%3600/60==0){        //此语句用于实现需求,只打印不为0的数据。
  45.                                                 System.out.println(num/86400+"天"+num%86400/3600+"小时"+num%86400%60+"秒");
  46.                                 }
  47.                                 else if(num%86400%60==0){                //此语句用于实现需求,只打印不为0的数据。
  48.                                                 System.out.println(num/86400+"天"+num%86400/3600+"小时"+num%86400%3600/60+"分");
  49.                                 }
  50.                                 else{
  51.                                                 System.out.println(num/86400+"天"+num%86400/3600+"小时"+
  52.                                                         num%86400%3600/60+"分"+num%86400%60+"秒");
  53.                                 }
  54.                         }
  55.                                 System.out.println("想退出请输入1或者点右上角的叉,想继续请随便输入个数字");
  56.                                 int tuichu=in.nextInt();
  57.                                 if(tuichu==1){                        //此语句用于实现用户自由选择是否继续,避免反复运行的麻烦。
  58.                                         break;
  59.                                 }
  60.                 }
  61.         }
  62. <p style="line-height: 30px; text-indent: 2em;"></p><p style="line-height: 30px; text-indent: 2em;"></p><p style="line-height: 30px; text-indent: 2em;"></p><p style="line-height: 30px; text-indent: 2em;"></p><p style="line-height: 30px; text-indent: 2em;"></p><p style="line-height: 30px; text-indent: 2em;"></p><p style="line-height: 30px; text-indent: 2em;"></p><p style="line-height: 30px; text-indent: 2em;"></p>}
复制代码
觉得好繁琐。是不是有更简单的方式来实现需求呢?

26 个回复

倒序浏览
囧。没注意排版的问题。好乱。。
回复 使用道具 举报
这时那个10道题把,你写这老些,也难为你了
回复 使用道具 举报
本帖最后由 fluency 于 2015-1-21 13:34 编辑

分享个我的吧,其实这个就当是60进制24进制
  1. package com.itheima;

  2. import java.util.Scanner;

  3. /**
  4. * @author Mr
  5. * 从键盘接受一个数字,打印该数字表示的时间,最大单位到天
  6. */
  7. public class Test3 {
  8.         public static void main(String[] args) {
  9.                 System.out.println("请输入一个整数(1-" + Integer.MAX_VALUE + ")");
  10.                 Scanner scanner = new Scanner(System.in);
  11.                 int num;
  12.                 try {
  13.                         num = scanner.nextInt();
  14.                 } catch (Exception e) {
  15.                         // TODO: handle exception
  16.                         throw new RuntimeException("输入非法!");
  17.                 } finally {
  18.                         scanner.close();
  19.                 }
  20.                 if (num <= 0)
  21.                         throw new RuntimeException("输入非法!");
  22.                 System.out.println(getDate(num));

  23.         }

  24.         /**
  25.          * @param num
  26.          * 传入共计多少秒
  27.          * @return
  28.          * 根据秒数返回对应X天X小时X秒的字符串
  29.          */
  30.         public static String getDate(int num) {
  31.                
  32.                 int second = num % 60;
  33.                 num = num / 60;
  34.                 int min = num % 60;
  35.                 num = num / 60;
  36.                 int hour = num % 12;
  37.                 num = num / 12;
  38.                 int day = num;

  39.                 StringBuffer strbuf = new StringBuffer();
  40.                 if (day != 0) {
  41.                         strbuf.append(day + "天");
  42.                 }
  43.                 if (hour != 0) {
  44.                         strbuf.append(hour + "小时");
  45.                 }
  46.                 if (min != 0) {
  47.                         strbuf.append(min + "分");
  48.                 }
  49.                 if (second != 0) {
  50.                         strbuf.append(second + "秒");
  51.                 }
  52.                 return strbuf.toString();

  53.         }
  54. }
复制代码
回复 使用道具 举报
学习一下
回复 使用道具 举报
汝建国 发表于 2015-1-21 13:25
这时那个10道题把,你写这老些,也难为你了

:'(。还是太年轻了
回复 使用道具 举报
fluency 发表于 2015-1-21 13:33
分享个我的吧,其实这个就当是60进制24进制

谢了。我刚学完面向对象,后面很多还没涉及。只能用if语句慢慢推算。你这代码我就当研究材料了。。。。:victory:
回复 使用道具 举报
汝建国 发表于 2015-1-21 13:25
这时那个10道题把,你写这老些,也难为你了

学的少,就那三板斧轮着使。。
回复 使用道具 举报
那就继续学,学得多了,就不会有这么多行
回复 使用道具 举报
  •      int second = num % 60;
  •                 num = num / 60;
  •                 int min = num % 60;
  •                 num = num / 60;
  •                 int hour = num % 12;
  •                 num = num / 12;
  •                 int day = num;
也是时间之间的一个转换关系,楼主的直接用if判断,确实太繁琐,这个好点,但是num = num / 12;貌似不对吧!一天是24小时,不是12小时吧!

回复 使用道具 举报
邓士林 发表于 2015-1-21 16:47
  •      int second = num % 60;
  •                 num = num / 60;
  •                 int min = num  ...

  • 额。。我写的代码中只以秒为单位,怕混淆了。一天就是86400秒。。。
    回复 使用道具 举报
    大牛啊,你能写成这样,真不知道你当时思维能力有多强
    回复 使用道具 举报
    我纠结的是这种测试题的完成要求是什么?
    我用最基础的if结构可以实现,虽然有很多缺点比如维护啊易读啊之类的。。那这到底算不算合格呢?
    还是说必须要像楼上那位大神的方式才行呢?
    回复 使用道具 举报
    xiao飞 发表于 2015-1-21 18:19
    大牛啊,你能写成这样,真不知道你当时思维能力有多强

    我更关心你的技术分怎么这么多,而等级却不高。。。
    回复 使用道具 举报
    xiao飞 发表于 2015-1-21 18:19
    大牛啊,你能写成这样,真不知道你当时思维能力有多强

    我更关心你的技术分怎么这么多,而等级却不高。。。
    回复 使用道具 举报
    1. public static void main(String[] args) throws Exception
    2.         {
    3.                 int num=new Scanner(System.in).nextInt();
    4.                 int s=0,m=0,h=0,d=0;//个代表秒,分,时,天。
    5.                
    6.                 if(num<60)
    7.                 {
    8.                         s=num;
    9.                         num=0;
    10.                 }
    11.                 else
    12.                 {
    13.                         s=num%60;
    14.                         num=(num-s)/60;
    15.                 }
    16.                
    17.                 if(num<60)
    18.                 {
    19.                         m=num;
    20.                         num=0;
    21.                 }
    22.                 else
    23.                 {
    24.                         m=num%60;
    25.                         num=(num-m)/60;
    26.                 }
    27.                
    28.                 if(num<24)
    29.                 {
    30.                         h=num;
    31.                         num=0;
    32.                 }
    33.                 else
    34.                 {
    35.                         h=num%24;
    36.                         d=(num-h)/24;
    37.                 }
    38.                
    39.                 System.out.println(d+"天"+h+"小时"+m+"分"+s+"秒");
    40.                
    41.         }
    复制代码
    回复 使用道具 举报 1 0
    w13832027 发表于 2015-1-21 19:05
    我更关心你的技术分怎么这么多,而等级却不高。。。

    回了快两个月论坛,而且好多活动都参加了的 ,能不多嘛,而且每天必逛论坛
    回复 使用道具 举报
    xiao飞 发表于 2015-1-21 21:24
    回了快两个月论坛,而且好多活动都参加了的 ,能不多嘛,而且每天必逛论坛 ...

    你的经验已被我吸收!。
    回复 使用道具 举报

    谢谢。代码的意思我明白了,比我那个简洁的多更易读。要满足需求还得加判断只输出不为0的结果。赞
    回复 使用道具 举报
    yueye13 来自手机 中级黑马 2015-1-21 21:46:37
    20#
    多回问题多发帖子:handshake:handshake:handshake
    回复 使用道具 举报
    12下一页
    您需要登录后才可以回帖 登录 | 加入黑马