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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 陈兆辉 于 2014-9-21 20:58 编辑
  1. package com.itheima;

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

  5. /*第三题:
  6. * 从键盘接受一个数字,打印该数字表示的时间,最大单位到天,例如:
  7.         键盘输入6,打印6秒;
  8.         键盘输入60,打印1分;
  9.         键盘输入66,打印1分6秒;
  10.         键盘输入666,打印11分6秒;
  11.         键盘输入3601,打印1小时1秒
  12.         */
  13. public class Test3 {
  14.         //写完才发现写的麻烦了,请见谅!
  15.         //定义三个常量分别代表最大的秒,分,小时表示的数的上限。由于这是测试,就不单独建立一个Constants类了。
  16.         private static final int MAXSECONDS = 60;
  17.         private static final int MAXMINUTES = MAXSECONDS*60;
  18.         private static final int MAXHOURS = MAXMINUTES*24;

  19.         public static void main(String[] args) {
  20.                 //定义一个流对象,读取键盘的录入的字符。会有安全问题:用户输入的不是数字。所以要进行安全检查
  21.                 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  22.                 String buf = null;
  23.                 //读取键盘录入的一行数据
  24.                 try {
  25.                         buf = reader.readLine();                        
  26.                 } catch (IOException e) {
  27.                         e.printStackTrace();
  28.                 }
  29.                 //安全检查,是否含有非法字符
  30.                 if (!buf.matches("[0-9]|[1-9][0-9]+")){
  31.                         throw new RuntimeException("含有非法字符");
  32.                 }        
  33.                 //转成int类型并传入printFormatTime方法中
  34.                 int num = Integer.parseInt(buf);
  35.                 printFomatTime(num);
  36.         }
  37.         
  38.         private static String retSeconds(int num){
  39.                 //为了防止出现类似1分0秒的结果,进行一次判断。
  40.                 if(num==0)
  41.                         return "";
  42.                 return num+"秒";
  43.         }
  44.         
  45.         private static String retMinutes(int num){
  46.                 if(num==0)
  47.                         return "";
  48.                 //num小于最大秒数,则直接传入retSecond(),不判断会出现如0分50秒的错误打印结果
  49.                 if(num<MAXSECONDS)
  50.                         return retSeconds(num);
  51.                 //记录总的分钟数以及剩余秒数,将剩余秒数传入retSecond()
  52.                 int minutes = num/60;
  53.                 int secondsArg = num-minutes*MAXSECONDS;
  54.                 return minutes+"分"+retSeconds(secondsArg);
  55.         }
  56.         
  57.         private static String retHours(int num){
  58.                 if(num==0)
  59.                         return "";
  60.                 if(num<MAXMINUTES)
  61.                         return retMinutes(num);
  62.                 //记录总的分钟数、小时数,将剩余秒数传入retMinutes()
  63.                 int minutes = num/60;
  64.                 int hours = minutes/60;
  65.                 int minutesArgs = num-hours*MAXMINUTES;
  66.                 return hours+"小时"+retMinutes(minutesArgs);
  67.         }
  68.         
  69.         private static void printFomatTime(int num){
  70.                 //防止用户输入0时返回一个"",给人程序没有任何操作的错觉
  71.                 if(num==0){
  72.                         System.out.println("0秒");
  73.                         return;
  74.                 }
  75.                 if(num<MAXHOURS){
  76.                         System.out.println(retHours(num));
  77.                         return;
  78.                 }
  79.                 //记录总的分钟数、小时数、,将剩余秒数传入retMinutes()
  80.                 int minutes = num/60;
  81.                 int hours = minutes/60;
  82.                 int days = hours/24;
  83.                 int hoursArg = num-days*MAXHOURS;
  84.                 System.out.println(days+"天"+retHours(hoursArg));
  85.         }
  86. }
复制代码
看题的时候脑残了,后面发现直接if判断就完了。不错,我就是来混分的,早就答应我的帮我要亲友券的朋友传来消息说要不到了,看着我几十页的手写的笔记,唉,我真的醉了……

31 个回复

倒序浏览
自己顶!
回复 使用道具 举报
本帖最后由 杜工 于 2014-9-19 17:08 编辑

你这写的也太麻烦了吧.
回复 使用道具 举报
杜工 发表于 2014-9-19 16:58
你这写的也太麻烦了吧。发下我写的。

对啊对啊,我也是写着写着才想起来的,直接if判断就完了,简单很多呢,不过写都写了,就干脆写完了算了。

点评

。。。额,,我也醉了,这  发表于 2014-9-19 20:14
回复 使用道具 举报
不系之舟王 来自手机 中级黑马 2014-9-19 21:55:28
报纸
我也抽到这道题了,不过我用的最简单最基础的if语句做的,键盘输入用的Scanner
回复 使用道具 举报
不是可以买到嘛...刚买了个- -.
回复 使用道具 举报
帮顶一下吧
回复 使用道具 举报
noiary 发表于 2014-9-19 22:01
不是可以买到嘛...刚买了个- -.

我前几天刚注册的号,前面因为朋友打包票说可以有的,我就没怎么上论坛。现在一看120黑马币,唉,不说了,都是泪啊
回复 使用道具 举报
能写出来能运行出结果就好,不用太在意细节,有时候有思路有时候没思路这也没个准儿
回复 使用道具 举报
已经做完了,属于发表感应!提问者在问题已解决的情况下,提问者没有结贴,扣除技术分1分。所以感言贴跟提问贴区分开来,你这里发的是提问贴。。。
回复 使用道具 举报
F@C 中级黑马 2014-9-20 15:19:03
11#
进来学习一下
回复 使用道具 举报
舍我其谁 发表于 2014-9-20 14:13
已经做完了,属于发表感应!提问者在问题已解决的情况下,提问者没有结贴,扣除技术分1分。所以感言贴跟提 ...

小弟初来乍到,请见谅。以后会注意的。谢谢!
回复 使用道具 举报
☆枫の云 发表于 2014-9-20 13:52
能写出来能运行出结果就好,不用太在意细节,有时候有思路有时候没思路这也没个准儿 ...

嗯,有理!
回复 使用道具 举报
我也做过这道题    不过你做的确实有点长
回复 使用道具 举报
noiary 发表于 2014-9-19 22:01
不是可以买到嘛...刚买了个- -.

大哥,我这两天才注的号。120黑马币,您是随意了,对我来说还遥远着呢。
回复 使用道具 举报
敏敏好学 发表于 2014-9-20 17:26
我也做过这道题    不过你做的确实有点长

着实是有点长啊!
回复 使用道具 举报
这写的太复杂了
回复 使用道具 举报
是有点写的复杂了。。。。。。
回复 使用道具 举报
陈兆辉 发表于 2014-9-20 17:28
大哥,我这两天才注的号。120黑马币,您是随意了,对我来说还遥远着呢。 ...

每天10分  10天应该还来得及 {:3_57:}

点评

兄弟,你都是每天怎么刷分的?给小弟传授一下呗?  发表于 2014-9-20 20:44
回复 使用道具 举报
noiary 发表于 2014-9-20 19:35
每天10分  10天应该还来得及

每天登陆拿1饭呢

评论5条拿5分,有时候能多拿两分?  不过第二天不能一次性5分了好像..一直混乱中,

发两个帖子,拿4分.  

具体没研究过规律,基本每天能拿到10分,偶尔帖子被好心管理员看中会加技术分..

有时候也被土豪送分- -.

点评

果然有经验→_→我也来伸手拿下金币  发表于 2014-9-20 23:35
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马