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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

hollywood2014 发表于 2014-10-3 23:25
import java.util.Scanner;
public class Test_01 {

大哥你能告诉我Scanner您是从视频中学到的吗
回复 使用道具 举报
package review;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/*
* 从键盘接受一个数字,打印该数字表示的时间,最大单位到天,例如:
                键盘输入6,打印6秒;
                键盘输入60,打印1分;
                键盘输入66,打印1分6秒;
                键盘输入666,打印11分6秒;
                键盘输入3601,打印1小时1秒
* */
public class Text01 {
        public static void main(String[] args) {
                BufferedReader buf=
                                new BufferedReader(new InputStreamReader(System.in));
                String str=null;
                try {
                        while((str=buf.readLine())!=null)
                        {
                                if(str.matches("\\d+"))
                                {
                                        count(str);
                                }
                                else{
                                        System.out.println("输入非法,请输入数字!谢谢");
                                        System.exit(0);
                                }
                        }
                } catch (IOException e) {
                        e.printStackTrace();
                }
               
        }

        private static void count(String str) {
               
                if(str.length()<19)
                {
                        long x=Long.parseLong(str);
                        if(x<3600)
                                System.out.println(miao(x));
                        else if(x>=3600&&x<86400)
                        {
                                System.out.println(shi(x));
                        }
                        else if(x>=86400)
                        {
                                 System.out.println(tian(x));
                        }
                }
                else{
                        System.out.println("数过大!");
                        System.exit(0);
                }
               
        }
       
       
       
        public static String miao(long x){
                if(x<60)
                        return x+"秒!";
                else if(x>=60&&x<3600)
                {
                        if(x%60==0)
                                return x/60+"分!";
                        else
                        {
                                int y=(int)x/60;
                                return y+"分"+(x-y*60)+"秒!";
                        }
                }
                return null;
        }
       
        public static String shi(long x )
        {
                if(x%3600==0)
                        return x/3600+"小时!";
                else if(x<3600)
                        return miao(x);
                else
                {
                        long y=(long)x/3600;
                        long k=x-y*3600;
                        return y+"小时"+miao(k);
                }
        }
       
        public static String tian(long x )
        {
                if(x%86400==0)
                        return x/86400+"天!";
                else {
                        long y=(long)x/86400;
                        long k=x-y*86400;
                        return y+"天"+shi(k);
                }
        }
       
       
}
回复 使用道具 举报
没优化 ,楼主可以再优化下
回复 使用道具 举报
鲁行 发表于 2014-10-3 22:58
/*
3、 从键盘接受一个数字,打印该数字表示的时间,最大单位到天,例如:
                键盘输入6,打 ...

你的程序。。。。其实有点不符合题目要求。。。。。如果出现3601秒的时候  应该就会输出1小时0分1秒,这个0分时不允许出现的。你的这种想法开始我也想到过。  你可以运行的看一下。
回复 使用道具 举报
hollywood2014 发表于 2014-10-3 23:25
import java.util.Scanner;
public class Test_01 {

唉,你跟楼上那位兄弟一样的错误,你的程序也是不符合要求的。。。当3601秒的时候 输出的是1小时0分1秒。。这个0分是不允许出现的。。。
回复 使用道具 举报
MR.Sun 发表于 2014-10-6 21:27
你的程序。。。。其实有点不符合题目要求。。。。。如果出现3601秒的时候  应该就会输出1小时0分1秒,这 ...

你可以加几个判断就行了,只要有0的就不输出,就可以了
回复 使用道具 举报

这位兄弟,貌似回复代码的几个人中  就你的符合要求。。。厉害!
回复 使用道具 举报
MR.Sun 发表于 2014-10-6 21:27
你的程序。。。。其实有点不符合题目要求。。。。。如果出现3601秒的时候  应该就会输出1小时0分1秒,这 ...

你可以加几个判断就行了,只要有0的就不输出,就可以了如:
if(d!=0)
System.out.print(d+"t天");
if(h!=0)
System.out.print(h+"小时");
if(min!=0)
System.out.print(min+"分");
if(s!=0)
System.out.print(s+"秒");
这样就可以了,这个过程可以优化.
回复 使用道具 举报
鲁行 发表于 2014-10-6 21:34
你可以加几个判断就行了,只要有0的就不输出,就可以了如:
if(d!=0)
System.out.print(d+"t天");

我看了下8楼那位兄弟写的,还不错。不过还是谢谢你了。:lol
回复 使用道具 举报
马嘉 发表于 2014-10-6 08:20
大哥你能告诉我Scanner您是从视频中学到的吗

这个.....我还有其他学习资料,不过这不是重点吧,仅仅就是获取键盘输入
回复 使用道具 举报
MR.Sun 发表于 2014-10-6 21:30
唉,你跟楼上那位兄弟一样的错误,你的程序也是不符合要求的。。。当3601秒的时候 输出的是1小时0分1秒。 ...

我的输出没有0分吧,我刚刚试了
回复 使用道具 举报
好吧,我抄了8楼和一楼的代码,综合了一个比较清晰的代码,相对的简洁一些
import java.util.*;

class  Demo4
{
        public static void main(String[] args)
        {
                Scanner scanner=new Scanner(System.in);
                int getNum=scanner.nextInt();
                System.out.println(printTime(getNum));
        }

        public static String printTime(int time){
                char[] chinese={'天','时','分','秒'};
                int[] timeNum=new int[4];

                //获得天时分秒的数据
                timeNum[0]=time/(60*60*24);
                timeNum[1]=time%(60*60*24)/(60*60);
                timeNum[2]=time%(60*60*24)%(60*60)/60;
                timeNum[3]=time%(60*60*24)%(60*60)%60;

                String printStr="";
                for(int i=0;i<4;i++){
                        if(timeNum[i]!=0){
                                printStr=printStr+timeNum[i]+chinese[i];
                        }
                }
                return printStr;
        }
}

回复 使用道具 举报

大神,那个代码块的样式是怎么贴上去的,是论坛里直接有的设置还是怎样?
回复 使用道具 举报
hollywood2014 发表于 2014-10-6 22:07
我的输出没有0分吧,我刚刚试了

不好意思啊,可能我编译的时候编译错了 文件。。。。是的 你的是符合要求的。。。。没有出现零分的情况,相比起来 你们的代码都比我的要简单,8#那位的最精简。你们都太猛了。。。让我感到压力山大啊。。。
回复 使用道具 举报
。。。。。。。。。。。。。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马