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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 焚雨成灰 于 2014-3-13 20:34 编辑

题目如下:
在程序中,经常要对时间进行操作,但是并没有时间类型的数据。那么,我们可以自己实现一个时间类,来满足程序中的需要。
定义名为MyTime的类,其中应有三个整型成员:时(hour),分(minute),秒(second),为了保证数据的安全性,这三个成员变量应声明为私有。
MyTime类定义构造方法,以方便创建对象时初始化成员变量。
再定义diaplay方法,用于将时间信息打印出来。
MyTime类添加以下方法:
addSecond(intsec)
addMinute(intmin)
addHour(inthou)
subSecond(intsec)
subMinute(intmin)
subHour(inthou)
分别对时、分、秒进行加减运算。

为什么说它看似简单:
1.如果现在是0时0分59秒,那么加1秒,秒位会清0;如果加20000秒,秒位分位时位都要考虑
2.减时间那块如果现在是0时5分0秒,如果减60秒,分位减1;减61秒,分位减2。
3.只能用最基础的语法做
请问这道题该怎么搞?
PS:我上课去了,晚上再回来看;

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

5 个回复

倒序浏览
这个与你的要求虽然不一样,但是功能都是一样的。。。
  1. import java.util.Calendar;
  2. import java.util.Date;


  3. public class Test {

  4.         public static void main(String[] args) {
  5.                 // TODO Auto-generated method stub
  6.                 MyTime my=new MyTime();
  7. //                my.addHour(0);
  8.                 my.addSecond(2000);
  9.                 my.display();
  10.         }

  11. }

  12. class MyTime{
  13.         private Calendar c=Calendar.getInstance();
  14.        
  15.         public MyTime() {
  16.                 c.setTime(new Date());
  17.         }
  18.        
  19.         public MyTime(int hour,int minute,int second){
  20.                 c.set(Calendar.HOUR, hour);
  21.                 c.set(Calendar.MINUTE, minute);
  22.                 c.set(Calendar.SECOND, second);
  23.                
  24.         }

  25.         public void addHour(int hour){
  26.                 c.add(Calendar.HOUR,hour);
  27.         }
  28.        
  29.         public Calendar addMinute(int minute){
  30.                 c.add(Calendar.MINUTE, minute);
  31.                 return c;
  32.         }
  33.        
  34.         public Calendar addSecond(int second){
  35.                 c.add(Calendar.SECOND,second);
  36.                 return c;
  37.         }
  38.        
  39.         public void display(){
  40.                 String hour,min,sec;
  41.                 if(c.get(Calendar.HOUR)<10)
  42.                         hour="0"+c.get(Calendar.HOUR);
  43.                 else
  44.                         hour=c.get(Calendar.HOUR)+"";
  45.                 if(c.get(Calendar.MINUTE)<10)
  46.                          min="0"+c.get(Calendar.MINUTE);
  47.                 else
  48.                         min=c.get(Calendar.MINUTE)+"";
  49.                 if(c.get(Calendar.SECOND)<10)
  50.                         sec="0"+c.get(Calendar.SECOND);
  51.                 else
  52.                         sec=c.get(Calendar.SECOND)+"";
  53.                 System.out
  54.                                 .println("现在的时间是:" + hour + ":" +min + ":" + sec);
  55.                
  56.         }
  57. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
  1. public class TimeTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 //定义一个MyTime类型的对象
  6.                 MyTime mt=new MyTime(8,12,53);
  7.                 //调用增加秒数的方法
  8.                 mt.addSecond(10568);
  9.                 mt.display();
  10.                 //调用按秒数减少时间的方法
  11.                 mt.subSecond(72600);
  12.                 mt.display();
  13.                 //调用按小时减少时间的方法
  14.                 mt.subHour(14);
  15.                 mt.display();
  16.                 //调用按分钟减少时间的方法
  17.                 mt.subMinute(1556);
  18.                 mt.display();
  19.                 //调用按分钟增加时间的方法
  20.                 mt.addMinute(12046);
  21.                 mt.display();
  22.                 //调用按小时增加时间的方法
  23.                 mt.addHour(546);
  24.                 //打印输出时间
  25.                 mt.display();
  26.         }
  27. }

  28. class MyTime
  29. {
  30.         //定义私有字段用以保存时分秒。
  31.         private int second;
  32.         private int minute;
  33.         private int hour;
  34.         //定义无参构造器
  35.         public MyTime()
  36.         {
  37.                
  38.         }
  39.         //定义有参构造器,并初始化私有变量
  40.         public MyTime(int hour,int minute,int second)
  41.         {
  42.                 this.second=second;
  43.                 this.minute=minute;
  44.                 this.hour=hour;
  45.         }
  46.         //按秒增加时间的方法
  47.         public void addSecond(int sec)
  48.         {
  49.                 //定义局部变量s用以保存提供的整数可转化为的秒数。
  50.                 int s=sec%60;
  51.                 //定义局部变量m用以保存提供的整数可转化为的分钟数。
  52.                 int m=sec/60;
  53.                 //如果秒数增加后大于等于60,则对其取余,并增加分钟的值。
  54.                 if((second+=s)>=60)
  55.                 {
  56.                         second%=60;
  57.                         minute+=1;
  58.                 }
  59.                 //调用方法,计算增加后分钟的值。
  60.                 addMinute(m);
  61.         }
  62.         //按分钟增加时间的方法。
  63.         public void addMinute(int min)
  64.         {
  65.                 int m=min%60;
  66.                 int h=min/60;
  67.                 //当分钟增加后大于等于60,则对其取余,并增加小时的值。
  68.                 if((minute+=m)>=60)
  69.                 {
  70.                         minute%=60;
  71.                         hour+=1;
  72.                 }
  73.                 //调用方法,来计算增加后小时的值。
  74.                 addHour(h);
  75.         }
  76.         //按小时增加时间的方法。
  77.         public void addHour(int h)
  78.         {
  79.                 //当小时大于24小时时,对其取余。
  80.                 if((hour+=h)>=24)
  81.                 {
  82.                         hour%=24;
  83.                 }
  84.         }
  85.         //按秒数减少时间的方法。
  86.         public void subSecond(int sec)
  87.         {
  88.                 int s=sec%60;
  89.                 int m=sec/60;
  90.                 //如果需要减少的秒数大于当前秒数,则向分钟借一分即60秒
  91.                 if(s>second)
  92.                 {
  93.                         second=second-s+60;
  94.                         minute-=1;
  95.                 }//小于则直接减
  96.                 else
  97.                 {
  98.                         second-=s;
  99.                 }       
  100.                 //调用方法,用以计算需要减少的分钟。       
  101.                 subMinute(m);
  102.         }
  103.         //按分钟减少时间的方法
  104.         public void subMinute(int min)
  105.         {
  106.                 int m=min%60;
  107.                 int h=min/60;
  108.                 //如果当前分钟小于需要减少的分钟数
  109.                 if(minute-m<0)
  110.                 {
  111.                         //对需要减少的分钟数取余
  112.                         int m2=m%60;
  113.                         //如果仍大于当前的分钟则向小时位借1即60分。
  114.                         if(m2>minute)
  115.                         {
  116.                                 minute=minute-m2+60;
  117.                                 hour-=1;
  118.                         }//如果不大于,则进行正常减。
  119.                         else
  120.                         {
  121.                                 minute-=m2;
  122.                         }
  123.                 }
  124.                 else
  125.                 {
  126.                         minute-=m;
  127.                 }
  128.                 //调用方法,计算需要减少的小时
  129.                 subHour(h);
  130.         }
  131.         //按小时减少时间的方法。
  132.         public void subHour(int hr)
  133.         {
  134.                 int h=hr%24;
  135.                 //如果当前小时小于需要减少的小时,则向天借1即24天
  136.                 if(h>hour)
  137.                 {
  138.                         hour=hour-h+24;
  139.                 }//不大于正常减
  140.                 else
  141.                 {
  142.                         hour-=h;
  143.                 }
  144.         }
  145.         //打印输出时间
  146.         public void display()
  147.         {
  148.                 System.out.println("现在时间是:"+(hour>=10?hour:("0"+hour))+"时"+

  149. (minute>=10?minute:("0"+minute))+"分"+(second>=10?second:("0"+second))+"秒");
  150.         }       
  151. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
我只做了加法,减法你自己试着做吧,效果是你想要的
  1. import java.util.Scanner;

  2. public class MyTime {

  3.         int oh;
  4.         int om;
  5.         int os;
  6.         public MyTime(int oh, int om, int os) {
  7.                 this.oh = oh;
  8.                 this.om = om;
  9.                 this.os = os;
  10.         }
  11.         public void addHour(int h) {
  12.                 oh = oh + h;
  13.         }
  14.         public void addMinute(int m) {
  15.                 om = om + m;
  16.         }
  17.         public void addSecond(int s) {
  18.                 os = os + s;
  19.         }
  20.         public void showTime() {
  21.                 int time = oh * 3600 + om * 60 + os;
  22.                 int h = time / 3600 % 24;
  23.                 int m = time % 3600 / 60;
  24.                 int s = time % 3600 % 60;
  25.                 System.out.println("现在时间是" + h + "小时" + m + "分钟" + s + "秒");
  26.         }
  27.         public static void main(String[] args) {
  28.                 Scanner sc = new Scanner(System.in);
  29.                 System.out.println("请输入小时:");
  30.                 int h1 = sc.nextInt();
  31.                 System.out.println("请输入分钟:");
  32.                 int m1 = sc.nextInt();
  33.                 System.out.println("请输入秒:");
  34.                 int s1 = sc.nextInt();

  35.                 MyTime t1 = new MyTime(h1, m1, s1);// 初始化时间
  36.                 t1.showTime();// 显示时间
  37.                 System.out.println("请输入要增加的小时:");
  38.                 h1 = sc.nextInt();
  39.                 t1.addHour(h1);// 加一小时
  40.                 t1.showTime();
  41.                 System.out.println("要增加的分钟:");
  42.                 m1 = sc.nextInt();
  43.                 t1.addMinute(m1);// 加10分钟
  44.                 t1.showTime();
  45.                 System.out.println("要增加的秒数:");
  46.                 s1 = sc.nextInt();
  47.                 t1.addSecond(s1);// 加60秒
  48.                 t1.showTime();
  49.         }

  50. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
定义一个枚举
  1. public enum Time {
  2.         HOUR(0,null),MINUTE(0,"HOUR"),SECOND(0,"MINUTE");
  3.         //记录数值
  4.         private int number;
  5.         //记录进位或者借位的名字
  6.         private String next;
  7.         private Time(int number,String next){
  8.                 this.next=next;
  9.                 this.number=number;
  10.         }
  11.         public int getNumber(){
  12.                 return this.number;
  13.         }
  14.         public void setTime(int number){
  15.                 this.number+=number;
  16.                 //如果减去的值太大 掏出异常
  17.                 if(this.number<0&&this.name().equals("HOUR")){
  18.                    throw new RuntimeException("减去的值太大");
  19.                    }
  20.                 //如果下一个不为空 则 向下个节位 或近位
  21.                 if(this.next!=null){
  22.                         int flag=this.number;
  23.                         //小于0的话借位 大于0的话进位
  24.                         if(flag<0){
  25.                                 this.number=flag%60+60;
  26.                                 Time.valueOf(this.next).setTime(flag/60-1);
  27.                         }else{
  28.                                 this.number%=60;
  29.                             Time.valueOf(this.next).setTime(flag/60);
  30.                         }
  31.                        
  32.                 }
  33.         }
  34. }
复制代码

MyTime类
  1. public class MyTime {
  2.         public static void main(String[] args) {
  3.                 addMinute(3);
  4.                 show();
  5.                 addSecond(-3);
  6.                 show();
  7.         }
  8.         public static void show(){
  9.                 System.out.println(Time.HOUR.getNumber()+":"
  10.                                 +Time.MINUTE.getNumber()+":"
  11.                                 +Time.SECOND.getNumber());
  12.         }
  13.         private static void addMinute(int i) {
  14.                 Time.MINUTE.setTime(i);
  15.         }

  16.         private static void addHour(int i) {
  17.                 Time.HOUR.setTime(i);
  18.         }

  19.         private static void addSecond(int i) {
  20.                 Time.SECOND.setTime(i);
  21.         }
  22. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报

好像你的比较对
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马