2014-11-22 4 views
-2

Я создаю часы в Java. Мне удалось сделать некоторые очень простые вещи, и теперь я хочу реализовать функцию.Создание часов Java. увеличение времени

Если я установил время, то есть 12:04:59, и использую мой метод TimeTick, это увеличит время с 1 секундой, но проблема в том, что он скажет, что время 12:04:60, и оно не меняется до 12:05:00. Я сейчас борется, и я не могу найти решение.

Мой код ниже, я надеюсь, что вы можете мне помочь,

public class Clock{ 

     public int seconds; 
     public int minutes; 
     public int hours; 

     public Clock (int InsertSeconds, int InsertMinutes, int InsertHours){  

      seconds = InsertSeconds; 
      minutes = InsertMinutes; 
      hours = InsertHours; 
     } 

     public void timeTick(){ 

      seconds = seconds + 1; 

     } 
     public String toString(){ 

      return hours + ":" + minutes + ":" + seconds; 

     } 


    } 

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

+2

Сначала попробуйте объяснить себе словами: в каком состоянии вы хотите, чтобы он действовал по-разному, и какие шаги должны произойти, чтобы «исправить» время. –

ответ

0

Вы можете проверить, когда у вас есть 60 секунд, а затем сбросить секунды до нуля и увеличить минуты на 1. например.

if (the condition you want to check) { 
    //increase the number of minutes. 
    //reset number of seconds. 
} 

Если вы вводите секунд значения более чем на 60, вам необходимо выяснить, как много минут, что равняется с помощью деления, а оставшееся количество секунд с помощью оператора в модуль: % например

seconds = 125; 
minutes = seconds/60; // 2 minutes 
remaining_seconds = seconds % 60; // 5 seconds 
+0

Спасибо всем за предложения. теперь единственная проблема заключается в том, что правило не будет применяться, когда я создам объект объекта Clock. Так что мне также нужно правило, чтобы применить, когда я построю следующее 10:10:61 –

+0

@WinstonNolten, если вы используете метод, который я сказал вам использовать в предыдущем вопросе для ввода неверных значений времени, вы не получите '10: 10 : 61 ', потому что, если пользователь вводит 61, им будет предложено снова ввести значения времени. –

0

Как об этом:

public void timeTick() { 
    seconds++; 
    while (seconds >= 60) { 
     minutes++; 
     seconds-=60; 
    } 
    while (minutes >= 60) { 
     hours++; 
     minutes-=60; 
    } 
} 
+0

Спасибо, я использовал этот. Единственная проблема заключается в том, что после того, как я использую свой метод для показа мне времени, он печатает нуль вместо 00, т.е. 10:10:59 + 1 секунд, изменяется на 10: 11: 0. Я попробовал кое-что, но я не могу его исправить. –

+0

Это то, что я получил. public String setProperTimeFormat() { if (seconds <10) { return "0" + seconds; } else { return "" + секунды; } } Извините, что не добавили код должным образом.Я не знаю, как использовать taggs. –

+0

@WinstonNolten. Метод, который я предложил, возвращает вам целое число. Но ваш предложенный метод выглядит хорошо, чтобы преобразовать int в строку. Чтобы сделать более распространенным использование, вы можете использовать 'public static String format (int i) {String str = Integer.toString (i); while (str.length() <2) str = "0" + str; return str; } '. В будущем: включите код в '' \ ' – msrd0

0

Попробуйте это:

public void timeTick() { 
    seconds++; 
    if (seconds == 60) 
    { 
     seconds = 0; 
     minutes++; 
     if (minutes == 60) 
     { 
      minutes = 0; 
      hours++; 
     } 
    } 
} 
+0

@ msrd0, поможете ли вы мне понять, когда наш код будет отредактирован, я не хочу, чтобы люди излишне беспокоились. (Я новичок в SO) :) –

+0

Где ваша проблема? Если вы не согласны с моим редактированием, вы можете отбросить его обратно – msrd0

+0

no dude, я не согласен, мне было просто интересно узнать, что при каких обстоятельствах вы их редактируете? –

0

попробовать это:

public class Clock{ 

    public int seconds; 
    public int minutes; 
    public int hours; 

    public Clock (int InsertSeconds, int InsertMinutes, int InsertHours){  

     seconds = InsertSeconds; 
     minutes = InsertMinutes; 
     hours = InsertHours; 
    } 

    public void timeTick(){ 

     seconds = seconds + 1; 
     if(seconds==60){ 
      minutes++; 
      seconds=0; 
      if(minutes==60){ 
      hours++; 
      minutes=0; 
      } 
     } 
    } 
    public String toString(){ 

     return hours + ":" + minutes + ":" + seconds; 

    } 


} 
1

Проблема здесь лежит в timeTick() функция , В примере с реальными часами у нас есть некоторые дополнительные правила для подсчета. Каждый раз, когда мы рассчитываем до 60 секунд, мы добавляем минута. Каждый раз, когда мы рассчитываем до 60 минут, мы добавляем час. Таким образом, вы должны выполнить эти правила.

// lets make some simple code 
public void timeTick(){ 
    seconds = seconds + 1; // you can also use seconds++; it means exactly the same thing 

    if(seconds == 60){ 
     minutes++; // we reached a minute, we need to add a minute 
     seconds = 0; // we restart our seconds counter 
     if(minutes == 60){ 
      hours++; // we reached an hour, we need to add an hour 
      minutes = 0; // we restart our minutes counter 
      // and so on, if you want to use days (24 h a day) , months (a bit more difficult), ... 
     } 
    } 
} 

Я надеюсь, что это поможет, для стартера может быть хорошей идеей, чтобы разделить вторую часть кода в функцию, которая имеет дело с этой ситуацией. Удачи!

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