Övning 3
-
I labb3 (Sten, sax, påse) är det naturligt att använda en String-array som innehåller dragen:
String[] drag = {"STEN", "SAX", "PÅSE"};
Om man behöver svara på frågan "Vilket index har draget d ?", där d är enString
, så kan man använda en metod som går igenom vektorn och jämför d med alla drag tills man funnit det rätta.int index (String d, String[] drag) { for (int i=0; i<drag.length; i++) { if (drag[i].equals(d)) return i; } return -1; // draget d fanns ej med }
Metodanropetindex("SAX", drag)
bör ge svaret1
ochindex("HOPP", drag)
bör ge-1
.Hur kan man hantera detta effektivare ? Ledtråd: Använd någon subklass till
Map
. - Java har goda hjälpmedel för sortering av objektsamlingar, dels Collection-klasserna som implementerar SortedSet och dels metoder i klassen Collections. För arrayer finns hjälpklassenArrays.
a. Utgå från följande schematiska klass och visa hur den ska utökas för att Person-objekt enkelt ska kunna sorteras i personnummerordning.
class Person { long pnr; String namn; Person (long p, String n) { pnr = p; namn = n; } public String toString() { return namn + " " + pnr; } // Andra intressanta data och metoder }
Det finns inga som helst kontroller av personnumren. Vi vill bara visa på användningen avimplements Comparable
m.m..b. Hur gör man för att skapa ett sorterat träd av Personobjekt allteftersom objekt skapas? Förklara!
c. Hur får man utskrift i sorterad ordning av trädet?
Antag att ett objekt av typen
List<Person> plista;
är skapat och innehåller en stor mängd Person-objekt. Listan är inte sorterad.d. Hur får man listan sorterad i personnummerordning? Antag att klassen är utökad enligt uppgift a.
e. Hur kan man få en lista av objekten sorterad i namnordning och samtidigt behålla listan sorterad i personnummerodning?
Lösningar: