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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© MR.Sun 中级黑马   /  2014-10-3 22:03  /  3294 人查看  /  34 人回复  /   3 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
3、 从键盘接受一个数字,打印该数字表示的时间,最大单位到天,例如:
                键盘输入6,打印6秒;
                键盘输入60,打印1分;
                键盘输入66,打印1分6秒;
                键盘输入666,打印11分6秒;
                键盘输入3601,打印1小时1秒
*/    不知道有没有更简单的方法。。。目测现在才学完函数。。。。
import java.util.*;
class  Test
{
        public static final int SECOND_MINUTE=60;                                        //一分钟的秒数
        public static final int SECOND_HOUR=3600;                                        //一小时的秒数
        public static final int SECOND_DAY=86400;                                //        一天的秒数
        public static void main(String[] args)
        {
                Scanner sc=new Scanner(System.in);
                sop("请输入一个数字:");
                int time=sc.nextInt();
                sop(style(time));
        }

        public static void sop(String str)
        {
                System.out.println(str);
        }
        //总体函数
        public static String style(int time)
        {
                        String str;
                        if (time>=0&&time<SECOND_MINUTE)
                        {
                                        str=time+"秒";
                        }
                        else if (time>=SECOND_MINUTE&&time<SECOND_HOUR)
                        {
                                str=styleMinute(time);        //当在这个范围的时候,就调用分钟格式!
                        }
                        else if (time>=SECOND_HOUR&&time<SECOND_DAY)
                        {
                                str=styleHour(time);                        //当time的值在这个范围的时候就调用小时的格式!
                        }
                        else if (time>=SECOND_DAY)
                        {
                                str=styleDay(time);                        //当time 的值大于SECOND_DAY的时候,就开始调用天的格式!
                        }
                        else
                        {
                                str="超过规定数值,无法计算!";
                        }
                                return str;
        }
        //分钟格式!
        public static String  styleMinute(int time)
        {
                        int minute,second;
                        minute=time/SECOND_MINUTE;
                        second=time%SECOND_MINUTE;
                        if (second==0)
                        {
                                return second+"秒";
                        }
                                else
                        {
                                return minute+"分"+second+"秒";
                        }
        }
        //小时的格式!
        public static String styleHour(int time)
        {
                int hour,second;
                second=time%SECOND_HOUR;
                hour=time/SECOND_HOUR;
                if (second==0)
                {
                        return hour+"小时";
                }
                else
                {
                        return hour+"小时"+style(second);
                }
        }
        //天的格式!
        public static String styleDay(int time)
        {
                int day,hour,minute,second;
                second=time%SECOND_DAY;
                day=time/SECOND_DAY;
                if (second==0)
                {
                        return day+"天";
                }
                else
                {
                        return day+"天"+style(second);
                }
        }
}       

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1 赞一个!

查看全部评分

34 个回复

倒序浏览
/*
3、 从键盘接受一个数字,打印该数字表示的时间,最大单位到天,例如:
                键盘输入6,打印6秒;
                键盘输入60,打印1分;
                键盘输入66,打印1分6秒;
                键盘输入666,打印11分6秒;
                键盘输入3601,打印1小时1秒
*/   
import java.util.Scanner;
class  Test
{
                public static void main(String[] args)
                {
                        int d,h,min,s;
                        Scanner sc = new Scanner(System.in);
                        int num = sc.nextInt();
                       
        /*此算法效率不高,因为每次都要算天数,如果输入的秒数小于86400(一天的秒数)
                实际上可以不用算天数,算小时也是一样的.请楼主自己改进.

                其实,本题目的思想很简单,就比如给你一个3位数,怎么得到它的百位,十位和个位上的数字.

                想要得到百位上的数,就要除以100,十位上的数就是这个数减去百位乘以100再除以10.余数就是个位.
        */
                        d=num/(60*60*24);//除以一天的秒数得到天数.
                        h=(num-d*(60*60*24))/(60*60);//减去d天的秒数,再除以3600s得到小时数.
                        min=(num-d*(60*60*24)-h*(60*60))/60;//减去前面的天和小时,得到分钟数.
                        s=num%60;//对60取摸,可以直接得到秒数.

                        if(d!=0)
                                System.out.println(d+"天"+h+"小时"+min+"分"+s+"秒");
                        else if(d==0&&h!=0)
                                System.out.println(h+"小时"+min+"分"+s+"秒");
                        else if(d==0&&h==0)
                                System.out.println(min+"分"+s+"秒");
                        else
                                System.out.println(s+"秒");                       
         }
}

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1

查看全部评分

回复 使用道具 举报
写的好细
回复 使用道具 举报
import java.util.Scanner;
public class Test_01 {

        public static void main(String[] args) {
               
       Scanner input=new Scanner(System.in);
       System.out.println("Please input a Integer: ");
       int in=input.nextInt();
       if(in>=0)
       {
               printTime(in);
       }
       else
       {
               System.out.println("Please make the number positive");
       }
      
        }
         static void printTime(int in)
         {
                 int hours=in/3600;
                 int minutes=in/60;
                 int seconds=in%60;   //特别需要注意的是,用户输入3600,要排除输出为1小时60分钟的情况
                 if(hours>0)          //基本思路是,当小时不为0时,要对分钟取余,当分钟不为0时,要对秒取余
                 {
                         if((minutes%60)>0)
                         {
                                 if(seconds>0)
                                 {
                                     System.out.println(hours+"小时"+minutes+"分钟"+seconds+"秒");     
                                 }
                                 else
                                 {
                                         System.out.println(hours+"小时"+minutes+"分钟");
                                 }
                         }
                         else
                         {

                                 if(seconds>0)
                                 {
                                     System.out.println(hours+"小时"+seconds+"秒");     
                                 }
                                 else
                                 {
                                         System.out.println(hours+"小时");
                                 }
                         }
                 }
                 else
                 {
                         if(minutes>0)
                         {
                                 if(seconds>0)
                                 {
                                     System.out.println(minutes+"分钟"+seconds+"秒");     
                                 }
                                 else
                                 {
                                         System.out.println(minutes+"分钟");
                                 }
                     }
                         else
                         {
                                 System.out.println(seconds+"秒");
                         }
             }
         }
}
小弟有简单方法,基本是C语言的逻辑,但是没有考虑到天数

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1

查看全部评分

回复 使用道具 举报
很难啊!:handshake
回复 使用道具 举报
受教了!!!
回复 使用道具 举报
受益颇多呀。
回复 使用道具 举报
  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.                     //获取天数。
  16.                 temp=num%86400;
  17.                 time[1]=temp/3600;
  18.                         //获取小时数。
  19.                 temp=temp%3600;
  20.                 time[2]=temp/60;
  21.                         //获取分钟数。
  22.                 time[3]=temp%60;
  23.                         //获取秒数。
  24.                 for (int i=0;i<4 ;i++ )
  25.                 {
  26.                         if(i!=3&&time[i]==0)
  27.                                 //除了0秒,其他单位上数值是0的时候不打印该单位。
  28.                                 continue;
  29.                         System.out.print(time[i]+unit[i]);
  30.                 }
  31.         }
  32. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1

查看全部评分

回复 使用道具 举报
有点高深
回复 使用道具 举报
学习学习!
回复 使用道具 举报
#include<iostream>
using namespace std;

void main()
{
        int a[4]={0};
        int i,j=0;
       
        while(cin>>i)     //计算时间
        {
                j=0;
    a[0]=i;
        while(j<3)
        {
                if(j==2)
                {
                        a[j+1]= a[j]/24;
                        a[j]  = a[j]%24;
                }
                else
                {
                        a[j+1]= a[j]/60;
                        a[j]  = a[j]%60;
                }
                j++;
        }

        for(i=3;i>=0;i--)     //输出
        {
                if(a[i]!=0)
                {
               
                        cout<<a[i];
                        switch(i)
                        {
                        case 0:
                                        cout<<"秒";
                                        break;
                        case 1:
                                cout<<"分";
                                break;
                        case 2:
                                cout<<"时";
                                break;
                        case 3:
                                cout<<"天";
                                break;
                        }
                }

        }
        cout<<endl;
        memset(a,0,sizeof(a));
        }
}

用c++写了个。试试玩玩。没有优化的
回复 使用道具 举报
鲁行 发表于 2014-10-3 22:58
/*
3、 从键盘接受一个数字,打印该数字表示的时间,最大单位到天,例如:
                键盘输入6,打 ...

厉害。。真是多谢了啊。。。。
回复 使用道具 举报
hollywood2014 发表于 2014-10-3 23:25
import java.util.Scanner;
public class Test_01 {

多谢多谢。。
回复 使用道具 举报
大神都蛮给力的
回复 使用道具 举报
8楼的不错
回复 使用道具 举报
Scanner sc=new Scanner(System.in);
我想问一下,Scanner是在哪里学到的,我现在完全没印象了,求楼主告诉我一声
回复 使用道具 举报
马嘉 发表于 2014-10-5 16:04
Scanner sc=new Scanner(System.in);
我想问一下,Scanner是在哪里学到的,我现在完全没印象了,求楼主告诉 ...

我一个朋友在传智上过基础班,我看的视频就是他们上课的时候录得,那上面有这个。目前也只知道这个从键盘输入的方式。:lol
回复 使用道具 举报
这个不是基础测试的题吗
回复 使用道具 举报
mudao 中级黑马 2014-10-5 23:29:49
19#
可以看懂,感觉不难。不过要写起来就没有楼主的条理清晰了!
回复 使用道具 举报
MR.Sun 发表于 2014-10-5 21:58
我一个朋友在传智上过基础班,我看的视频就是他们上课的时候录得,那上面有这个。目前也只知道这个从键盘 ...

好的。谢谢你
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马