请教大家一个问题!关于Timer计时器中的索引溢出问题!

BootsShu 2016-05-19 03:42:03



在执行:listTime[i + 1] 索引将会溢出,在此语句前,增设了判断条件,但不起作用,反而直接输出该索引总数-1的元素。
在此问题上折腾了很久,想看看大家在此问题上有什么见解或者说好的解决方法吗?
...全文
175 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
比如说 listTime 有 5个单元,那么你的 if 判断只应该执行 4 次判断。比较5次就不对了。 这不是什么被动无助地考虑“在i+1之前判断是否超出索引”。从实际业务模型出发去理解,不要那么被动地纠结技术问题。
  • 打赏
  • 举报
回复
引用 8 楼 qq_26111201 的回复:
为啥在i+1之前判断是否超出索引,是的话,那么跳出循环,直接输出listTime[i]就是集合中的最后一个元素。但是这个判断在Timer怎么就不行了呢?
判断 currentPosition 是不是在两个 listTime 单元之间,那么你要么写
for(var i=1; i<listTime.Count; i++)
要么写
for(var i=0; i<listTime.Count-1; i++)
运用你的空间想象力,在眼前出现一个个图像。不然只靠编程概念,你真的很累。
BootsShu 2016-05-19
  • 打赏
  • 举报
回复
加了,反而出错了。
mjp1234airen4385 2016-05-19
  • 打赏
  • 举报
回复
加入if判断一定是起作用的,你好好看看是不是那个地方条件不满足
BootsShu 2016-05-19
  • 打赏
  • 举报
回复
为啥在i+1之前判断是否超出索引,是的话,那么跳出循环,直接输出listTime[i]就是集合中的最后一个元素。但是这个判断在Timer怎么就不行了呢?
xuzuning 2016-05-19
  • 打赏
  • 举报
回复
你是 for(int i = 0; i < ListTime.Count; i++) 所以 i 等于 ListTime.Count - 1 是一定会出现的
BootsShu 2016-05-19
  • 打赏
  • 举报
回复
这个还是真挺棘手的,但是不使用索引0和1依次比较,就把这个写死了。所以这个还不能改!
xuzuning 2016-05-19
  • 打赏
  • 举报
回复
不管你怎么比较 只要 当 i 为 ListTime.Count - 1 时(到达最后一个元素),ListTime[i + 1] 就越界了
BootsShu 2016-05-19
  • 打赏
  • 举报
回复
版主 是这样的 我是将索引0和1比较,以此类推。
BootsShu 2016-05-19
  • 打赏
  • 举报
回复
不是,最后语句赋值语句的意思是:判断条件中的索引大于=musicPlayer.Ctlcontrols.currentPosition并且musicPlayer.Ctlcontrols.currentPosition<listTime[i + 1],那么我就将该循环变量放在该集合中输出该索引位置上的值。
xuzuning 2016-05-19
  • 打赏
  • 举报
回复
你代码中有 ListTime[i + 1] 当 i 为 ListTime.Count - 1 时(到达最后一个元素) ListTime[i + 1] 就越界了
xdashewan 2016-05-19
  • 打赏
  • 举报
回复
最后一条时没有+1,所以报错

110,535

社区成员

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

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

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