在一个时间内循环

时间:2014-02-11 16:06:02

标签: c# loops datetime console-application conditional-statements

编写一个简单的控制台应用程序来学习一些东西。应用程序使用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();



    }

由于

5 个答案:

答案 0 :(得分:1)

您永远不会更改startend日期,因此它们的值永远保持不变。

你的意图并不完全清楚,但我假设你想要&#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的两次调用会略有不同,并且在特定情况下可能会有很大差异。