黑马程序员技术交流社区

标题: 入学考试编程题,自创最笨的解法。 [打印本页]

作者: 莫盛强    时间: 2015-11-14 12:23
标题: 入学考试编程题,自创最笨的解法。
题目:从键盘接受一个数字,打印该数字表示的时间,最大单位到天,例如: 键盘输入6,打印6秒; 键盘输入60,打印1分; 键盘输入66,打印1分6秒;键盘输入666,打印11分6秒; 键盘输入3601,打印1小时1秒。
解释:看的是刘意老师的视频,所以这题只能在网上找,大神们的可以理解,只是还不够深刻,但又找到毕老师在哪版第几集说的,所以就自己糊弄了一些代码。
缺点(也可以说是为了完整,不知道是否不按题意作业):输3600之后的某些数字,打印为“X小时0分X秒”,中间多了0或X分。而且代码相对大牛们的也多了点。
学习:这代码完全就是心血来潮写的,自己感觉可能会有很多BUG,望大家指教。
作者: 莫盛强    时间: 2015-11-14 12:24
  1. package Test_53;

  2. import java.util.Scanner;

  3. public class Main {
  4.         public static void main(String[] args) {
  5. //                System.out.println(60*60*24*365);
  6.                 Scanner sc = new Scanner(System.in);
  7.                 System.out.println("输入数字:");
  8.                 method(sc.nextInt());
  9.         }

  10.         private static void method(int in) {
  11.                 //定义键盘录入的字符串长度,之所以为笨方法,就是从判断输入的字符长度开始
  12.                 int index = String.valueOf(in).length();
  13.                 int num = 60;
  14.         
  15.                 //判断秒
  16.                 if (index == 1 || index == 2) {
  17.                            if(in>0 &&in < num){
  18.                                    System.out.println(in+"秒");
  19.                            }
  20.                 }
  21.                 //判断分秒
  22.                 if(index == 2 || index == 3 || index == 4){
  23.                         if(in >= num && in<num*num){
  24.                         int fen = in/num;
  25.                         int miao = in%num;
  26.                         System.out.println(fen+"分"+miao+"秒");
  27.                         }
  28.                 }
  29.                 //判断时分秒
  30.                 if(index == 4 || index == 5){
  31.                         if(in >= num*num && in<num*num*24){
  32.                                 int xs = in/(num*num);
  33.                                 int temp = in%(num*num);
  34.                                 int fen = temp/num;
  35.                                 int miao = temp%num;
  36.                                 System.out.println(xs+"小时"+fen+"分"+miao+"秒");
  37.                         }
  38.                 }
  39.             //判断天时分秒
  40.                 if(index >= 5 && index <= 8){
  41.                         if(in >=num*num*24 && in <= num*num*24*365){
  42.                                 int tian = in/(num*num*24);
  43.                                 int temp1 = in%(num*num*24);
  44.                                 int xs = temp1/(num*num);
  45.                                 int temp = in%(num*num);
  46.                                 int fen = temp/num;
  47.                                 int miao = temp%num;
  48.                                 System.out.println(tian+"天"+xs+"小时"+fen+"分"+miao+"秒");
  49.                         }
  50.                 }
  51.         }
  52. }
复制代码

作者: 海狮    时间: 2015-11-14 12:59
简单问题复杂化了
作者: 莫盛强    时间: 2015-11-14 17:27
海狮 发表于 2015-11-14 12:59
简单问题复杂化了

我也不懂当时为什么想到还要加字符串长度校验!
作者: dongran    时间: 2015-11-14 22:54
学渣表示看不懂
作者: yubail    时间: 2015-11-14 23:26
谢谢分享
作者: 梭梭树    时间: 2015-11-14 23:27
简单问题复杂化
import java.util.Scanner;
public class Lession1 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入:");
        int i=sc.nextInt();
        if (0<=i&&i<=59){
            System.out.println(i+"秒");
        }else if (60<=i&&i<3600){
            int x=i/60;
            int y=i%60;
            System.out.println(x+"分"+y+"秒");
        }else if (3600<=i&&i<86400){
            int x=i/3600;
            int y=i%3600/60;
            int z=i%60;
            System.out.println(x+"时"+y+"分"+z+"秒");
        }else if (86400<=i&&i<31536000){
            int x=i/86400;
            int y=i%86400/3600;
            int z=i%86400%3600/60;
            int m=i%60;
            System.out.println(x+"天"+y+"时"+z+"分"+m+"秒");
        }else {
            System.out.println("输入格式错误");
        }
    }
}

作者: 1158147908    时间: 2015-12-7 23:33
这是我的代码
import java.util.InputMismatchException;
import java.util.Scanner;

/**
*
* 第二题 从键盘接受一个数字,打印该数字表示的时间,最大单位到天,例如: 键盘输入6,打印6秒; 键盘输入60,打印1分; 键盘输入66,打印1分6秒;
* 键盘输入666,打印11分6秒; 键盘输入3601,打印1小时1秒
*
*/
public class Test2 {
        @SuppressWarnings("resource")
        public static void main(String args[]) throws Exception {
                // 从键盘输入一个整数
                Scanner scanner = new Scanner(System.in);
                System.out.println("请输入一个整数");
                int number = 0;
                try {// 从键盘输入一个整数
                        number = scanner.nextInt();

                        // 将接收到的数据除以相应的数值,换算成相应的天、时、分、秒
                        int day = number / 3600 / 24;
                        int hours = (number - 3600 * 24 * day) / 3600;
                        int second = (number - 3600 * 24 * day - hours * 3600) / 60;
                        int minute = (number - 3600 * 24 * day - hours * 3600 - second * 60);

                        // 判断天、时、分、秒是否大于0,大于0则输出
                        if (day > 0)
                                System.out.print(day + "天");
                        if (hours > 0)
                                System.out.print(hours + "时");
                        if (second > 0)
                                System.out.print(second + "分");
                        if (minute > 0)
                                System.out.print(minute + "秒");
                } catch (InputMismatchException e) {
                        // 抛出相应的输入数据类型异常
                        throw new InputMismatchException("请输入一个整数");
                }

                scanner.close();
        }
}

作者: 海划时代    时间: 2015-12-8 10:38
楼上的思路很好 赞一个
作者: 龙sama    时间: 2015-12-8 20:44
数字除以3600的整数是小时 取模3600得到不够小时的
再除以60得到分钟 取模60得到不够分钟的(也就是多少秒)

作者: 王晓亮    时间: 2015-12-8 20:55
!!!!!!!
作者: 八宝    时间: 2015-12-8 22:34
学习啦




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