выходной сигнал не увеличивается - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь сделать часы, которые отображаются за 24 часа, например, 00:00:00. Я создал метод ReadTime в своем классе часов. В моем MainClass я предполагал, что если бы я вызвал метод ReadTime через некоторое время l oop, то он бы увеличился. Однако вывод просто остается на 0: 0: 0.

public class Clock
{
    Counter _seconds;
    Counter _minutes;
    Counter _hours;

    public Clock()
    {
        _seconds = new Counter("Seconds");
        _minutes = new Counter("Minutes");
        _hours = new Counter("Hours");
    }


    public void Tick()
    {
        _seconds.Increment();
        if(_seconds.Count>=60)
        {
            _minutes.Increment();
            _seconds.Reset();
        }

        if(_minutes.Count >= 60)
        {
            _minutes.Reset();
            _hours.Increment();
        }

        if(_hours.Count >= 24)
        {
            Reset();

        }
    }

    public void Reset()
    {
        _hours.Reset();
        _minutes.Reset();
        _seconds.Reset();
    }

    public void ReadTime()
    {
        string ss = _seconds.Count.ToString();
        string mm = _minutes.Count.ToString();
        string hh = _hours.Count.ToString();

        Console.WriteLine("{0:00}:{0:00}:{0:00}", hh, mm, ss);
    }
}

Это мой основной метод.

public static void Main(string[] args)
    {
        Clock ClockDemo = new Clock();
        while(true)
        {
            ClockDemo.Tick();
            ClockDemo.ReadTime();
            Console.ReadLine();

        }

    }

1 Ответ

1 голос
/ 08 апреля 2020

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

    string ss = _seconds.Count.ToString(); // 0 becomes "0"
    string mm = _minutes.Count.ToString();
    string hh = _hours.Count.ToString();

    Console.WriteLine("{0:00}:{0:00}:{0:00}", hh, mm, ss);

Она не будет дополнять нули до строки, только до int . Вместо этого попробуйте следующее:

    string ss = _seconds.Count.ToString("00"); // 0 becomes "00"
    string mm = _minutes.Count.ToString("00");
    string hh = _hours.Count.ToString("00");

    Console.WriteLine("{0}:{1}:{2}", hh, mm, ss);

Вы также можете пропустить помещение их во временные строковые переменные:

    Console.WriteLine("{0:00}:{1:00}:{2:00}", _hours.Count, _minutes.Count, _seconds.Count);

Или использовать интерполированную строку:

    Console.WriteLine($"{_hours.Count:00}:{_minutes.Count:00}:{_seconds.Count:00}");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...