在循环重复期间保持准确的条件

时间:2019-04-29 08:52:24

标签: c#

我正在执行一种计算暂停的方法,该方法具有某些中断检查功能。我要同时检查时间(从-到)的方法,如果时间少于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 = "Pausenzeitverletzung";
            //end
            i += 1;
            totalBreak += pause;
            break;
        }
        if (totalBreak < 60)
        {
            error = "Pausenzeitverletzung";
        }
    }
    return totalBreak;
}

1 个答案:

答案 0 :(得分:2)

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

您的循环是错误的。您只需要其中之一。 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;
}