111,098
社区成员




读取时刻表与系统时间进行匹配,当秒数相等的时候,对时刻进行输出,代码如下:
for (int j = 1; j < csvController.GetInstance().arrayData[i].Length; j++) //秒匹配
{
if (csvController.GetInstance().arrayData[i][j] == DateTime.Now.Second.ToString())
{
int s= Convert.ToInt16( csvController.GetInstance().arrayData[i][j]);
float ss = (float)Convert.ToDouble(csvController.GetInstance().arrayData[i][j]);
Console.Write(s);
continue;
}
}
然而发现在这一秒内会一直输出(我只想得到一次),输出结果如下:这怎么处理?
逻辑有问题,
假设CPU执行一次循环5us,一秒就可以执行200000次循环,也就是条件满足时候,就会执行这么多次
List<int> ssList = new List<int>();
string second = DateTime.Now.Second.ToString();
for (int j = 1; j < csvController.GetInstance().arrayData[i].Length; j++) //秒匹配
{
if (csvController.GetInstance().arrayData[i][j] == second)
ssList.Add(Convert.ToInt16(csvController.GetInstance().arrayData[i][j]));
}
ssList.ForEach(n => {
Console.WriteLine(n);
});
csvController.GetInstance().arrayData[i][j] == DateTime.Now.Second.ToString()
你不是比较的时间是比较的秒。只比较秒这一位。
```c#
var flag = true;
for (int j = 1; j < csvController.GetInstance().arrayData[i].Length; j++) //秒匹配
{
if (csvController.GetInstance().arrayData[i][j] == DateTime.Now.Second.ToString())
{
int s= Convert.ToInt16( csvController.GetInstance().arrayData[i][j]);
float ss = (float)Convert.ToDouble(csvController.GetInstance().arrayData[i][j]);
if(flag)
{
Console.Write(s);
flag=false;
}
// continue;
}
```
你可以使用一个PrevSecond变量
int PrevSecond=-1;
for (int j = 1; j < csvController.GetInstance().arrayData[i].Length; j++) //秒匹配
{
if (csvController.GetInstance().arrayData[i][j] == DateTime.Now.Second.ToString())
{
if(PrevSecond==csvController.GetInstance().arrayData[i][j]) continue;
PrevSecond=csvController.GetInstance().arrayData[i][j];
int s= Convert.ToInt16( csvController.GetInstance().arrayData[i][j]);
float ss = (float)Convert.ToDouble(csvController.GetInstance().arrayData[i][j]);
Console.Write(s);
// continue; 多此一举
}
}
因为我后面还有其他时刻,所以用的continue,刚刚调试了一遍,调试过程中也是执行了一次,但是运行的话就是打印出来很多次