2013-05-30 4 views
0

Я пишу программу Java, где мне нужно увеличить час и минуту на 1 и вывести текущее время в формате ЧЧ: ММ. Если час равен 23, он должен вернуться к 0 или минута 59 минут, чтобы перейти к 0, и часы должны перейти к следующему часу. Это то, что я до сих пор, однако я не совсем уверен, что это правильно. Я также не уверен, что это правильный способ сделать время показанным: между часами и минутами. Вот мой код:Распечатка времени в формате ЧЧ: ММ

//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

Если это ** НЕ ** домашнее задание, вы можете просто используйте [API календаря Java] (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. Когда я запускаю программу, чтобы сделать мое время (которое я установил в 11:30), это выглядит «11:30 TimeOfDay @ b6e0054». Какая вторая строка и как я могу заставить ее исчезнуть? или это часть программы BlueJ? Еще раз благодарю вас за помощь! –

+0

1) «% 02d:% 02d% n» - это строка формата для функции printf. % 02d означает: печатать первый arg как десятичный с шириной = 2 с добавлением 0s, если необходимо ...% b означает новую строку, см. Java.util.Formatter API для деталей. 2) Дополнительная строка происходит из другого места в вашей программе. –

+0

Дополнительная строка выглядит так: вы вызываете 'System.out.println()' и передаете ему экземпляр объекта 'TimeOfDay'. Он печатает значение, возвращаемое 'TimeOfDay.toString()'. – jahroy

2

Вы можете использовать встроенный в Calendar класса java.util для достижения этой цели. С add(field, value) вы можете увеличить час, и календарь позаботится о перерыве.

Для получения формата ЧЧ: ММ вы можете использовать SimpleDateFormat с рисунком «ЧЧ: мм».

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

Есть уже библиотек, чтобы сделать вид работы для вас, таких как Calender и JodaTime. Последнее делает этот вид работы особенно легким. Один класс 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); 
} 

Или, если вы хотите, чтобы вернуть String (которые могут быть напечатаны в другом месте) она будет выглядеть следующим образом:

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

Это не имеет никакого смысла чтобы этот метод возвращал int.

Он должен вернуть void, если вы хотите его распечатать.

Он должен вернуть String, если вы хотите, чтобы он вернулся .... Строка.


Я просто прочитал комментарии в вашем коде ..., в которых упоминаются требования, не включенные в ваш вопрос.

Поскольку вам нужно прокладывать часы и минуты (если их меньше 10), вам нужно добавить еще несколько логик.

Я лично использую String.format() для прокладки ваши номера ...

Но .... Поскольку это домашнее задание, вы, вероятно, не предполагается.

Я хотел бы создать два простых метода:

  1. getHourString()
  2. getMinuteString()

Оба должны вернуться строк.

Логика внутри каждого метода будет очень простой. Someething так:

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

Смежные вопросы