我工作在JavaFX的交互式排序應用:爪哇 - volatile變量沒有更新
- 這些號碼由矩形
- 每次兩個號碼都換了矩形代表交換(使用時間表 - 動畫)
這是排序算法之一:
public class BubbleSort implements SortAlgorithm {
private volatile Boolean swaping;
public void sort(double[] array, CompareFunction compareFunction, Model model, Controller controller) {
Boolean ord;
int i;
double aux;
swaping = false;
do {
ord = true;
for (i = 0; i < array.length - 1; i++) {
if (compareFunction.compare(array[i], array[i + 1]) == false) {
while (swaping);
swaping = true;
aux = array[i];
array[i] = array[i + 1];
array[i + 1] = aux;
ord = false;
controller.swapRectangles(model.getRectangles().get(i), model.getRectangles().get(i + 1), this);
}
}
} while (ord == false);
}
public void setSwaping(Boolean swaping) {
this.swaping = swaping;
}
}
這是swapRectangles方法的原型:
public void swapRectangles(final Rectangle rectangle1, final Rectangle rectangle2, final BubbleSort bubbleSort)
當時間軸結束我UDPATE 「swaping」 值:
timeline2.setOnFinished(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
setRectangleFill(rectangle2, Color.BLACK);
rectangle2.setX(rectangle1X);
bubbleSort.setSwaping(false);
}
});
的問題是, 「swaping」 變量是從不更新(從不調用setSwaping方法)。
你知道爲什麼嗎?
你怎麼知道它沒有更新? – 2013-04-21 13:52:11
因爲應用程序凍結。 「交換」變爲「真」後,它不會從「while(swaping);」傳遞。 – 2013-04-21 13:54:06