針對資料結構教學中「儲存方式與處理算法抽象難懂」的痛點,利用 Java Applet 跨平台、互動性強的特性,開發排序算法視覺化演示系統。學生可透過網頁輸入資料、選擇自動/單步執行、同步觀察圖形變化與算法描述,將抽象邏輯具體化。
基本思想:第 i 趟在後 n-i 個元素中選出最小者,與第 i 個位置交換。
步驟:
| 符號 | 含義 |
|---|---|
| 向上箭頭前區段 | 已排序有序表 |
| 向上箭頭後區段 | 待排序無序表 |
| 雙向向下箭頭 | 兩元素交換 |
| 向下箭頭 | 當前掃描元素 |
| 向上箭頭 | 當前排序區間起始位置 |
TextField edit1 = new TextField(22);
edit1.setText("36 25 48 12 65 43 20 58"); // 預設資料
add(edit1);
// 解析輸入
StringTokenizer st = new StringTokenizer(edit1.getText());
array = new int[st.countTokens() + 1];
for (int i = 1; st.hasMoreTokens(); i++)
array[i] = Integer.valueOf(st.nextToken()).intValue();
List list1 = new java.awt.List();
list1.addItem("template void Sort(datalist &list){");
// ... 依執行順序加入各行算法描述
list1.addItem("}");
// 執行時同步高亮
list1.select(currentLineIndex);
// 排序核心邏輯配合視覺化
nowup_p = 3;
nowdown_p = 1;
for (nowdown_p = 1; nowdown_p < array.length - 1; nowdown_p++) {
int aa = array[nowdown_p];
int aap = nowdown_p;
for (nowup_p = nowdown_p + 1; nowup_p < array.length; nowup_p++) {
repaint(); // 觸發重繪,顯示掃描動畫
if (aa > array[nowup_p]) {
aa = array[nowup_p];
aap = nowup_p;
}
Thread.sleep(100); // 控制動畫速度
}
// 交換
array[aap] = array[nowdown_p];
array[nowdown_p] = aa;
repaint();
}
nowup_p = nowdown_p = 0;
repaint();
public void paint(Graphics g) {
// 繪製表格與元素
for (int i = 1; i < array.length; i++)
g.drawString(String.valueOf(array[i]), X, Y);
// 繪製箭頭:g.drawLine(), g.setColor()
}
Thread allinone:主動畫執行緒allinone.start():啟動自動執行allinone.stop():結束演示(已淘汰,教學用)step==1 時 suspend() 掛起,下一步 resume() 恢復<applet code="SortDemo.class" codebase="classes/" width="800" height="600"> </applet>
此專案展示了 Java Applet 全盛期的教學創新應用,其核心思想——「互動式視覺化降低抽象門檻」——在現代前端技術棧中依然閃耀。