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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Sevenette 中级黑马   /  2014-5-19 14:02  /  1804 人查看  /  8 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Sevenette 于 2014-5-19 19:00 编辑

从键盘接受一个数字,打印该数字表示的时间,最大单位到天,例如:
               
                键盘输入6,打印6秒;
                键盘输入60,打印1分;
                键盘输入66,打印1分6秒;
                键盘输入666,打印11分6秒;
                键盘输入3601,打印1小时1秒


从键盘接收数字后 getTime()函数一直都没执行的样子... 经验欠缺,实在没找出原因,求大神帮忙解决


int i = 0;
while(time>0){
     if(time/list>0){
     sb.append(time/list+name);
     time -= time/list*list;
}
↑↑↑改前的代码:if判断语句不正确改成time/list!=0;while循环改成 i<4    循环中加入i++;
time -= time/list*list;改成 time = time%list;
问题已解决~ 修改后代码如下,依旧感觉自己代码写的好奇葩...QAQ

  1. package com.itheima;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;

  5. public class Test {
  6.         public static void main(String[] args) throws IOException {
  7.                
  8.                 System.out.println("请输入时间秒数:");
  9.                 //从键盘读取数字
  10.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  11.         int time = Integer.parseInt(br.readLine());

  12.         //处理数字
  13.                 getTime(time);
  14.                         
  15.                 }
  16. public static void getTime(int time) {
  17.                
  18.                 StringBuffer sb = new StringBuffer();
  19.                
  20.                 //创建数组记录换算单位
  21.                 int[] list = {86400,3600,60,1};
  22.                 String[] name = {"天","小时","分","秒"};
  23.                
  24.                 //while循环4次
  25.                 int i = 0;
  26.                
  27.                 while(i<4){
  28.                         if(time/list[i]!=0){
  29.                                 
  30.                                 sb.append(time/list[i]+name[i]);
  31.                                 
  32.                                 time = time%list[i];
  33.                         }
  34.                         i++;
  35.                 }
  36.                
  37.                 System.out.println(sb.toString());
  38.         }
  39. }
复制代码



8 个回复

倒序浏览
if(time/list[i]>0),这句有问题,你在while外面定义了,int i=0.,所以你的这个if判断的结果都会小于零,除非你的输入time大于86400,。

感觉这个地方不应该用除法,而是用取余数运算符%

点评

3Q~~ 我再去看看^^  发表于 2014-5-19 18:30

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 波涛 于 2014-5-19 17:18 编辑
  1. import java.io.*;
  2. public class Demo {
  3.        public static void main(String[] args)throws IOException {
  4.                    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  5.                    System.out.println("请输入时间");
  6.                    String in = br.readLine();     
  7.                    System.out.println(showTime((Integer.parseInt(in))));
  8.      }
  9.       public static String showTime(int time){
  10.                     int day = 0, hour = 0, min = 0 , second = 0;
  11.      
  12.                    int DAY_miao=86400;//一天(24小时)总共秒数
  13.                    int HOUR_miao=3600;//一小时秒数
  14.                    int MIN_miao=60;//一分钟秒数
  15.      
  16.                   day = time / (DAY_miao);
  17.                   hour = (time-(day*DAY_miao))/HOUR_miao;
  18.                   min = (time-(day*DAY_miao+hour*HOUR_miao))/MIN_miao;
  19.                   second = time-(day*DAY_miao+hour*HOUR_miao+min*MIN_miao);
  20.      
  21.                   return day+"天"+hour+"小时"+min+"分钟"+second+"秒";
  22.      }
  23. }
复制代码

点评

谢谢~  发表于 2014-5-19 18:46

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
徘徊消逝中 发表于 2014-5-19 15:34
if(time/list>0),这句有问题,你在while外面定义了,int i=0.,所以你的这个if判断的结果都会小于零,除非 ...

{:3_51:} 哈哈 搞定了~ 把循环那里改了下
  1. int i = 0;
  2.                 while(i<4){
  3.                         if(time/list[i]!=0){
  4.                                 sb.append(time/list[i]+name[i]);
  5.                                 time = time%list[i];
  6.                         }
  7.                         i++;
  8.                 }
复制代码



评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
我好想记得,以前在写单片机的万年历的时候,时间都是这样处理的:
time/(3600*24) = 天;
time%(3600*24)/3600 = 时;
time%(3600*24)%3600/60 = 分;
time%(3600*24)%3600%60 = 秒
我没去测试了,你看看吧

回复 使用道具 举报 1 0
不错 顶一下
回复 使用道具 举报

这个方法思路好!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马