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

                    }

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

...全文
409 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也不行,结果一样
1、*程序调试 1)、写完一段程序后,想看一下这段程序的执行过程。 2)、当你写完这段程序后,发现,程序并没有按照你想象的样子去执行。 调试方法: 1)、F11逐语句调试(单步调试) 2)、F10逐过程调试 3)、断点调试 2、for循环 语法: for(表达式1;表达式2;表达式3) { 循环体; } 表达式1一般为声明循环变量,记录循环的次数(int i=0;) 表达式2一般为循环条件(i<10) 表达式3一般为改变循环条件的代码,使循环条件终有一天不再成立(i++)。 执行过程:程序首先执行表达式1,声明了一个循环变量用来记录循环的次数, 然后执行表达式2,判断循环条件是否成立,如果表达式2返回的结果为true, 则执行循环体。当执行完循环体后,执行表达式3,然后执行表达式2继续判断循环条件是否成立, 如果成立则继续执行循环体,如果不成立,则跳出for循环。 3、int.TryParse int.parse 尝试着将一个字符串转换成int类型。 4、三元表达式 语法: 表达式1?表达式2:表达式3; 表达式1一般为一个关系表达式。 如果表达式1的值为true,那么表达式2的值就是整个三元表达式的值。 如果表达式1的值为false,那么表达式3的值就是整个三元表达式的值。 注意:表达式2的结果类型必须跟表达式3的结果类型一致,并且也要跟整个三元表达式的结果类型一致。
1、类型如果相兼容的两个变量,可以使用自动类型转换或者强制类型转换, 但是,如果两个类型的变量不兼容,比如 string与int或者string 与double, 这个时候我们可以使用一个叫做Convert的转换工厂进行转换。 注意:使用Convert进行类型转换,也需要满足一个条件: 面儿上必须要过的去。 2、算数运算符 ++:分为前++和后++,不管是前++还是后++,最终的结果都是给这个变量加一。 区别表现表达式当,如果是前++,则先给这个变量自身加一,然后带着这个加一后的值去参与运算。 如果是后++,则先拿原值参与运算,运算完成后,再讲这个变量自身加一。 --:同上。 3、 对于向加加或者减减这样只需要一个操作数就能完成的运算,我们称之为一元运算符。 + - * / % 对于这些需要两个或以上才能完成运算的操作符,我们称之为二元运算符。 一元运算符的优先级要高于而元运算符。 如果在一个表达式当,既有一元运算符,又有二元运算符,我们首先计算一元运算符。 int number=10; int result=10 + ++number; 4、关系运算符 > < >= <= == != 关系运算符是用来描述两个事物之间的关系 由关系运算符连接的表达式称之为关系表达式。 5、bool类型 在c#我们用bool类型来描述对或者错。 bool类型的值只有两个 一个true 一个false 6、逻辑运算符 && 逻辑与 ||逻辑或 !逻辑非 又逻辑运算符连接的表达式叫做逻辑表达式 逻辑运算符两边放的一般都是关系表达式或者bool类型的值。 5>3 &&true; 3>5||false !表达式 逻辑表达式的结果同样也是bool类型 7、复合赋值运算符 int number=10; += : number+=20; number=number+20; -= number-=5; number=number-5; *= number*=5; number=number*5; /= %= 级程序员 --2年 ---高级程序员---->小组组长---> 项目经理 业务经理 产品经理 高级程序员 不明觉厉 软件开发工程师 顺序结构:程序从Main函数进入,从上到下一行一行的执行,不会落下任何一行。 分支结构:if if-else 选择结构:if else-if switch-case 循环结构:while do-while for foreach 8、 if语句: 语法: if(判断条件) { 要执行的代码; } 判断条件:一般为关系表达式或者bool类型的值。 执行过程:程序运行到if处,首先判断if所带的小括号的判断条件, 如果条件成立,也就是返回true,则执行if所带的大括号的代码, 如果判断条件成立,也就是返回一个false。则跳过if结构,继续向下执行。 if结构的特点:先判断,再执行,有可能一行代码都不执行 用于一种情况的判断。 9、if-else 语法: if(判断条件) { 执行的代码; } else { 执行的代码 } 执行过程:程序执行到if处,首先判断if所带的小括号的判断条件是否成立, 如果成立,也就是返回一个true,则执行if所带的大括号的代码, 执行完成后,跳出if-else结构。 如果if所带的小括号的判断条件成立,也就是返回一个false, 则跳过if语句,执行else所带的大括号的语句,执行完成后,跳出if-else结构。 if-else特点:先判断,再执行,最少都要执行一条代码。 用于两种情况的判断 注意:else永远跟离它最近的那个if配对 10、if else-if 作用:用来处理多条件的区间性的判断。 语法: if(判断条件) { 要执行的代码; } else if(判断条件) { 要执行的代码; } else if(判断条件) { 要执行的代码; } else if(判断条件) { 要执行的代码; } ........ else { 要执行的代码; } 执行过程;程序首先判断第一个if所带的小括号的判断条件,如果条件成立,也就是返回一个true, 则执行该if所带的大括号的代码,执行完成后,立即跳出if else-if结构。 如果第一个if所带的判断条件成立,也就是返回一个false,则继续向下进行判断,依次的判断每一个if所带 的判断条件,如果成立,就执行该if所带的大括号的代码,如果不成立,则继续向下判断, 如果每个if所带的判断条件都不成立,就看当前这个if else-if结构是否存在else。 如果有else的话,则执行else所带的代码,如果没有else,则整个 if-else if神马都不做。 else可以省略。

111,098

社区成员

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

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

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