我在其中编写了一个名为秒表的类及其两个方法(Start()和Stop())。每次我开始和停止时,我都应该获得TimeSpan的间隔时间。但每次我运行它,我总是得到TimeSpan 00:00:00。哪里错了? 这是我的代码:
class Stopwatch
{
private DateTime _start;
private DateTime _stop;
private bool _running;
public void Start()
{
if (!_running)
{
_running = true;
_start = DateTime.Now;
}
}
public TimeSpan Stop()
{
if (_running)
{
_stop = DateTime.Now;
_running = false;
}
return (_stop - _start);
}
在main方法中运行:
static void Main(string[] args)
{
Console.WriteLine("Stopwatch application");
Console.WriteLine("tap 'y' to start,'n' to stop,'q' to quit.");
while (true)
{
Console.WriteLine("tap 'y' to start,'n' to stop,'q' to quit.");
var input = Console.ReadLine();
var stopWatch = new Stopwatch();
if (input == "y")
{
Console.WriteLine("start");
stopWatch.Start();
}
if (input == "n")
{
Console.WriteLine("stop");
Console.WriteLine(stopWatch.Stop().ToString("G"));
}
if (input == "q") break;
}
}
我尝试过的一个解决方案是,用Cosole.ReadLine()替换所有输入,效果很好。但我的原始代码出了什么问题?
答案 0 :(得分:10)
您在每次迭代时都会创建model.predict()
的新实例 - 这意味着当您致电{Stopwatch
时,_running
总是为false
1}}。
另外:
Stop
代替DateTime.UtcNow
,否则您将看到"更改"如果DST开始或结束,则为-1小时或1小时DateTime.Now
课程 - 您应该使用System.Diagnostics.Stopwatch
代替。这通常具有更高的精度,并且不会受到改变系统时钟的因素的影响。它专为此类事物而设计。所以像(在几个地方调整风格):
Stopwatch
答案 1 :(得分:-1)
static void Main(string[] args)
{
Console.WriteLine("Stopwatch application");
Console.WriteLine("tap 'y' to start,'n' to stop,'q' to quit.");
var stopWatch = new Stopwatch();
while (true)
{
Console.WriteLine("tap 'y' to start,'n' to stop,'q' to quit.");
var input = Console.ReadLine();
if (input == "y")
{
Console.WriteLine("start");
stopWatch.Start();
}
if (input == "n")
{
Console.WriteLine("stop");
TimeSpan temp = stopWatch.Stop();
Console.WriteLine("{0:D2}:{1:D2}:{2:D2}", temp.Hours, temp.Minutes, temp.Seconds);
}
if (input == "q") break;
}
}
我希望它对你有用。