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 en
String
,
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
}
Metodanropet index("SAX", drag)
bör ge svaret 1
och
index("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älpklassen
Arrays.
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 na) {
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 av implements 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ösning till 2a,b,c,d,e: Person.java
För 2e behövs även PersonComp.java.