wizualne sortowanie w aplecie

0

Mam taki kawałem kodu, który sortuje wysokości prostokątów. Sortuje prawidłowo, ale chciałbym aby sortował w czasie rzeczywistym, czyli żeby było widać jak krok po kroku przestawia elementy, a nie od razu końcowy efekt. Jak mogę zatrzymać pętlę, narysować przestawiony element i kontynuować pętlę? Jakieś pomysły?

import java.awt.*;
import java.awt.event.*;
import java.applet.*;


public class graf extends Applet implements ActionListener
{
	Button b1, b2;
	private int szer, wys;
	public int[] tab;
	int iloscDanych;
	int szerDanych=1;

	


	public void ilosc(int a) {

			iloscDanych=a;
	}
    public void losuj(int a) {
		int[] tmp = new int[iloscDanych];
		double przyrost = wys / (double) tmp.length;
		
		for (int i = 0; i < tmp.length; i++)
		{
			if(a==2 || a==3)
			tmp[i] = (int)((i+1) * przyrost);
			
			if(a==1)
			tmp[i] = (int)((tmp.length-i) * przyrost);
			
		}
		
		if(a==3) {
			for (int i = 0; i < tmp.length; i++) {
				int j = (int)((i+1) * Math.random());
				int t = tmp[i];
				tmp[i] = tmp[j];
				tmp[j] = t;
			}
		}
		tab=tmp;
    }

	
	public void init()
	{
		Dimension d=getSize();
		szer=d.width;
		wys=d.height;
		
		ilosc(50);
		
		b1=new Button("Losuj");
		add(b1);
		b2=new Button("Sortuj");
		add(b2);
		
		b1.addActionListener(this);
		b2.addActionListener(this);
		

	}
	
	public void actionPerformed(ActionEvent e) {
	
		Sortuj sortuj=new Sortuj();
		
		if(e.getSource()==b1) {
			losuj(3);
			repaint();
		}
		if(e.getSource()==b2) {
			sortuj.babelkowe(tab);
			repaint();
		}
	}

    public void paint(Graphics g) {

	int x = 0;

	g.setColor(Color.gray);
	for (int i = 0; i < tab.length; i++, x += ((szer-(szerDanych*iloscDanych))/iloscDanych)+szerDanych)
	{
		g.fillRect(x, wys-tab[i], (szer-(szerDanych*iloscDanych))/iloscDanych, wys);
	}

	}

	}



class Sortuj
{
	int licznikPorownan = 0;
	int licznikPrzesuniec = 0;

	public void babelkowe(int[] tab) {
		for (int i = 0; i < tab.length - 1; i++) {
			for (int j = tab.length - 1; j > i; j--) {
				if (tab[j] < tab[j - 1]) {
					int temp = tab[j];
					tab[j] = tab[j - 1];
					tab[j - 1] = temp;
					licznikPrzesuniec++;
				}
				licznikPorownan++;
			}
		}
		}
}
    
0

Tak, ale musisz zacząć od napisania tego kodu jak człowiek.

  1. Jesli coś jest appletem to nie jest actionListenerem! Robimy do tego dwie osobne klasy!
  2. Klasy są związane z pewnymi bytami które charakteryzują dane i operacje. Sortuj to zły pomysł na klasę, albo przynajmniej na jej nazwę. Juz prędzej Sortowaczka
  3. Zmienne publiczne w klasie to zło.
  4. Tak, można zrobić to co chcesz, wystarczy że po każdym przesunięciu zrobisz repaint() i jakiegoś Thread.sleep()

1 użytkowników online, w tym zalogowanych: 0, gości: 1