通过点击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); } }
解决方案
40
数组定义后据不能改变大小
既然你的 tmp 是可变长度的,不如将 b 定义成 List
var b = new List<double[]>();
另外 double xd = b[x][0] – b[x + 1][0]; 也有潜在的问题
前面刚对 b[x] 赋值,接下里就要取 b[x+1] 的值,显然是不对的
既然你的 tmp 是可变长度的,不如将 b 定义成 List
var b = new List<double[]>();
另外 double xd = b[x][0] – b[x + 1][0]; 也有潜在的问题
前面刚对 b[x] 赋值,接下里就要取 b[x+1] 的值,显然是不对的