黑马程序员技术交流社区

标题: 这是入学基础测试写的,各位觉得还可以优化么 [打印本页]

作者: hainanlxk    时间: 2015-10-26 21:26
标题: 这是入学基础测试写的,各位觉得还可以优化么
package com.itheima;
import java.util.Scanner;
class Text3_1{
        /*
         * 3、 从键盘接受一个数字,打印该数字表示的时间,最大单位到天,例如:
                 键盘输入6,打印6秒;
                 键盘输入60,打印1分;
                 键盘输入66,打印1分6秒;
                 键盘输入666,打印11分6秒;
                 键盘输入3601,打印1小时1秒
         */
        // 分析:键盘输入的数字单位为秒,逢60进1为分,再逢60进1为小时,再逢24进1为天,天为最大单位。
        static void setN(){
                int time = getNum(); //判断并得到键盘输入的数字
                outTime(time); //输出时间
                /*boolean flag=true;
                while(flag){
                        if(flag)
                        {
                                int time = getNum(); //判断并得到键盘输入的数字
                                outTime(time); //输出时间
                        }
                       
               System.out.println("是否需要继续输入打印的数:是请输入-1,推出请输入-2");
                        Scanner m=new Scanner(System.in);
                        int n=m.nextInt();
                        if(n==-1)
                                flag=true;
                        else
                            break;
                               
                }*/
                                 
        }
                   
       
        private static int getNum() {
               
                boolean judge = true;                               //定义一个Boolean类型的值来判断输入值的合法性
                int result = 0;                                      //定义输入值的初值
                while (judge) {
                        Scanner scan = new Scanner(System.in);           //键盘输入
                        System.out.println("输入一个大于0的整数:");
                        try {
                                result = Integer.parseInt(scan.nextLine());  //将键盘输入的值赋给result
                                if (result < 0) {                            //判断result是否小于0,小于0则重新输入
                                        throw new Exception("输入的值必须大于0,请从新输入");
                                }
                                judge = false;                      //输入的数符合要求则跳出循环,进行转换计算
                        } catch (Exception e) {
                                System.out.println("输入值非法,请从新输入");  //输入值非法则需要从新输入
                        }
                }
                return result;
        }

        private static void outTime(int time) {
                int s = 0,m = 0,h = 0, d = 0;                      //定义秒、分、时和天的初值
                if (time<0)
                        return;
                if (time<60) {          //输入值小于一分钟
                        s = time;
                } else if (time>=60&&time<60*60) {  //输入值小于一小时
                        m = time/60;
                        s = time%60;
                } else if (time>=60*60&&time<24*60*60) {    //输入值小于一天
                        h = time/(60*60);
                        m = time%(60*60)/60;
                        s = time%(60*60)%60;
                } else {                  //输入值大于一天
                        d = time/(24*60*60);
                        h = time%(24*60*60)/(60*60);
                        m = time % (24*60*60)%(60*60)/60;
                        s = time % (24*60*60) % (60*60) % 60;
                }
                out(d, h, m, s);          //获得转换后的天数、小时、分钟和秒数的值然后将其传出
        }

        private static void out(int d, int h, int m, int s) {    //判断为0的秒数、分钟、小时、天数不输出  
                String str = "";
                if (d != 0) {
                        str += d + "天";
                }
                if (h != 0) {
                        str += h + "小时";
                }
                if (m != 0) {
                        str += m + "分钟";
                }
                if (s != 0) {
                        str += s + "秒";
                }
                System.out.println(str);       //输出最终结果
        }
       
}

class Text3_2{
        //求斐波那契数列第n项,n<30,斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55
        /*分析
     * 1.获得用户的输入
     * 2.计算
     * 3.打印就行了。
     *
     */
       
        public static void setfs()
        {
               
            int m = 0 ; //用来接收用户要求的项数     
            //接受用户的输入
            m = getN();
            Print(m);
        }

    static void Print(int m)
    {
            int X = 1;
            int Y = 1;
            int Z= 0;
            if(m==1||m==2)
        {
            System.out.println("你要求斐波那契数列第"+m+"列的值为:->1");
        }
        else
        {
            // 计算N>2的项的斐波那契数列的值
            for (int i = 1; i <=m-2; i++)
            {
                //用最简单的算法实现。
                Z = X+Y;
                X = Y;
                Y = Z;
            }
            System.out.println("你要求斐波那契数列第"+m+"列的值为->"+Z);
        }

    }

private static int getN()
{
    int n;
    System.out.println("提示:请输入求斐波那契数列第n项的值。");   
    Scanner sc = new Scanner(System.in);
    //让用户反复输入。直到输入成功为止
    while (!sc.hasNextInt()|| (n=sc.nextInt())>=30)
    {

            System.out.println("输入错误:请输入求斐波那契数列小于第30项的正整数。");
            sc = new Scanner(System.in);   
            n=sc.nextInt();
    }   
    return n;

}
}
public class Text3 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                boolean flage=true;
                while(flage)
                {
                       
                   System.out.println("需求1、 从键盘接受一个数字,打印该数字表示的时间,最大单位到天");
                   System.out.println("需求2、求斐波那契数列第n项,n<30");
                   System.out.println("请输入1或者2");
                   Scanner sc = new Scanner(System.in);
                   int n=sc.nextInt();
                   switch(n)
                   {
                     case 1:
                           Text3_1.setN();
                           break;
                     case 2:
                           Text3_2.setfs();
                           break;
                         default:
                                 System.out.println("输入的不是1或者2,结束");                               
                   }
                   System.out.println("继续请输入0,否请按任意键");
                   n=sc.nextInt();
                   if(n==0)
                           flage=true;
                   else
                           break;
                }
       
        }

       
}







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2