Don't stop all movement just because one circle collided.
Check my logic and see how it is done.
Only do collision detection for a single circle at a time using only that single circles new position. If that single circle's new position collides with any of the other circle's old position then simply don't move that single circle.
else haveCollided = false;
Don't set it to false, it should already start with a value of false outside your inner loop (but still inside your outer loop
. And if a collision happens within your inner loop call
break to avoid checking for any other collision.
for (int j = i + 1; j < ballcount; j++)
You inner loop still needs to loop over every single circle, not just the circles that come after the one that collision is currently being preformed on. Just add a single check inside the inner loop to avoid checking for collision against the same circle. A simple
if (i == j) continue; will work (same as in my code).
On a side note, if you hop on
IRC I would be glad to help get you straightened out (with this or any other problems).