2015-08-13 3 views
0

Я работаю над назначением mooc.fi, и я действительно зацикливаюсь на назначении часов. Я не хочу решения, но совет о том, как достичь своего решения, пока я все еще участвую, и действительно нужно выяснить, как с этим справиться. Если вы не знакомы с mooc, текущий раздел посвящен тому, как работать с объектами внутри объектов.Запросить справку

Он состоит из трех классов, основной создает часы, а ограниченный счетчик - это то, что делает часы тикающими. Я получаю его для печати на экране, но когда введен пользовательский вводный ввод, он сначала печатает его, а затем сбрасывает значение обратно до нуля. Может кто-нибудь указать мне в правильном направлении, пожалуйста? Извините за основной вопрос, все еще пытаясь выучить этот Java-язык!

Главная

public class Main { 
public static void main(String[] args) { 
    Clock clock = new Clock(23, 59, 50); 

    int i = 0; 
    while(i < 20) { 
     System.out.println(clock); 
     clock.tick(); 
     i++; 
    } 
} 
} 

Часы

public class Clock { 

private BoundedCounter hours; 
private BoundedCounter minutes; 
private BoundedCounter seconds; 

public Clock(int hoursAtBeginning, int minutesAtBeginning, int secondsAtBeginning) { 
    // the counters that represent hours, minutes and seconds are created and set to have the correct initial values 
    this.hours = new BoundedCounter(hoursAtBeginning); 
    this.hours.setValue(hoursAtBeginning); 

    this.minutes = new BoundedCounter(minutesAtBeginning); 
    this.minutes.setValue(minutesAtBeginning); 

    this.seconds = new BoundedCounter(secondsAtBeginning); 
    this.seconds.setValue(secondsAtBeginning); 


} 

public void tick() { //increases the time 

     this.seconds.next(); 

     if (this.seconds.getValue() == 0) { 
      this.minutes.next(); 

      if (this.minutes.getValue() == 0) { 
       this.hours.next(); 
      } 
     } 
    } 

public String toString() { 
    // returns the string representation 
    return hours + ":" + minutes + ":" + seconds; 
} 
} 

BoundedCounter

public class BoundedCounter { 

private int value; 
private int upperLimit; 

public BoundedCounter(int upperLimit) { 
    // write code here 
    this.value = 0; 
    this.upperLimit = upperLimit; 
} 

public void next() { 
    // write code here 
    if (value < upperLimit) { 
     value++; 
    } else { 
     value = 0; 
    } 
} 

public int getValue() { 
    return value; 
} 

public void setValue(int value) { 
    if (value >= 0 && value <= upperLimit) { 
     this.value = value; 
    } 
} 

@Override 
public String toString() { 
    if (value < 10) { 
     return "0" + value; 
    } 
    return "" + value; 
} 
} 
+1

Вы передаете текущий время до BoundedCounter, но BoundedCounter ожидает верхнюю границу, а не текущее время. –

+0

Вы знаете, что смешно, я на самом деле правильно это установил, а затем изменил его. Логика предполагает, что верхний предел часа равен 23, в течение минуты - 59, а также в течение секунды. Я вручную их установил, а затем использовал setValue() для других тестов. Спасибо, что помогли мне, ребята !!! – Ohlaph

+0

Добро пожаловать в StackOverflow. Обязательно возьмите короткий тур по адресу http://stackoverflow.com/tour. Вы можете * увеличить * несколько ответов, которые вы найдете полезными, щелкнув соседний треугольник и * принять * один ответ, щелкнув соседнюю галочку. –

ответ

0

можно передать текущее время BoundedCounter.

this.hours = new BoundedCounter(hoursAtBeginning); 
this.minutes = new BoundedCounter(minutesAtBeginning); 
this.seconds = new BoundedCounter(secondsAtBeginning); 

Но BoundedCounter ожидает верхнюю границу, а не текущее время.

public BoundedCounter(int upperLimit) { 

С независимо от времени вы передаете его считаются верхним пределом, следующий тик зашкаливает 0: 0: 0.

0

BoundedCounter.next() наборы value до 0, если value составляет не менее upperLimit. Поскольку Clock конструктор всегда инициализирует все BoundedCountervalue значения быть равноupperLimit, первый вызов Clock.tick() заставит все BoundedCounter объекты, чтобы установить их value значения 0.

0

Помимо исправлений:

this.hours = new BounedCounter(int upperLimit); 
    this.minutes = new BounedCounter(int upperLimit); 
    this.seconds = new BounedCounter(int upperLimit); 

метод public void tick() должен быть составлен, как показано ниже, в противном случае, когда значение минут 00, пока значение секунд 01, 02, ... 59 , значение часов будет увеличено с каждой секундой, и результат будет 01:00:01, 2:00:02, 3:00:03 и т. д.

public void tick() { 
    this.seconds.next(); 
    if (this.seconds.getValue() == 0) { 
     this.minutes.next(); 
    } 
    if (this.minutes.getValue() == 0 && this.seconds.getValue() == 0) { 
     this.hours.next(); 
    } 
}