Java拾遗(四)
数组(一个冒泡排序的实现)
package Bubblesort;
import java.util.Arrays;
import java.util.Random;
//随机数组的冒泡排序
public class Bubblesort {
int[] arr= new int[10];
comics a = new comics();
public void bubblesort(){
int i;
Random rand = new Random();
for(i=0; i<10; i++){
arr[i] = rand.nextInt(50);
}
System.out.println(Arrays.toString(arr));
a.showUI();
a.show(arr);
}
public static void main(String[] args){
Bubblesort bsort = new Bubblesort();
bsort.bubblesort();
}
}
package Bubblesort;
import java.awt.FlowLayout;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
//随机数组冒泡排序的动画实现
public class comics{
JFrame jf = new JFrame();
JButton Button = new JButton("SHOW");
public void showUI(){
jf.setSize(800, 600);
jf.setLocationRelativeTo(null);
jf.setTitle("BubbleSort");
FlowLayout layout = new FlowLayout();
jf.setLayout(layout);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(Button);
jf.setVisible(true);
}
public void show(int[] a){
ComicsListener cl = new ComicsListener();
Button.addActionListener(cl);
Graphics g = jf.getGraphics();
cl.setG(g);
cl.setA(a);
}
}
package Bubblesort;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//实现动画的监听器
public class ComicsListener implements ActionListener{
Graphics g1;
int[] a1;
public void setG(Graphics g){
g1 = g;
}
public void setA(int[] a){
a1 = a;
}
public void actionPerformed(ActionEvent e){
int m, i ,j, s, x = a1.length;
String str;
for(i=0; i<x; i++){
for(j=x-1; j>i; j--){
if(a1[j-1]>a1[j]){
int[] a2 = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90};
int[] a3 = a2;
while(a1[j-1]>a1[j] && a2[j-1]<a3[j]){
a2[j-1] = a2[j-1]+1;
a2[j] = a2[j]-1;
for(m=0; m<10; m++){
g1.setColor(Color.red);
g1.fillRect(5*a2[m], 0, 40, 10*a1[m]+50);
g1.setColor(Color.black);
str = String.valueOf(a1[m]);
g1.drawString(str, 5*a2[m]+20, 10*a1[m]+60);
}
try {
Thread.sleep(40);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
g1.clearRect(0, 0, 800, 600);
}
s = a1[j-1];
a1[j-1] = a1[j];
a1[j] = s;
}
else{
int[] a2 = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90};
for(m=0; m<10; m++){
g1.setColor(Color.red);
g1.fillRect(5*a2[m], 0, 40, 10*a1[m]+50);
g1.setColor(Color.black);
str = String.valueOf(a1[m]);
g1.drawString(str, 5*a2[m]+20, 10*a1[m]+60);
}
try {
Thread.sleep(40);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}
}
}
}
动画效果有点卡。。。