2013-05-25 97 views
0

我不能为我的生活找出为什么这不起作用。为什么此代码导致无限循环?

var refP = []; 
var distance = function (p1, p2) { 
    return dist(p1.x, p1.y, p2.x, p2.y); 
} 
while (refP.length < 24) { 
    var pusher = { 
     x: -1, 
     y: -1, 
     closestRefP: 9999999 
    }; 
    pusher.x = (random(0, 400)); 
    pusher.y = (random(0, 400)); 
    for (var d = 0; d < refP.length; d++) { 
     if (distance(pusher, refP[d]) < pusher.closestRefP) { 
      pusher.closestRefP = distance(pusher, refP[d]); 
     } 
    } 
    if (pusher.closestRefP > 2) { 
     refP[refP.length] = pusher; 
    } 
} 

当我删除最后一条if语句并且无条件地将推送器推送到refP时,它不会给我循环。

谢谢。请让我知道是否应该清理此代码,或者尝试用较少的代码隔离问题。

+0

是的,你应该尝试更多的第一个问题。例如,你确定'pusher.closestRefP> 2'确实是真的吗? – Matt

+0

最后refP if,使得refp <24因此是循环。 – JonathanRomer

回答

2

您确定您的randomdist功能正常吗?

var distance = function (point1, point2) { 
    var xs = 0; 
    var ys = 0; 

    xs = point2.x - point1.x; 
    xs = xs * xs; 

    ys = point2.y - point1.y; 
    ys = ys * ys; 

    return Math.sqrt(xs + ys); 
} 

和您的通话random(0, 400)此:

与更换您的distance功能

pusher.x = Math.floor(Math.random() * 400); 
pusher.y = Math.floor(Math.random() * 400); 

为我工作。

+0

我的编辑似乎没有接受这段代码,但是当我把它放到另一个编辑器中时,它肯定会起作用。我想是时候改变编辑。谢谢! – Henrik

+0

您正在使用什么编辑器,它在抱怨什么? – rtcherry

+0

我在khanacademy的编辑工作。昨天我设法设置了Textmate。 (我在Mac上) – Henrik

相关问题