Lösningsförslag till exempeltenta 2 1
1. Beskriv hur man kan söka igenom en tvådimensionell array. Beskriv pseudokoden och förklara så klart som möjligt hur den fungerar. Lösning: Se laboration 3. - Beskriv huvudidén, vilken den kan användas på, och tidskomplexitet. - Skriv pseudokod - Ge exempel på hur den fungerar. 2
2. Skriv koden för två klasser som ärver från följande klass (SuperClass2) och innehåller minst en egen metod. public class SuperClass2 { int number = 2; public int getnumber { return number; 3
Uppgift 2 lösningsförslag public class SubClass1 extends SuperClass2 { // constructor public SubClass1() { // method public void print(){ System.out.println("SubClass1"); 4
Uppgift 2 lösningsförslag public class SubClass2 extends SuperClass2 { // constructor public SubClass2() { // method public void print(){ System.out.println("SubClass2" + number); 5
3. Förklara FIFO-strukturen och vilka metoder man brukar använda på den strukturen. Ge exempel. Lösning: FIFO står för First In First Out struktur. FIFO innebär att den som placerats först I kön tas bort först. Operationer: enqueue() lägger till sist i strukturen dequeue() - tar bort det första elementet i strukturen och returnerar det peek() - returnerar det första elementet i strukturen utan att ta bort det isempty() - returnerar sant om strukturen är tom och falskt annars. 6
3. Förklara FIFO-strukturen och vilka metoder man brukar använda på den strukturen. Ge exempel. Exempel: Talet 1 placeras sist i FIFO-strukturen 2 3 enqueue(1) 2 3 1 7
3. Förklara FIFO-strukturen och vilka metoder man brukar använda på den strukturen. Ge exempel. Exempel: Talet 2 lämnar FIFO-strukturen och returneras. 2 3 1 dequeue() 3 1 8
3. Förklara FIFO-strukturen och vilka metoder man brukar använda på den strukturen. Ge exempel. Exempel: Titta på det första element i FIFO-strukturen och returnera det. 2 3 1 2 peek() 9
3. Förklara FIFO-strukturen och vilka metoder man brukar använda på den strukturen. Ge exempel. Exempel: Testa om FIFO-strukturen är tom. 2 3 1 isempty() false 10
4. Vad kommer följande program att skriva ut? Förklara exempel 5 och 10 i detalj. public class TestRegularExpression { private static void tryreg(string ex, String regexp, String text) { if (text.matches(regexp)) { System.out.println(ex + " matchar."); else { System.out.println(ex + " matchar INTE."); 11
Uppgift 4 public static void main(string[] args) { tryreg("exempel 1", "a?b.*", "bbc"); tryreg("exempel 2", "(ac)+b", "acacb"); tryreg("exempel 3", "ab*c?", "a"); tryreg("exempel 4", "ab*c?", "ac"); tryreg("exempel 5", "cb*a", "cba"); tryreg("exempel 6", "(ba)?b*", "babbbbbb"); tryreg("exempel 7", "(ba)?b*", ""); tryreg("exempel 8", "((aca) (bb)).*c.*d?", "acad"); tryreg("exempel 9", "((aca) (bb)).*c.*d?", "bbd"); tryreg("exempel 10", "((aca) (bb)).*c.*d?", "bbacabbccd"); 12
Uppgift 4 Lösning tryreg("exempel 1", "a?b.*", "bbc"); Utskrift: Exempel 1 matchar. Förklaring: a? - option, a antingen finns eller inte b - b måste finnas.* - vad som helst får finnas 13
Uppgift 4 Lösning tryreg("exempel 2", "(ac)+b", "acacb"); Utskrift: Exempel 2 matchar. Förklaring: (ac)+ - ac måste finnas minst en gång b - strängen måste avslutas med ett b 14
Uppgift 4 Lösning tryreg("exempel 3", "ab*c?", "a"); tryreg("exempel 4", "ab*c?", "ac"); Utskrift: Exempel 3 matchar. Exempel 4 matchar. Förklaring: a - strängen måste börja på a b* - måste finnas 0 eller flera b c? - option, strängen kan antingen avslutas med c eller inte 15
Uppgift 4 Lösning tryreg("exempel 5", "cb*a", "cba"); Utskrift: Exempel 5 matchar. Förklaring: c - strängen måste börja på c b* - måste finnas 0 eller flera b a - strängen måste sluta på ett a cba börjar på c, innehåller ett b och slutar på ett a, därför matchar strängen det reguljära uttrycket cb*a 16
Uppgift 4 Lösning tryreg("exempel 6", "(ba)?b*", "babbbbbb"); tryreg("exempel 7", "(ba)?b*", ""); Utskrift: Exempel 6 matchar. Exempel 7 matchar. Förklaring: (ba)? - option, strängen måste antingen börja på ba eller inte b* - resten av strängen måste bestå av 0 eller flera b 17
Uppgift 4 Lösning tryreg("exempel 8", "((aca) (bb)).c*.*d?", "acad"); tryreg("exempel 9", "((aca) (bb)).c*.*d?", "bbd"); tryreg("exempel 10", "((aca) (bb)).c*.*d?", "bbacabbccd"); Utskrift: Exempel 8 matchar INTE. Exempel 9 matchar INTE. Exempel 10 matchar. Förklaring: ((aca) (bb)) - strängen måste börja på aca eller bb. - strängen innehåller ett tecken som är vad som helst c* - strängen innehåller 0 eller flera c.* - strängen innehåller vad som helst eller inte d? - option, strängen avslutas med d eller inte 18
Uppgift 4 Lösning tryreg("exempel 10", "((aca) (bb)).c*.*d?", "bbacabbccd"); Förklaring: ((aca) (bb)) - strängen måste börja på aca eller bb. - strängen innehåller ett tecken som är vad som helst c* - strängen innehåller 0 eller flera c.* - strängen innehåller vad som helst eller inte d? - option, strängen avslutas med d eller inte Strängen matchar uttrycket eftersom den kan delas upp så här: bb-a-c-abbcc-d bb uppfylls av ((aca) (bb)) a uppfylls av. c uppfylls av c* abbcc uppfylls av.* 19 d uppfylls av d?
5a. Vilka strängar med längd mindre än 4 matchar detta reguljära uttryck: (ab?)*c* 5b. Vilka strängar med längd mindre än 4 matchar detta reguljära uttryck: (abc? ac)* 5c. Vilka strängar med längd mindre än 4 matchar detta reguljära uttryck: (ad* b*)++ 20
5a. Vilka strängar med längd mindre än 4 matchar detta reguljära uttryck: (ab?)*c* Lösning: Längd 0: Längd 1: a, c Längd 2: aa, ab, ac, cc Längd 3: aaa, aab, aba, abc, aac, acc, ccc 21
5b. Vilka strängar med längd mindre än 4 matchar detta reguljära uttryck: (abc? ac)* Lösning: Längd 0: Längd 1: finns inga Längd 2: ab, ac Längd 3: abc 22
5c. Vilka strängar med längd mindre än 4 matchar detta reguljära uttryck: (ad* b*)++ Lösning: Längd 0: Längd 1: a, b Längd 2: aa, ab, ad, ba, bb Längd 3: aaa, aab, aba, aad, ada, adb, bbb, bba, bab, abb, bba, baa, bad 23
6. Vad innebär package, public, protected och private? Vilken synlighet har dem? Ge exempel på hur de bör användas. 24
6. Vad innebär package, public, protected och private? Vilken synlighet har dem? Ge exempel på hur de bör användas. Lösning: package: - klassen samt dess metoder och instansvariabler blir endast synliga för klasserna i samma paket. - kan användas för att samla de klasser som beskriver/utför något gemensamt, Exempel: Klasser som handlar om djur placeras i paketet animal om man skriver detta högst upp i filen: package animal; 25
6. Vad innebär package, public, protected och private? Vilken synlighet har dem? Ge exempel på hur de bör användas. Lösning: För att en klass utanför paketet ska komma åt klasserna i paketet animal, måste man importera paketet genom att skriva: import animal.*; 26
6. Vad innebär package, public, protected och private? Vilken synlighet har dem? Ge exempel på hur de bör användas. Lösning: protected metoden eller instansvariabeln blir tillgänglig för subklasser som finns i samma och i andra paket. protected bör ändast användas på metoder och instansvariabler som ska vara gemensamma för klasser i samma paket och klasser som ärver den klassen de finns i. 27
6. Vad innebär package, public, protected och private? Vilken synlighet har dem? Ge exempel på hur de bör användas. Exempel: I paketet school finns klassen Person som innehåller en instansvariabel deklarerad med protected. public class Person { protected name = "Kalle"; 28
6. Vad innebär package, public, protected och private? Vilken synlighet har dem? Ge exempel på hur de bör användas. Exempel: I paketet school finns klassen Person som innehåller en instansvariabel deklarerad med protected: public class Person { protected name = "Kalle"; Alla klasser i paketet school och klasser som ärver Person kan använda name direkt utan att behöver använda getter/setter. 29
6. Vad innebär package, public, protected och private? Vilken synlighet har dem? Ge exempel på hur de bör användas. Lösning: private används på klasser, metoder och instansvariabler som man enbart vill ska vara synlig för klassen själv. 30
6. Vad innebär package, public, protected och private? Vilken synlighet har dem? Ge exempel på hur de bör användas. Exempel Endast stacken själv ska veta att den är uppbyggd av noderna. övriga klasser ska endast behöva fundera över hur de ska tillämpa klassen Stack. public class Stack { private class Node { int ; Node ; Node(E v, Node n) { = v; = n; 31
6. Vad innebär package, public, protected och private? Vilken synlighet har dem? Ge exempel på hur de bör användas. Tillgänglighet i publ ic Synlighet hos medlemmar protec packa ted ge Samma klass JA JA JA JA privat e Klass i samma paket JA JA JA NEJ Subklass i annat paket JA JA NEJ NEJ Icke-subklass, annat paket JA NEJ NEJ NEJ 32
7. Skriv koden för en klass som implementerar gränssnittet Interface7. Metoden reverse(int[] array)vänder på arrayen array. public interface Interface7 { public void reverse(int[] array); 33
Uppgift 7 Lösning public class Uppgift7 implements Inteface7 { // Constructor public Uppgift7(){ // Implement the method public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; 34
Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 4 4 3 1 35
Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 4 4 3 1 i 36
Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 4 4 3 1 swap: 4 i 37
Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 1 4 3 1 swap: 4 i Array.length 1- i 38
Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 1 4 3 4 swap: 4 i Array.length 1- i 39
Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 1 4 3 4 i 40
Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 1 4 3 4 swap: 4 i 41
Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 1 3 3 4 swap: 4 i Array.length 1- i 42
Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 1 3 4 4 swap: 4 i Array.length 1- i 43
Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 1 3 4 4 i 44
Uppgift 7 Lösning -Testkörning1 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 1 3 4 4 45
Uppgift 7 Lösning -Testkörning2 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 1 3 4 5 4 46
Uppgift 7 Lösning -Testkörning2 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 1 3 4 5 4 i 47
Uppgift 7 Lösning -Testkörning2 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 1 3 4 5 4 i Array.length 1- i 48
Uppgift 7 Lösning -Testkörning2 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 4 3 4 5 1 i 49
Uppgift 7 Lösning -Testkörning2 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 4 3 4 5 1 i Array.length 1- i 50
Uppgift 7 Lösning -Testkörning2 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 4 5 4 3 1 i 51
Uppgift 7 Lösning -Testkörning2 public class Uppgift7 implements Inteface7 { public void reverse(int[] array) { for(int i = 0; i < array.length / 2; i++){ int swap = array[i]; array[i] = array[array.length -1 i]; array[array.length -1 i] = swap; array: 4 5 4 3 1 52
8. Skriv koden för metoden public boolean issorted() som returnerar sant om värderna i en Stack<E> finns i en stigande ordning. Metoden ska även klara av att samma värde finns i flera positioner. 53
Uppgift 8 public class Stack<E extends Comparable<E>> { private class Node { E ; Node ; Node(E v, Node n) { = v; = n; private Node top; 54
Uppgift 8 public void push(e v) { Node newtop = new Node(v,top); top = newtop; public E pop() { E v = top.; top = top.; return v; 55
Uppgift 8- Lösning public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; 56
Uppgift 8- Lösning Testkörning 1 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 3 2 57
Uppgift 8- Lösning Testkörning 1 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 3 2 58
Uppgift 8- Lösning Testkörning 1 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 3 2 59
Uppgift 8- Lösning Testkörning 1 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 3 currentnode: 2 60
Uppgift 8- Lösning Testkörning 1 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 3 currentnode: 2 61
Uppgift 8- Lösning Testkörning 1 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 3 currentnode: 2 62
Uppgift 8- Lösning Testkörning 1 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 3 currentnode: 2 63
Uppgift 8- Lösning Testkörning 1 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 3 currentnode: 2 64
Uppgift 8- Lösning Testkörning 1 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 3 currentnode: 2 65
Uppgift 8- Lösning Testkörning 1 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 3 currentnode: 2 66
Uppgift 8- Lösning Testkörning 1 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 3 currentnode: 2 67
Uppgift 8- Lösning Testkörning 2 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 2 3 68
Uppgift 8- Lösning Testkörning 2 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 2 3 69
Uppgift 8- Lösning Testkörning 2 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 2 3 70
Uppgift 8- Lösning Testkörning 2 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 2 currentnode: 3 71
Uppgift 8- Lösning Testkörning 2 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 2 currentnode: 3 72
Uppgift 8- Lösning Testkörning 2 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 2 currentnode: 3 73
Uppgift 8- Lösning Testkörning 2 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 2 currentnode: 3 74
Uppgift 8- Lösning Testkörning 2 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 2 currentnode: 3 75
Uppgift 8- Lösning Testkörning 2 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 2 currentnode: 3 76
Uppgift 8- Lösning Testkörning 2 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 2 currentnode: 3 77
Uppgift 8- Lösning Testkörning 2 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 2 currentnode: 3 78
Uppgift 8- Lösning Testkörning 2 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 2 currentnode: 3 79
Uppgift 8- Lösning Testkörning 2 public boolean issorted() { if(top == null) else { Node currentnode = top; while(currentnode.!= null) { if(currentnode..compareto( currentnode..) > 0) return false; currentnode = currentnode.; top 2 currentnode: 3 80