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
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)