C# 为什么返回变量idx it';一直都是0?
在表格1中,我有以下代码:C# 为什么返回变量idx it';一直都是0?,c#,winforms,C#,Winforms,在表格1中,我有以下代码: private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { label1.Visible = true; label4.Visible = true; if
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
label1.Visible = true;
label4.Visible = true;
if (wireObject1 != null)
float t = wireObject1.GetIndexByXY(e.X, e.Y, 5);
然后在WireObject类中,我有这个函数:
public float GetIndexByXY( int x , int y , float tol)
{
for (idx = 0; idx < woc.Point_X.Count; idx++)//++idx)
{
float dx = woc.Point_X[idx] - x;
float dy = woc.Point_Y[idx] - y;
float dist = (float)Math.Sqrt(dx * dx + dy * dy);
if (dist < tol) return idx;
}
return -1;
}
public float GetIndexByXY(intx,inty,float-tol)
{
对于(idx=0;idx
idx是类顶部声明的浮点变量。
对于本例中的示例:
woc.Point_X.Count是1,indiex列表中我看到索引[0]是435.0
x=434,y=233
tol=5.0
计算后:dx=1.0
和dy=-2.0
最终距离=2.236068
idx是0
所以也许我不应该退回idx?然后返回可能的距离
我搞砸了,很长一段时间没碰这个密码。我不记得它在哪里返回idx,可能没有距离
为什么当我返回变量idx时,它总是0
正如您所说,在第一次迭代中,dist
的计算值是2.236068
,它小于等于5
的tot
。因此,因为:
if (dist < tol) return idx;
if(dist
它返回idx
的值,即0
所以也许我不应该退回idx?然后返回可能的距离
这取决于您试图实现的目标。因为在第一次迭代时
(dist
总是true
。顺便说一句,像这样使用字段作为循环索引是个糟糕的主意。使用局部变量。您将省去很多麻烦。您在调试器中使用此代码花了多长时间?return
上的一个断点和一些精选手表几乎肯定会在很短的时间内回答您的问题。