索引超出了数组界限

qq_14995971 2016-06-14 11:14:00
通过点击comp来获得他的名字和坐标,然后把名字依次显示在textbox中,然后根据textbox中name的数量来确定b数组的行数,再计算textbox中name所对应的comp之间的距离,可是为什么提示 b[x][0] = matrix[0];索引超出了数组界限?求解
for (int i = 0; i < Selection.ItemCount; i++)
{
comp = (IvcComponent)Selection.getItem(i);
object name = comp.getProperty("Name");
double[] matrix = (double[])comp.RootNode.getProperty("WorldPositionMatrix"); //获得坐标xyz
if (textBox5.Text != "")
{
textBox5.Text += "->" + name.ToString();
}
else
{
textBox5.Text = name.ToString();
}
string[] tmp = textBox5.Text.Split("->".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); //得到拆分项
double sum = 0;
for (int x = 0; x < tmp.Length; x++)//根据拆分项确定行数
{
b[x][0] = matrix[0];
b[x][1] = matrix[1];
b[x][2] = matrix[2];
double xd = b[x][0] - b[x + 1][0];
double yd = b[x][1] - b[x + 1][1];
double zd = b[x][2] - b[x + 1][2];
sum += Math.Sqrt(xd * xd + yd * yd + zd * zd);
//listBox1.Items.Add("distance = " + sum);
}

}
...全文
322 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_14995971 2016-06-14
  • 打赏
  • 举报
回复
引用 3 楼 hanjun0612 的回复:
我纳闷的是,究竟
b[x]报错,还是matrix[1]报错。楼主要贴出你的错误断点
正怒月神 2016-06-14
  • 打赏
  • 举报
回复
我纳闷的是,究竟 b[x]报错,还是matrix[1]报错。楼主要贴出你的错误断点
xuzuning 2016-06-14
  • 打赏
  • 举报
回复
你在哪里检查了 b 的第一维长度 大于等于 tmp.Length 了? 既然没检查,就不能怪 b[x+1] 越界了
exception92 2016-06-14
  • 打赏
  • 举报
回复
http://www.cnblogs.com/alexis/archive/2010/11/06/1870519.html 调试看看x的值是多少 或者matrix 。
qq_14995971 2016-06-14
  • 打赏
  • 举报
回复
引用 15 楼 lili20090907 的回复:
你先检查一下 b和matrix 的长度
x大于了b的总长度,该怎么改呢
qq_14995971 2016-06-14
  • 打赏
  • 举报
回复
引用 12 楼 xuzuning 的回复:
数组定义后据不能改变大小 既然你的 tmp 是可变长度的,不如将 b 定义成 List var b = new List<double[]>(); 另外 double xd = b[x][0] - b[x + 1][0]; 也有潜在的问题 前面刚对 b[x] 赋值,接下里就要取 b[x+1] 的值,显然是不对的
可以帮我改一下吗....
lili20090907 2016-06-14
  • 打赏
  • 举报
回复
你先检查一下 b和matrix 的长度
xuzuning 2016-06-14
  • 打赏
  • 举报
回复
可以,不过你有 double[] matrix = (double[])comp.RootNode.getProperty("WorldPositionMatrix"); //获得坐标xyz 那就要看 comp.RootNode.getProperty("WorldPositionMatrix") 实际返回的是什么了 只要别弄的太复杂就好
qq_14995971 2016-06-14
  • 打赏
  • 举报
回复
引用 12 楼 xuzuning 的回复:
数组定义后据不能改变大小 既然你的 tmp 是可变长度的,不如将 b 定义成 List var b = new List<double[]>(); 另外 double xd = b[x][0] - b[x + 1][0]; 也有潜在的问题 前面刚对 b[x] 赋值,接下里就要取 b[x+1] 的值,显然是不对的
那可以用结构体来完成吗,定义x,y,z
xuzuning 2016-06-14
  • 打赏
  • 举报
回复
数组定义后据不能改变大小 既然你的 tmp 是可变长度的,不如将 b 定义成 List var b = new List<double[]>(); 另外 double xd = b[x][0] - b[x + 1][0]; 也有潜在的问题 前面刚对 b[x] 赋值,接下里就要取 b[x+1] 的值,显然是不对的
qq_14995971 2016-06-14
  • 打赏
  • 举报
回复
引用 10 楼 hanjun0612 的回复:
引用 9 楼 qq_14995971 的回复:
[quote=引用 8 楼 hanjun0612 的回复:] b[x]的问题。
和楼上说的一样吗?
是的,简单来说就是x大于了b的总长度[/quote]那怎么定义啊,double[][] b = { };开头是这么写的
正怒月神 2016-06-14
  • 打赏
  • 举报
回复
引用 9 楼 qq_14995971 的回复:
引用 8 楼 hanjun0612 的回复:
b[x]的问题。
和楼上说的一样吗?
是的,简单来说就是x大于了b的总长度
qq_14995971 2016-06-14
  • 打赏
  • 举报
回复
引用 8 楼 hanjun0612 的回复:
b[x]的问题。
和楼上说的一样吗?
正怒月神 2016-06-14
  • 打赏
  • 举报
回复
b[x]的问题。
qq_14995971 2016-06-14
  • 打赏
  • 举报
回复
引用 5 楼 homesos 的回复:
应该是x超过了b的数组长度。 b的长度是在哪定的? tmp.Length是会变的,但没发现b的长度跟着变,除非b定义时就很长。
 double[][] b = { };
b当作一个全局变量来用的,怎么定义啊
qq_14995971 2016-06-14
  • 打赏
  • 举报
回复
引用 2 楼 xuzuning 的回复:
你在哪里检查了 b 的第一维长度 大于等于 tmp.Length 了? 既然没检查,就不能怪 b[x+1] 越界了
那怎么办啊
homesos 2016-06-14
  • 打赏
  • 举报
回复
应该是x超过了b的数组长度。 b的长度是在哪定的? tmp.Length是会变的,但没发现b的长度跟着变,除非b定义时就很长。

110,535

社区成员

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

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

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