TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 Laboration 3 Visualisering (och implementering) av sortering Exempel på grafik (med Swing-paketet) Frågor 1
Laboration 3 Visualisering av sortering Uppgiften - Implementera och visualisera olika sorteringsalgoritmer. Det som skall sorteras är samlingar av heltal. Syftet är att lära sig Javas standardklasser för grafiska komponenter. Vanliga sorteringsalgoritmer. Ett befintligt kodskelett finns. 2
Laboration 3 Visualisering av sortering (forts.) Kodskelettet Följande är klasser är helt eller delvis implementerade: AnimationStarter (main) Animator Algorithms AlgorithmHandler AlgorithmStatus AnimationWidget Examination ButtonPanel DataSet SortAlgorithm BubbleSortAlgorithm ImprovedBubbleSortAlgorithm DataOrder Källkoden för de klasser som du skrivit själv eller uppdaterat (även via mail) En diskussion (1/2-1 A4) där ni diskuterar hur bra olika algoritmer är vid olika förutsättningar. En separat sida där ni anger hur mycket tid som ni lagt på labben och reflektioner kring uppgiften. 3
Laboration 3 Visualisering av sortering (forts.) AnimationStarter JButton JTextField Runnable ButtonPanel Animator JPanel Algorithms AlgorithmHandler ArrayList DataSet AlgorithmStatus AnimationWidget SortAlgorithm JComponent BubbleSortAlgorithm ImprovedBubble SortAlgorithm? 4
Laboration 3 Visualisering av sortering (forts.) Vad skall göras Uppgift 1 Komplettera AnimationWidget.java Uppdatera AlgorithmHandler.java Skall gå att visualisera BubblesortAlgorithm Uppgift 2 Visa flera algoritmer samtidigt Lägg till ImprovedBubbleSortAlgortihm Uppgift 3 Implementation av nya algoritmer InsertionSortAlgorithm, QuickSortAlgorithm och ShellSortAlgorithm Använd befintliga swap och cmp. VG-del (Frivilligt) 5
BubbleSortAlgorithm.java public class BubbleSortAlgorithm extends SortAlgorithm { public BubbleSortAlgorithm() { super("bubble sort"); public void sort() { for (int i = 1; i < getelementcount() ; ++i) { for (int j = getelementcount()-1; j >= i; --j) { if (cmp(j, j-1) < 0) { swap(j, j-1); Notera att: Heltalen som ska sorteras är dolda i SortAlgorithm cmp(i, j): Ligger element i och j rätt ordnade? swap(i, j): Byt plats på element i och j. getelementcount(): Ger storleken på vektorn. 6
Debugger i Eclipse Ett avancerat verktyg för att lokalisera buggar i kod Behovet uppstår när kodbasen är stor och spårutskrifter inte hjälper längre Med debuggern kan du pausa programmet och kika på variabler ändra på variablers värden manuellt köra koden rad för rad och se vad som händer pausa, ändra koden och köra vidare! 7
Laboration 3 Grafisk uppbyggnad JFrame Fönster, lägg till komponenter som innehåll JComponent En komponent, går att rita på Alla komponenter innehåller följande metod: public void paint(graphics g) Denna metod definierar hur en utritning kommer att se ut genom att använda ett Graphics objekt. 8
Exempel på grafik - Trianglar Skapa ett program som ritar ut trianglar med hjälp av en JComponent som agerar som rityta. Komponenten ska ha en association till en Triangel klass. Trianglarna skall ritas upp i ett fönster Klassen JFrame beskriver ett fristående fönster på skärmen. Själva bilden ska vara en subklass till JComponent 9
Grafik med Swing-paketet Swing är ett standardbibliotek med klasser som används för att skapa grafiska gränssnitt. Importera följande paket import javax.swing.*; import java.awt.*; Klasser som implementerar vanliga grafiska komponenter Knappar: JButton Fönster: JWindow eller JFrame Textfält: JTextField, JTextArea, m.fl. 10
Notera att Exempel på grafik - Snögubben paint(graphics g) anropas då Container-klassen ritas upp. paintcomponent(graphics g) anropas för att rita ut själva komponenten. repaint() anropas för att be om en ny utritning av komponenten, som kommer ske nån gång snart. Använd denna istället för att försöka anropa paint direkt. 11