C#索引超出范围.必须为非负值并小于集合大小

问题描述

_et=newList<List<edge>>(ymax-ymin+1);for(inti=0;i<_et.Count;i++){_et[i]=newList<edge>();}//边的分类表else{intj=(int)(_segments[i].p1.Y-ymin);edgeed=newedge();ed.x=_segments[i].p1.X;ed.deltax=(_segments[i].p2.X-_segments[i].p1.X)/(_segments[i].p2.Y-_segments[i].p1.Y);ed.ymax=(int)_segments[i].p2.Y;_et[j].Add(ed);}}定义了一个边的分类表,扫描线算法里的,当运行的最后一步时总提示索引超出范围.必须为非负值并小于集合大小,请大神解答啊,不知道怎么处理。。。

解决方案

解决方案二:
你贴的代码都看不懂,else上面居然是个for。这个错误提示的已经很明显了,数组索引超范围了,自己去定位错误在哪里吧
解决方案三:
不好意思啊,因为想尽量简洁一点,就把与这个问题无关的代码删除了,其实是这样的:_et=newList<List<edge>>(ymax-ymin+1);for(inti=0;i<_et.Count;i++){_et[i]=newList<edge>();}for(inti=0;i<_segments.Count;i++){if(_segments[i].p1.Y==_segments[i].p2.Y){_horizonEdge.Add(_segments[i]);}//边的分类表else{intj=(int)(_segments[i].p1.Y-ymin);edgeed=newedge();ed.x=_segments[i].p1.X;ed.deltax=(_segments[i].p2.X-_segments[i].p1.X)/(_segments[i].p2.Y-_segments[i].p1.Y);ed.ymax=(int)_segments[i].p2.Y;_et[j].Add(ed);}}我list和list里的list都初始化了,list也定义了容量,为什么还是会超范围?ymax和ymin都是_segments[i].p1.Y的最大最小值,不应该超啊。。。
解决方案四:
调试下,看看走到哪步报错
解决方案五:
错误应出现在_et[j].Add(ed);请在这之前检查j的值
解决方案六:
_et[j]中的j是不是会比_et.Coun大?
解决方案七:
很明显,你的程序有问题啦。I超出了数组的访问
解决方案八:
抛出异常时,在vs上调试,查看“调用堆栈”的深入的1、2层的调用环境的代码位置和变量值。这些应该是一个正规程序员自己做、必备的知识。如果你调试知识等于零,然后求人给改bug,这就是在那种极端不正规的公司里,也应该是先请人家吃饭的。
解决方案九:
你看看你的_et的count与你_seg的count的大小关系
解决方案十:
下面只是猜测intj=(int)(_segments[i].p1.Y-ymin);

是不是_et[j]的问题?_et数组可能没这么长_et[j].Add(ed);

解决方案十一:
j大于_et个数

时间: 2024-09-12 22:43:42

C#索引超出范围.必须为非负值并小于集合大小的相关文章

索引超出范围。必须为非负值并小于集合大小

问题描述 说明:执行当前Web请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息.异常详细信息:System.ArgumentOutOfRangeException:索引超出范围.必须为非负值并小于集合大小.参数名:index源错误:行81://取主键行82:行83:inttypeId=Convert.ToInt32(this.gvRoomType.DataKeys[e.RowIndex].Value);行84:boolres=BLL.RoomTy

C# 关闭Form时出错:索引超出范围。必须为非负值并小于集合大小

问题描述 System.ArgumentOutOfRangeException:索引超出范围.必须为非负值并小于集合大小.参数名:index在System.Collections.ArrayList.get_Item(Int32index)在System.Windows.Forms.DataGridViewColumnCollection.get_Item(Int32index)在System.Windows.Forms.DataGridView.PositionEditingControl(B

gridview 索引超出范围。必须为非负值并小于集合大小。!!!

问题描述 索引超出范围.必须为非负值并小于集合大小.参数名:index说明:执行当前Web请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息.异常详细信息:System.ArgumentOutOfRangeException:索引超出范围.必须为非负值并小于集合大小.参数名:index拜求高手解决!!!程序如下!protectedvoidSearch_Click(objectsender,EventArgse){SqlConnectionmyCon

关于总分站,泛域名解析,报错索引超出范围。必须为非负值并小于集合大小。

问题描述 关于总分站,泛域名解析,报错索引超出范围.必须为非负值并小于集合大小.如这样没错http://gl.zm777.com/如这样没错http://gsdfdsfl.zm777.com/这样就错了,是什么问题啊 解决方案 解决方案二:帮顶.

SelectedCells索引超出范围。必须为非负值并小于集合大小

问题描述 网上搜了一下,说是表格点击选中的并非是整行,而是单个单元格是在vs2012里面进行的代码如下:publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}SqlConnectionconn;DataSetds;SqlDataAdaptersda;privatevoidForm1_Load(objectsender,EventArgse){conn=newSqlConnection("DataSource=.;dat

gridview中gridview索引超出范围。必须为非负值并小于集合大小。 参数名: index,求帮助

问题描述 protectedvoidPage_Load(objectsender,EventArgse){stringstr="select*fromdbo.Medicine";dbconectiondb=newdbconection();DataSetds=db.DataAdapter(str);GridView2.DataSource=ds;GridView2.DataBind();GridView2.DataKeyNames=newstring[]{"mno"

索引超出范围。必须为非负值并小于集合大小。

问题描述 ublicClass数据存取类__EmployeeDA类PublicSharedEmployeesAsArrayList=NewArrayListSharediAsIntegerPublicSharedReadOnlyPropertygetConnectionStringAsStringGetDimstrConnAsStringstrConn&="DataSource=(local);"strConn&="InitialCatalog=Northwi

System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大

问题描述 索引超出范围.必须为非负值并小于集合大小.参数名:index说明:执行当前Web请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息.异常详细信息:System.ArgumentOutOfRangeException:索引超出范围.必须为非负值并小于集合大小.参数名:index源错误:行192:SqlConnectionconn=newSqlConnection(connectString);行193:conn.Open();行194:s

删除-急!!!!index;索引超出范围。必须为非负

问题描述 急!!!!index;索引超出范围.必须为非负 protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "shanchu") //如果单击的是"选修"按钮 { int index = Convert.ToInt32(e.CommandArgument.ToString()); //取出选修课程所在的行索引 Da