TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2 Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket 1
Länkade listor Likadant som i Ada-kursen. 2
Stack MyStack MyStack<E> metoder public void push(e element) // Adds data public E pop() // Returns & removes topmost data public boolean isempty() // Checks if empty public int size() // Returns data count 3
Del 1: Dagens Uppgift I klassen Calculator, implementera en statisk metod product som beräknar produkten av en samling med heltal, som ges som inparameter. Uttrycket finns som en stack, med datatypen Integer. Resultatet ska returneras som en int. Rekursion får ej användas. 4
Kö MyQueue MyQueue<E> metoder public void enqueue(e element) // Adds data public E dequeue() // Returns & removes front data public boolean isempty() // Returns data count public int size() // Returns data count 5
MyList MyList Ska vara en enkellänkad lista" MyList<E> implements Iterable<E> metoder public void add(e element) // Adds element public E getrandomelement() // Gets element, doesn t remove public boolean isempty() // Checks if empty public int size() // Returns data count public Iterator<E> iterator() // Gets iterator for list 6
Iterator Iteratorer används för att effektivt löpa igenom alla element i en datasamling, ett i taget Exempel List<Integer> li = new LinkedList<Integer>(); for (int i=0; i<li.size()-1; ++i) { Integer x = li.get(i); System.out.println(x); for (Iterator<Integer> it = li.iterator(); it.hasnext(); ) { Integer x = it.next(); System.out.println(x); 7
MyListIterator MyListIterator MyListIterator<E> implements Iterator<E> metoder public boolean hasnext() // Checks if there is more data public E next() // Gets next data public void remove() // Removes last gotten data 8
Iterator (forts.) Att skriva sin egna iterator-klass för en egendefinierad container-klass MyContainer Exempel import java.util.iterator; public class MyContainerIterator<E> implements Iterator<E> { // Några instansvariabler (bl.a. en referens till det objekt // som vi ska iterera över, MyContainer) public MyContainerIterator(MyContainer<E> container) { public boolean hasnext() { public E next() { public void remove() { 9
Laboration 2 Datastrukturer (forts.) Uppgiften Implementera ett paket som heter myutil som innehåller följande generiska klasser: MyStack MyQueue MyList (ska kunna returnera en instans av MyListIterator) MyListIterator implements java.util.iterator Skriv testprogram för varje klass och testa noga 10
Generiska klasser Behövs för att inte skriva samma klass för alla möjliga datatyper. public class MyStack<E> { private Node<E> top = null; public void push(e element){... 11
Del 2: Dagens Uppgift Gör om stack-klassen (och nod-klassen) till generiska klasser. Gör nödvändiga ändringar i Calculator så att den fungerar igen. 12
Exceptions För att på ett snyggt sätt fånga upp fel som kan förekomma i programmet och på så sätt undvika att det avbryts eller göra tydliga felmeddelanden. Exempel på fel som kan generera ett undantag Divison med 0 Läsning av en fil som inte finns Indexering utanför fältgränser Att fånga upp ett fel int[] a = new int[100]; for (int i = 0; i <= 100; ++i) { a[i] = 0; -> Programmet avbryts och följande skrivs ut: Java.lang.ArrayIndexOutOfBoundsException: 100. 13
Exceptions (forts.) Använd try-catch för att fånga upp undantag int[] a = new int[100]; try { for (int i = 0; i <= 100; ++i) { a[i] = 0; catch(exception e) { System.out.println( Exception + e.getmessage()); Programmet fortsätter att exekveras efter undantaget! 14
Paket Paket används för att organisera klasser som hör ihop package mypackage; Högst upp i varje fil som tillhör paketet mypackage Skapa paket i Eclipse File->New->Package Ange namn på det nya paketet (mypackage) Flytta källkodsfilerna (.java) till det nya paketet m.h.a. Refactoring Markera den fil du vill flytta Refactor->Move Välj det nya paketet import mypackage.*; Importerar alla klasser ur det nya paketet Paket motsvaras av kataloger i filsystemet 15