C#中,for循环里面条件成立,无法跳出

Kerpen.Z 2021-09-14 10:52:42

读取时刻表与系统时间进行匹配,当秒数相等的时候,对时刻进行输出,代码如下:

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;
                            
                        }
                        

                    }

然而发现在这一秒内会一直输出(我只想得到一次),输出结果如下:这怎么处理?

...全文
408 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2021-09-14
精选
  • 打赏
  • 举报
回复 1

逻辑有问题,
假设CPU执行一次循环5us,一秒就可以执行200000次循环,也就是条件满足时候,就会执行这么多次

Kerpen.Z 2021-09-14
  • 举报
回复
@worldy 大佬说得对,就是这样😂
Kerpen.Z 2021-09-14
  • 举报
回复
@worldy 大佬,有没有什么好的方法解决这个问题
大然然 2021-10-08
  • 打赏
  • 举报
回复
      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);
        });
足球中国 2021-09-15
  • 打赏
  • 举报
回复

csvController.GetInstance().arrayData[i][j] == DateTime.Now.Second.ToString()
你不是比较的时间是比较的秒。只比较秒这一位。

  • 打赏
  • 举报
回复

给他sleep1000毫秒

Kerpen.Z 2021-09-14
  • 举报
回复
@手在键盘敲很轻 这样好像可以,
xuzuning 2021-09-14
  • 打赏
  • 举报
回复 1


```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;
                            
                        }

```

Kerpen.Z 2021-09-14
  • 举报
回复
@xuzuning 兄弟,我后面还得继续读取,你这样写的话,就只能读取第一个符合条件的数据了
xuzuning 2021-09-15
  • 举报
回复
@Kerpen.Z flag 换成数值类型,你就可以规定显示次数了
安心0907 2021-09-15
  • 举报
回复
@Kerpen.Z if (csvController.GetInstance().arrayData[i][j] == DateTime.Now.Second.ToString()){}else{flag=true;}
worldy 2021-09-14
  • 打赏
  • 举报
回复 1

你可以使用一个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; 多此一举

                    }
                    

                }
Kerpen.Z 2021-09-14
  • 举报
回复
@worldy 这样子没有和之前效果一样,兄弟
Kerpen.Z 2021-09-14
  • 打赏
  • 举报
回复

因为我后面还有其他时刻,所以用的continue,刚刚调试了一遍,调试过程中也是执行了一次,但是运行的话就是打印出来很多次

JoyLJQ 2021-09-14
  • 打赏
  • 举报
回复

continue;?不应该是break吗?

Kerpen.Z 2021-09-14
  • 举报
回复
@JoyLJQ break也不行,结果一样

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧