2013-05-30 163 views
0

我正在编写一个Java程序,我需要将小时和分钟增加1,并以HH:MM格式输出当前时间。如果小时为23,则应该回到0或者分钟是59,分钟应该为0,小时应该到下一小时。这是我到目前为止,但我不完全确定它是正确的。我也不确定这是否是使时间以小时和分钟之间出现的正确方式。这里是我的代码:以HH:MM格式打印时间

//TimeOfDay program 

public class TimeOfDay 
{ 

    private int hour; 
    private int minute; 


    /** 
    * Constructor for objects of class TimeOfDay 
    */ 
    public TimeOfDay(int h, int m) 
    { 
     setHr(h); 
     setMin(m); 
    String time = "17:46"; 
    String [] values = time.split(":"); 

    } 

    public TimeOfDay() 
    { 

    } 




    /** 
    - set the hour using an input parameter h 
    - set the minute using an input parameter m 
    - add one hour (increase hour by 1) 
    - add one minute (increase minute by 1) 
    - output the current time in HH:MM format 
     (single digit hour or minute must have a leading 0, e.g. 04:09) 
    */ 


    public void setHr (int h) 
    { 
     if (0 <= h && h < 23) 
     hour = h; 
     else 
     hour = 0; 
    } 

    public void setMin (int m) 
    { 
     if (0 <= m && m < 59) 
     minute = m; 
     else 
     minute = 0; 
    } 

    public void addHour() 
    { 
     hour++; 

     if (hour > 23) 
     hour = 0; 
    } 

    public void addMinute() 
    { 
     minute++; 

     if (minute > 59) 
     { 
      minute = 0; 
      addHour(); //increment hour 
     } 
    } 

    public int printCurrentTime() 
    { 
     if (hour < 10) 
     System.out.print("0" + hour + ":"); 

     if (minute < 10) 
     System.out.print("0" + minute); 

     return time.split; 


    } 
} 
+0

如果这是** **不做作业,你可以只需使用[Java日历API](http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html)为您执行所有操作。 – jahroy

回答

1

我会改变printCurrentTime()

public int printCurrentTime() { 
    System.out.printf("%02d:%02d%n", hour, minute); 
    return hour * 60 + minute; 
} 

的代码的其余部分似乎OK

+0

谢谢!这真的有帮助。只有两个问题: 1.你能解释一下这个部分的含义:“%02d:%02d%n”? 2.当我运行程序来使mytime(我设置为11:30)出现时,会出现“11:30 TimeOfDay @ b6e0054”第二行是什么,我如何让它消失?或者是BlueJ程序的这一部分? 再次感谢您的帮助! –

+0

1)“%02d:%02d%n”是printf函数的格式字符串。 %02d表示:将第一个arg打印为带宽度= 2的小数,如果需要填充,则为0;%b表示换行,详情请参阅java.util.Formatter API。 2)额外的行来自程序中的其他地方。 –

+0

额外的行看起来像是在调用'System.out.println()'并将'TimeOfDay'对象的实例传递给它。它打印'TimeOfDay.toString()'返回的值。 – jahroy

2

您可以使用内置的java.utilCalendar类来实现这一点。通过add(field, value),您可以增加小时数,而日历会保留日期分隔。

要获得HH:MM格式,您可以使用SimpleDateFormat,格式为“HH:mm”。

Calendar c = Calendar.getInstance(); //automatically set to current time 
c.add(Calendar.HOUR, 1); 

SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm"); 
System.out.println(dateFormat.format(c.getTime())); 
3

已经有图书馆做的工作类型为你如CalenderJodaTime。后者使这类工作特别容易。单一类LocalTime可以管理添加和格式化:

LocalTime localTime = new LocalTime("17:46"); 
LocalTime newTime = localTime.plusHours(1).plusMinutes(1); 
System.out.println(newTime.toString("HH:mm")); 
2

这显然是家庭作业,所以我不会打扰推荐一个库,会为你做到这一点。

您的代码看起来不错,但您的printCurrentTime()方法除外,这是没有意义的。

所有这种方法应该做的是从小时和分钟建立一个字符串。

它应该是这个简单:

public void printCurrentTime() { 
    System.out.println(hour + ":" + minute); 
} 

或者,如果你希望它返回一个字符串(可以在别处打印),它是这样的:

public String toString() { 
    return hour + ":" + minute; 
} 

这是没有意义让该方法返回一个int。如果您想打印它应该返回void

它应该返回String如果你想它返回....一个字符串。


我刚刚通过您的代码中的评论...其中提到不包括在您的问题中的要求。

由于您需要填充小时和分钟(当它们小于10时),因此您需要添加更多逻辑。

我会亲自使用String.format()垫你的号码...

但是....因为这是家庭作业,你可能不应该。

我将创建两个简单的方法:

  1. getHourString()
  2. getMinuteString()

双方应返回字符串。

每种方法内部的逻辑将非常简单。如下所示:

private String getHourString() { 
    String h = ""; 
    if (hour < 10) { 
     h = "0"; 
    } 
    return h + hour; 
} 

您可以对getMinuteString()做同样的事情。

您的printCurrentTime()方法可以将这些方法的输出结合起来(中间有一个:)。

换句话说:

public void printCurrentTime() { 
    String s = getHourString() + ":" + getMinuteString(); 
    System.out.println(s); 
} 
+0

是的,它是功课。那是我遇到的主要部分。是否可以使用公共字符串tostring代码?例如,如果我创建一个名为mytime的对象,并将mytime设置为11:30,并且我希望它显示mytime,那么我会使用public String toString(11,30)还是public String toString(mytime)? –

+0

在我看来,这是完全可以接受的。这正是我所要做的:我会实现_toString()_因此它返回格式化的时间。我在这个网站上看到有人抱怨说,重写'toString()'这样的做法是不好的做法...但是我没有看到有任何令人信服的理由同意它们。 – jahroy

+0

这里是[一篇文章](http://www.javapractices.com/topic/TopicAction.do?Id=55),它重申了在你自己的类中重写'toString()'的最佳实践的一些理论。这里是[一个答案](http://stackoverflow.com/a/11659528/778118)一个有知识的用户建议'toString()'方法应该只用于调试。无论哪种方式......你想做的事情对于家庭作业来说当然没问题! – jahroy