Часы, которые умеют тикать

Я кодировал программу с использованием Java для часов, которые могут «тикать», но с этим есть проблемы. Я предполагаю, что это как-то связано с геттером и сеттером или с методом toString().

встречный класс

package clock;

public class Counter 
{
private int _count;
private String _name;

public String getName(){return _name;}
public void setName(String _name){this._name = _name;}

public int getCount(){return _count;}
public void setCount(int _count){this._count = _count;}

public Counter(String name)
{
    _name = name;
    _count = 0;
}

public void Increment()
{
    _count++;
}

public void Reset()
{
    _count = 0;
}
}

класс часов

package clock;

import java.util.Calendar;


public class Clock {
private Counter _secCounter;
private Counter _minCounter;
private Counter _hrCounter;

public Clock()
{
    this._secCounter = new Counter("Seconds");
    this._minCounter = new Counter("Minutes");
    this._hrCounter = new Counter("Hour");

  Calendar currentTime = Calendar.getInstance();
  _secCounter.setCount(currentTime.get(Calendar.SECOND));
  _minCounter.setCount(currentTime.get(Calendar.MINUTE));
  _hrCounter.setCount(currentTime.get(Calendar.HOUR));
}

public Counter SecCounter(){return _secCounter;}
public Counter MinCounter(){return _minCounter;}
public Counter HrCounter(){return _hrCounter;}

public String Tick()
{
    _secCounter.Increment();
    if (_secCounter.getCount() == 60)
    {
        _secCounter.Reset();
        _minCounter.Increment();
    }

    if (_minCounter.getCount() == 60)
    {
        _minCounter.Reset();
        _hrCounter.Increment();
    }

    if (_hrCounter.getCount() == 24)
    {
        _hrCounter.Reset();
    }

    return _hrCounter.toString() + ":" + _minCounter.toString() + ":" + _secCounter.toString();
}

@Override
public String toString()
{
    return _hrCounter.toString() + ":" + _minCounter.toString() + ":" + _secCounter.toString();
}  
}

Основной класс

package clock;

public class Main {

public static void main(String[] args) 
{
    Clock myClock = new Clock();
    for (int i = 0; i < 10; i++)
    {

        String currentTime = myClock.Tick();
        System.out.println(currentTime);
        i = 0;
    }


}
}

Он выводит

clock.Counter@5c647e05:clock.Counter@33909752:clock.Counter@55f96302

Вроде новичок в Java и переводил код с C#. Спасибо за помощь!


person Wing Hang Khoo    schedule 31.05.2017    source источник
comment
Переопределите метод toString в классах часов и галочек отметьте это   -  person Ami    schedule 31.05.2017
comment
Вы должны переопределить метод toString в классе Counter   -  person Jay Smith    schedule 31.05.2017


Ответы (2)


Насколько я могу судить, вам нужно вызывать _**Counter.getCount(), а не toString(). Вы никогда не перезаписывали метод toString, поэтому, чтобы вернуть значение ваших часов, вам нужно использовать метод, который вы написали для получения значения счетчика. Если вы хотите, чтобы он также сообщал свое имя, вам нужно перезаписать метод toString() в Counter, чтобы он возвращал что-то вроде return getName() + ": " + getCount();

person Greg S.    schedule 31.05.2017
comment
Если непонятно, под _**Counter я подразумеваю имя счетчика. Все счетчики следовали этому шаблону имени, поэтому я пошел с ним. - person Greg S.; 01.06.2017

Я рекомендую использовать java.util.Timer для выполнения метода Clock.Tick() каждую 1 секунду.

public static void main(String[] args) {
        Clock myClock = new Clock();
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {

            @Override
            public void run() {
                String currentTime = myClock.Tick();
                System.out.println(currentTime);
            }
        }, 0, 1000);
    }

Сначала вы создаете новый экземпляр Timer. Вызовите его метод schedule, чтобы TimerTask запускался каждые 1000 миллисекунд с начальной задержкой 0.

person Jay Smith    schedule 31.05.2017