【发布时间】:2018-05-11 07:28:16
【问题描述】:
我正在尝试逐步对图中的一堆线条进行排序,以展示不同的算法如何与 GUI 和计时器一起工作。
这就是它的样子:
]
我已经让 冒泡排序 像这样工作:
timer = new Timer(500, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int m = 0; m < tal.length; m++) {
for (int n = 0; n < m; n++) {
if (tal[n] > tal[n + 1]) {
int temp = tal[n];
tal[n] = tal[n + 1];
tal[n + 1] = temp;
grafPanel.repaint();
}
}
}
}
});
timer.start();
但是,当我尝试使用 插入排序 进行类似操作时,会立即绘制整个图表(而不是像我想要的那样一次一步绘制)。
代码如下:
timer = new Timer(500, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int n = 0; n < tal.length; n++) {
int temp = tal[n];
int i = n - 1;
while (i >= 0 && tal[i] > temp) {
tal[i + 1] = tal[i];
i--;
}
tal[i + 1] = temp;
grafPanel.repaint();
}
}
});
timer.start();
编辑: 我知道在完成完整排序之前我实际上并没有将数字插入到数组中,然后我重新绘制。我仍然无法修复它(无法想象它)。更具体的帮助将不胜感激。谢谢!
【问题讨论】:
-
请提供minimal reproducible example,以便我们查看问题所在。另请阅读concurrency in Swing,这可能有助于您在没有我们帮助的情况下了解问题所在。
标签: java swing loops sorting timer