首页 > 解决方案 > 在循环重复期间保持准确的条件

问题描述

我正在使用一种计算暂停的方法,该方法具有某些中断检查。计算时间的方法(from-to),同时我想检查一下,如果时间小于30,让我报错。

如果不重复循环,它将在开始时成功。

如果条件正确,我可以以某种方式跳过那部分吗?

在变量的暂停中,我得出了我的值:6、56、4

这是方法

private double CalculateBreak(List<PRAESENZZEIT> arrivals, out string error)
{
    error = null;
    double totalBreak = 0;

    for (int i = 1; i < arrivals.Count();)
    {
        for (int n=i-1; n < arrivals.Count();)
        {
            double pause = (arrivals[i].ZPZ_Von - arrivals[n].ZPZ_Bis).TotalMinutes;
            //this part
            if (pause > 30) 
                error = "OK"; 
            else
                error = "error1";
            //end
            i += 1;
            totalBreak += pause;
            break;
        }
        if (totalBreak < 60)
        {
            error = "error2";
        }
    }
    return totalBreak;
}

标签: c#

解决方案


编辑:在评论中来回一些之后,需要进行进一步的更改。如果这仍然不能满足您的要求,那么请打开另一个仅关注该部分的问题,因为我不知道您在说什么。原始答案中的代码已注释掉。如果有错误,现在返回错误

你的循环是错误的。你只需要其中之一。for n 循环正在遍历所有到达,看起来您只需要查看前一个。尝试这样的事情:

private double CalculateBreak(List<PRAESENZZEIT> arrivals, out string error)
{
    error = null;
    double totalBreak = 0;
    for (int i = 1; i < arrivals.Count();)
    {
        // Check the i-th against the previous one (i - 1)
        double pause = (arrivals[i].ZPZ_Von - arrivals[i - 1].ZPZ_Bis).TotalMinutes;
        // //this part
        // if (pause > 30) 
        //     error = "OK"; 
        // else
        if (pause < 30) // new
        {               // new
            error = "Pausenzeitverletzung";
        }               // new
        //end
        i += 1;
        totalBreak += pause;
        // break;
        // if (totalBreak < 60)
        // {
        //    error = "Pausenzeitverletzung";
        // }
    }
    // new: moved if block
    if (totalBreak < 60)
    {
        error = "Pausenzeitverletzung";
    }

    return totalBreak;
}

推荐阅读