c# - 在循环重复期间保持准确的条件
问题描述
我正在使用一种计算暂停的方法,该方法具有某些中断检查。计算时间的方法(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;
}
解决方案
编辑:在评论中来回一些之后,需要进行进一步的更改。如果这仍然不能满足您的要求,那么请打开另一个仅关注该部分的问题,因为我不知道您在说什么。原始答案中的代码已注释掉。如果有错误,现在返回错误
你的循环是错误的。你只需要其中之一。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;
}
推荐阅读
- windows - Windows Enterprise PIN 登录防止以后使用 AD 密码
- https - Indy HTTP / HTTPS 服务器是否在 Windows 服务应用程序中工作?
- python - R sapply 在 Python 中的 for 循环等效项
- java - 导入后 Keycloak Realm 中的用户丢失
- kubernetes - 使用自定义 pod 选项在 Kubernetes 中启动交互式 bash 提示
- python - Selenium:选择带有子类别的多个下拉菜单
- python - 我的 python 脚本的 Exe 无法运行,因为它无法识别模块 PIL
- django - django rest framework api在db中保存多个数据并使用嵌套的序列化器
- aop - 如何在 Spring AOP 中访问 RequestContextHolder 之前或之后的异步通知
- android - 在使用 Android MediaMuxer 时显示进度。如何获得总文件(内容)大小?