编写一个简单的控制台应用程序来学习一些东西。应用程序使用for循环,并且按预期运行,除非它到达具有start和end DateTime条件的while循环。然而,while循环只是永远打印出“毕业”...
我只想让while循环运行并将“毕业”打印到控制台5秒钟,然后继续计算到2020年。我错过了什么?
static void Main(string[] args)
{
DateTime start = DateTime.Now.AddSeconds(0);
DateTime end = DateTime.Now.AddSeconds(5);
for (int i = 1988; i < 2020; i += 2)
{
if (i == 2000)
{
Console.WriteLine("New Mellenium");
continue;
}
if (i == 2006)
{
Console.WriteLine("Age of Majority");
continue;
}
if (i == 2014)
{
while (start < end)
{
Console.WriteLine("Graduation!!!");
continue;
}
}
Console.WriteLine(i);
Console.ReadKey();
}
由于
答案 0 :(得分:1)
您永远不会更改start
或end
日期,因此它们的值永远保持不变。
你的意图并不完全清楚,但我假设你想要&#34;毕业!&#34;连续输出5秒钟:
for (int i = 1988; i < 2020; i += 2)
{
if (i == 2000)
{
Console.WriteLine("New Mellenium");
continue;
}
if (i == 2006)
{
Console.WriteLine("Age of Majority");
continue;
}
if (i == 2014)
{
DateTime now = DateTime.Now;
DateTime end = now.AddSeconds(5);
while (now < end)
{
Console.WriteLine("Graduation!!!");
now = DateTime.Now; // <---- this line is the key
}
}
Console.WriteLine(i);
Console.ReadKey();
}
答案 1 :(得分:1)
您忘记在循环结束时增加start
变量。
在Console.ReadKey()
:
start = DateTime.Now;
这个程序的运行时间超过10秒,因为你的Console.ReadKey()
会延迟程序,因为每次循环迭代都会触发该键。
答案 2 :(得分:1)
将您的'while声明'更改为:
while (start < end)
{
Console.WriteLine("Graduation!!!");
start = DateTime.Now;
continue;
}
答案 3 :(得分:1)
作为我的第一条评论,你永远不会改变开始和结束日期时间对象,这就是原因!
在这种情况下,您可以尝试检查end
是否按当前时间点击。
while (DateTime.Now < end)
Console.WriteLine("Graduation!!!");
答案 4 :(得分:1)
在这种情况下,您不会在while循环中更新start
。它将永远具有价值
无论你何时打电话给System.DateTime.Now.AddSeconds(0)
其次,你的逻辑不对。你第一次不需要AddSeconds
电话,因为你没有添加秒,这只是浪费时间。其次,你应该像这样设置结束:
end=start.AddSeconds(5)
,因为对System.DateTime.Now
的两次调用会略有不同,并且在特定情况下可能会有很大差异。