1

我正在使用 Java 编写一个能够“滴答”的时钟的程序,但它存在问题。我认为它与 getter 和 setter 或 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# 翻译代码。谢谢您的帮助!

4

2 回答 2

1

据我所知,您需要调用 _**Counter。getCount(),而不是 toString()。您永远不会覆盖 toString 方法,因此要取回时钟的值,您需要使用您编写的用于获取计数器值的方法。如果您希望它也报告它的名称,则需要覆盖 Counter 中的 toString() 方法以返回类似return getName() + ": " + getCount();

于 2017-05-31T04:33:36.927 回答
0

我建议使用java.util.Timer每 1 秒执行一次 Clock.Tick() 方法。

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。

于 2017-05-31T04:44:15.447 回答