06.08.2013 Views

Lösningsförslag till tentamen i EDAA10, Programmering i Java

Lösningsförslag till tentamen i EDAA10, Programmering i Java

Lösningsförslag till tentamen i EDAA10, Programmering i Java

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

1(4)<br />

LUNDS TEKNISKA HÖGSKOLA Institutionen för datavetenskap<br />

<strong>Lösningsförslag</strong> <strong>till</strong> <strong>tentamen</strong> i <strong>EDAA10</strong>,<br />

<strong>Programmering</strong> i <strong>Java</strong><br />

1. public class TimePeriod {<br />

private String date;<br />

private int start;<br />

private int finish;<br />

}<br />

2011–08–18<br />

/** Skapar en mötestid med datumet date (anges med sex siffror, <strong>till</strong> exempel "110818"),<br />

starttiden hour och längden length timmar. **/<br />

public TimePeriod(String date, int hour, int length) {<br />

this.date = date;<br />

this.start = hour;<br />

this.finish = hour + length;<br />

}<br />

/** Returnerar true om mötestiden helt eller delvis kolliderar med<br />

mötestiden t, annars false. */<br />

public boolean collidesWith(TimePeriod t) {<br />

return date.equals(t.date) && (t.start < finish && t.finish > start);<br />

}<br />

/** Returnerar 0 om starttiden är samma som starttiden för t, ett<br />

negativt tal om starttiden är mindre än starttiden för t och ett<br />

positivt tal om starttiden är större än starttiden för t. */<br />

public int compareTo(TimePeriod t) {<br />

int dateResult = date.compareTo(t.date);<br />

if (dateResult == 0) {<br />

return start - t.start;<br />

} else {<br />

return dateResult;<br />

}<br />

}<br />

/** Returnerar mötestiden som en sträng enligt följande exempel:<br />

110818 10-12 */<br />

public String toString() {<br />

return date + " " + start + "-" + finish;<br />

}


2. public class AlternativeTimes {<br />

private ArrayList times;<br />

}<br />

/** Skapar en tom lista för mötestider. */<br />

public AlternativeTimes() {<br />

times = new ArrayList();<br />

}<br />

/** Lägger <strong>till</strong> mötestiden med datumet date (anges med sex siffror, <strong>till</strong><br />

exempel "110818"), starttiden hour och längden length timmar.<br />

Mötestiden får bara läggas <strong>till</strong> om den inte kolliderar med en annan tid.<br />

Returnerar true om mötestiden lagts <strong>till</strong>, annars false. */<br />

public boolean add(String date, int hour, int length) {<br />

TimePeriod t = new TimePeriod(date, hour, length);<br />

for (int i = 0; i < times.size(); i++) {<br />

if (t.collidesWith(times.get(i))) {<br />

return false;<br />

}<br />

}<br />

for (int i = 0; i < times.size(); i++) {<br />

if (times.get(i).compareTo(t) > 0) {<br />

times.add(i, t);<br />

return true;<br />

}<br />

}<br />

times.add(t);<br />

return true;<br />

}<br />

/** Returnerar en vektor som innehåller mötestiderna.<br />

Mötestiderna ska vara sorterade efter starttid. */<br />

public TimePeriod[] toSortedArray() {<br />

TimePeriod[] temp = new TimePeriod[times.size()];<br />

for (int i = 0; i < times.size(); i++) {<br />

temp[i] = times.get(i);<br />

}<br />

return temp;<br />

}<br />

2(4)


3. public class Person {<br />

private String name; // personens namn<br />

private TimePeriod[] times; // de möjliga mötestiderna<br />

private boolean[] possible; // håller reda på de tidsintervall personen kan ha möte<br />

}<br />

/** Skapar en person med namnet name. times innehåller mötestiderna sorterade<br />

efter starttid. */<br />

public Person(String name, TimePeriod[] times) {<br />

this.name = name;<br />

this.times = times;<br />

possible = new boolean[times.length];<br />

}<br />

/** Returnerar personens namn. */<br />

public String getName() {<br />

return name;<br />

}<br />

/** Markerar att personen kan delta i mötet med nummer nbr (0,1,2 ...). */<br />

public void mark(int nbr) {<br />

possible[nbr] = true;<br />

}<br />

/** Returnerar true om personen kan delta i mötet med nummer nbr, annars<br />

false. */<br />

public boolean isMarked(int periodNbr) {<br />

return possible[periodNbr];<br />

}<br />

/** Skriver ut alla tider då personen kan ha möte. */<br />

public void printPossibleTimes() {<br />

for (int i = 0; i < times.length; i++) {<br />

if (possible[i]) {<br />

System.out.println(times[i]);<br />

}<br />

}<br />

}<br />

3(4)


4. public class TimeQuestionnaire {<br />

private TimePeriod[] times;<br />

private ArrayList persons;<br />

}<br />

/** Beskriver en tidsenkät för ett möte. times innehåller mötestiderna<br />

sorterade efter starttid. */<br />

public TimeQuestionnaire(TimePeriod[] times) {<br />

this.times = times;<br />

persons = new ArrayList();<br />

}<br />

/** Lägger <strong>till</strong> en person med namnet name förutsatt att det inte redan finns en<br />

sådan person. Returnerar true om personen lagts <strong>till</strong>, annars false. */<br />

public boolean addPerson(String name) {<br />

if (findPerson(name) == null) {<br />

persons.add(new Person(name, times));<br />

return true;<br />

} else {<br />

return false;<br />

}<br />

}<br />

/** Markerar att personen med namnet name kan delta i mötet med nummer nbr (0,1,2 ...).<br />

Om det inte finns någon person med namnet name händer ingenting. */<br />

public void markPossible(String name, int nbr) {<br />

Person p = findPerson(name);<br />

if (p != null) {<br />

p.mark(nbr);<br />

}<br />

}<br />

/* Söker efter och returnerar personen med namnet name. Om ingen sådan person<br />

finns returneras null. */<br />

private Person findPerson(String name) {<br />

for (int i = 0; i < persons.size(); i++) {<br />

if (persons.get(i).getName().equals(name)) {<br />

return persons.get(i);<br />

}<br />

}<br />

return null;<br />

}<br />

/** Returnerar en lista med tider som passar alla personerna. Om ingen sådan<br />

tid finns returneras en tom lista. */<br />

public ArrayList possibleTimes() {<br />

ArrayList list = new ArrayList();<br />

for (int i = 0; i < times.length; i++) {<br />

boolean ok = true;<br />

for (int k = 0; k < persons.size(); k++) {<br />

if (! persons.get(k).isMarked(i)) {<br />

ok = false;<br />

}<br />

}<br />

if (ok) {<br />

list.add(times[i]);<br />

}<br />

}<br />

return list;<br />

}<br />

4(4)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!