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 个回复

正序浏览
自己也学着写了几句代码
  1. public static void main(String[] args) {
  2.                 while (true) {
  3.                         try {
  4.                                 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
  5.                                 System.out.print(">>");
  6.                                 int var = new Integer(bufferedReader.readLine());
  7.                                 int t1 = var / 60;
  8.                                 int t2 = var % 60;
  9.                                 if (t1 < 60 && t1 > 0) {
  10.                                         System.out.print(t1 + "分");
  11.                                 } else if (t1 >= 60) {
  12.                                         System.out.print(t1 / 60 + "小时");
  13.                                 }
  14.                                 if (t2 != 0) {
  15.                                         System.out.print(t2 + "秒");
  16.                                 }
  17.                                 System.out.println();
  18.                         } catch (Exception e) {
  19.                                 e.printStackTrace();
  20.                         }
  21.                 }
  22.         }
复制代码
回复 使用道具 举报
学习了              
回复 使用道具 举报
w239983684 来自手机 中级黑马 2015-2-28 21:10:38
25#
支持楼主的学习态度。
回复 使用道具 举报
  1. public class Test2 {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                 //提示用户输入
  8.         System.out.println("请输入你想要转换的秒数(必须为大于0的整数)");
  9.         //定义一个字符读取缓冲流
  10.                 BufferedReader bufr=null;
  11.                         try{
  12.                                 //读取键盘输入
  13.                                 bufr=new BufferedReader(new InputStreamReader(System.in));
  14.                                 String line=null;
  15.                                 //定义要转换的秒数的变量
  16.                                 int seconds=0;
  17.                                 //如果用户输入的值不符合int整数,则循环读取直到符合规则
  18.                                 while((line=bufr.readLine())!=null){
  19.                                         try{
  20.                                                 //如果不能转为int,则抛出NumberFormatException异常
  21.                                                 seconds=Integer.parseInt(line);
  22.                                                 //catch异常
  23.                                         }catch(Exception e){
  24.                                                 System.out.println("请按要求输入");
  25.                                                 //回到循环开始,重新等待用户输入
  26.                                                 continue;
  27.                                         }break;
  28.                                         //调用toDays方法获取要打印的字符串
  29.                                 }System.out.println(toDays(seconds));
  30.                         }catch(IOException e){
  31.                                 System.out.println(e.toString());
  32.                                 //关闭流
  33.                         }finally{
  34.                                 if(bufr!=null)
  35.                                         try{
  36.                                                 bufr.close();
  37.                                         }catch(IOException e){
  38.                                                 System.out.println(e.toString());
  39.                                         }
  40.                         }
  41.                         //实现将秒数转换为×天×时×分×秒格式
  42.         }public static String toDays(int seconds){
  43.                 //定义存储天,时,分,秒的int变量
  44.                 int day;
  45.                 int hour;
  46.                 int min;
  47.                 int second;
  48.                 //定义显示天,时,分,秒的字符串变量
  49.                 String daystr="";
  50.                 String hourstr="";
  51.                 String minstr="";
  52.                 String secondstr="";
  53.                 min=seconds/60;
  54.                 if(min>0){
  55.                         second=seconds%60;
  56.                         secondstr=second+"秒";
  57.                         hour=min/60;
  58.                         min=min%60;
  59.                         minstr=min+"分";
  60.                         if(hour>0){
  61.                                 day=hour/24;
  62.                                 hour=hour%24;
  63.                                 hourstr=hour+"时";
  64.                                 if(day>0){
  65.                                         daystr=day+"天";
  66.                                 }
  67.                         }
  68.                 }return daystr+hourstr+minstr+secondstr;
  69.         }
  70. }
复制代码

我也想了蛮久的
回复 使用道具 举报
听说利用字符串表示要简单点,你可以试一下
回复 使用道具 举报
这是最简单的,但代码太多了,
回复 使用道具 举报
学习一下
回复 使用道具 举报
yueye13 来自手机 中级黑马 2015-1-21 21:46:37
20#
多回问题多发帖子:handshake:handshake:handshake
回复 使用道具 举报

谢谢。代码的意思我明白了,比我那个简洁的多更易读。要满足需求还得加判断只输出不为0的结果。赞
回复 使用道具 举报
xiao飞 发表于 2015-1-21 21:24
回了快两个月论坛,而且好多活动都参加了的 ,能不多嘛,而且每天必逛论坛 ...

你的经验已被我吸收!。
回复 使用道具 举报
w13832027 发表于 2015-1-21 19:05
我更关心你的技术分怎么这么多,而等级却不高。。。

回了快两个月论坛,而且好多活动都参加了的 ,能不多嘛,而且每天必逛论坛
回复 使用道具 举报
  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
xiao飞 发表于 2015-1-21 18:19
大牛啊,你能写成这样,真不知道你当时思维能力有多强

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

我更关心你的技术分怎么这么多,而等级却不高。。。
回复 使用道具 举报
我纠结的是这种测试题的完成要求是什么?
我用最基础的if结构可以实现,虽然有很多缺点比如维护啊易读啊之类的。。那这到底算不算合格呢?
还是说必须要像楼上那位大神的方式才行呢?
回复 使用道具 举报
大牛啊,你能写成这样,真不知道你当时思维能力有多强
回复 使用道具 举报
邓士林 发表于 2015-1-21 16:47
  •      int second = num % 60;
  •                 num = num / 60;
  •                 int min = num  ...

  • 额。。我写的代码中只以秒为单位,怕混淆了。一天就是86400秒。。。
    回复 使用道具 举报
    •      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小时吧!

    回复 使用道具 举报
    那就继续学,学得多了,就不会有这么多行
    回复 使用道具 举报
    12下一页
    您需要登录后才可以回帖 登录 | 加入黑马