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 öva på 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 hela det resulterande programmet, som ett arkiv En diskussion (1/2-1 A4) där ni diskuterar hur bra olika algoritmer är vid olika förutsättningar. En tidsuppskattning för labben samt de reflektioner kring uppgiften som har dykt upp. 3
Laboration 3 Visualisering av sortering (forts.) 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 ImprovedBubbleSortAlgorithm Uppgift 3 Implementation av nya algoritmer InsertionSortAlgorithm, QuickSortAlgorithm och ShellSortAlgorithm Använd befintliga swap och cmp. Bonus-del (Frivillig) 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å indatan. 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 Innehåller komponenter som knappar, textfält och annat JComponent Basklassen för en komponent Kan ritas ut, ser olika ut beroende på syftet Alla komponenter innehåller följande metod: public void paintcomponent(graphics g) Denna metod bestämmer hur komponenten ritas ut, genom att använda Graphics-objektet 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 Graphics-objektet är nyckeln Är som programmets pensel Måste ges till komponenten från fönstret repaint() begär att få låna penseln paintcomponent( ) ritar ut när vi får låna penseln 9
Grafik med Swing-paketet Swing är ett standardbibliotek med klasser som används för att skapa grafiska gränssnitt. Det mesta ligger i följande paket import javax.swing.*; import java.awt.*; Klasser som implementerar vanliga grafiska komponenter Fönster: JFrame, JWindow Knappar: JButton, JRadioButton, JCheckBox, m.fl. Textfält: JTextField, JTextArea, m.fl. 10
Exempel på grafik - Sommarbild Kom ihåg att void paint(graphics g) anropas då Container-klassen ritas upp. void paintcomponent(graphics g) anropas för att rita ut själva komponenten. void 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