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)
当两个连续的云具有相同的速度时会发生这种情况
cl1.getSpeed() < cl2.getSpeed()
Run Code Online (Sandbox Code Playgroud)
是假的,所以云被交换并sort再次被调用.在那个电话中,
cl1.getSpeed() < cl2.getSpeed()
Run Code Online (Sandbox Code Playgroud)
仍然是假的,所以你再次交换并打电话sort.这将永远(或更好:直到堆栈已满).
更改<到<=,一切都应该正常工作.
你比较逻辑应该跳过两个云对象,如果它们是相同的 -
改变如果 -
if (cl1.getSpeed() <= cl2.getSpeed()) {
continue;
}
Run Code Online (Sandbox Code Playgroud)