BubbleSort StackOverflowError

Dec*_*mus 5 java stack-overflow sorting arraylist

我将这个递归的BubbleSort算法添加到我在lwjgl上运行的游戏中.我正在尝试通过浮点数对"云"对象的ArrayList进行排序,这是这个云的速度.

出于某种原因,有时我会在我调用该方法的行中得到一个"java.lang.StackOverflowError".

这是代码:

public void sort() {
    for (int i = 0; i < clouds.size() - 1; i++) {
        Cloud cl1 = clouds.get(i);
        Cloud cl2 = clouds.get(i + 1);
        if (cl1.getSpeed() < cl2.getSpeed()) {
            continue;
        }
        clouds.set(i, cl2);
        clouds.set(i+1, cl1);
        this.sort();
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我得到的错误:

Sat May 04 20:28:45 CEST 2013 ERROR:null
java.lang.StackOverflowError
         at backgrounds.Clouds.sort(Clouds.java:224)
[...] // The line above is repeated for some hundred times.
Run Code Online (Sandbox Code Playgroud)

Vin*_*ele 9

当两个连续的云具有相同的速度时会发生这种情况

cl1.getSpeed() < cl2.getSpeed()
Run Code Online (Sandbox Code Playgroud)

是假的,所以云被交换并sort再次被调用.在那个电话中,

cl1.getSpeed() < cl2.getSpeed()
Run Code Online (Sandbox Code Playgroud)

仍然是假的,所以你再次交换并打电话sort.这将永远(或更好:直到堆栈已满).

更改<<=,一切都应该正常工作.


dev*_*ang 6

你比较逻辑应该跳过两个云对象,如果它们是相同的 -

改变如果 -

if (cl1.getSpeed() <= cl2.getSpeed()) {
    continue;
}
Run Code Online (Sandbox Code Playgroud)