Lunds Tekniska Högskola Institutionen för datavetenskap 1(13) Programmering Exempel på tentamensuppgifter 1. I en tävling håller man reda på namn och poäng för de deltagande personerna. En person beskrivs av följande klass: Specifikation av klassen Person: /** Skapar en person med namnet name och med noll poäng */ Person(String name); /** Tar reda på personens namn */ String getname(); /** Tar reda på personens poäng i tävlingen */ int getpoints(); /** Ökar personens poäng med p */ void addpoints(int p); Hela tävlingen beskrivs av följande klass: public class Contest { private int n; // aktuellt antal deltagare private Person[] part; // deltagarna i tävlingen, i de n första elementen /** Skapar en tävling med plats för högst nmax deltagare */ public Contest(int nmax); //... metoder för att lägga in nya personer i tävlingen och för att //... tilldela dem poäng /** Beräknar poängfördelningen: hur många av de n tävlande som har 0-9 poäng, 10-19,..., >= 50 poäng. */ public void computestatistics(); /** Skriver ut poängfördelningen enligt exemplet nedan */ public void printstatistics(); Utskriften i printstatistics skall ha följande form (det är dock inte nödvändigt att antalen hamnar rakt under varandra): Antalet deltagare i tävlingen är 127. Poängfördelning: Poäng Antal 0-9 4 10-19 14 20-29 57 30-39 31 40-49 13 >=50 8 Implementera konstruktorn och metoderna computestatistics och printstatistics i klassen Contest. Ledning: Infoga attributet int[ ] stat i klassen. stat[0] skall innehålla antalet tävlande med 0-9 poäng, stat[1] antalet tävlande med 10-19 poäng,, stat[5] antalet tävlande med >= 50 poäng. 2. En groda hoppar omkring på en gräsmatta med storleken 20*20 m. Grodan kan hoppa i fyra riktningar: rakt framåt, rakt bakåt, åt vänster eller åt höger. Riktningen i varje hopp bestäms slumpmässigt (alla riktningar är lika sannolika). Varje hopp är exakt en meter långt. Skriv en metod som sätter ner grodan i mitten av gräsmattan och låter den hoppa omkring tills den hamnar utanför gräsmattan. Resultatet av metoden skall vara antalet hopp som grodan gjort. Det behövs inte någon matris för att lösa uppgiften, inte heller behöver du definiera några klasser.
3. I följande klasser beskrivs ett telefonregister med namn och telefonnummer: Specifikation av klassen Person: /** Skapar en person med namnet name och telefonnumret telnbr */ Person(String name, String telnbr); /** Tar reda på personens namn */ String getname(); /** Tar reda på personens telefonnummer */ String gettelnbr(); Specifikation av klassen TelephoneDirectory: /** Skapar ett tomt telefonregister */ TelephoneDirectory(); /** Lägger in en person (p) i registret */ void insert(person p); /** Tar bort personen med namnet name ur registret */ void delete(string name); /** Tar reda på personen med namnet name (null om ingen sådan person finns) */ Person findperson(string name); 2(13) a) Implementera klassen Person fullständigt. b) Implementera klassen TelephoneDirectory på följande sätt: Personerna i registret lagras i en vektor. Du får förutsätta att man aldrig lägger in mer än 100 personer i registret. Om det finns n personer i registret skall de alltid finnas i de n första elementen i vektorn. Det får alltså aldrig finnas några hål i vektorn. c) Implementera klassen TelephoneDirectory med en ArrayList istället för med en vektor. d) Nämn den största fördelen med implementationsmetoden i uppgift c jämfört med b. 4. I ett matematikprogram kan man räkna med matriser. Matriserna beskrivs av följande klass (bara några få av operationerna är specificerade): public class Matrix { private int n; private double[][] a; // matrisens storlek // talen i matrisen /** Skapar en matris med in rader och in kolonner */ public Matrix(int in) { n = in; a = new double[n][n]; /** Tar reda på elementet med index i,k */ public double get(int i, int k); /** Adderar matrisen m till denna matris (matriserna förutsätts vara lika stora) */ public void add(matrix m); /** Beräknar spåret av matrisen dvs summan av diagonalelementen från övre vänstra hörnet till nedre högra hörnet */ public double trace(); a) Implementera de tre operationerna get, add och trace. Vid addition av matriser adderar man element för element. b) Skriv specifikationer (dvs ej implementationer) av följande operationer på matriser: Undersök om matrisen är singulär (dvs om determinanten är = 0). Invertera matrisen. Multiplicera matrisen med ett reellt tal.
3(13) 5. I VM för Formel 1-bilar ingår normalt 17 tävlingar. Ett tjugotal förare deltar i tävlingarna. Man vill räkna ut hur många förare som har kommit i mål i 0, 1, 2, 3,..., 16, 17 av tävlingarna och presentera resultatet enligt följande exempel: Antal fullföljda tävlingar Antal förare 0 1 1 2 2 0 3 3...... 16 4 17 1 I exemplet har en förare inte fullföljt någon tävling, två förare har fullföljt en tävling,..., en förare har fullföljt alla 17 tävlingarna. En förare beskrivs av klassen Driver. Ett objekt av klassen FormulaOneDrivers håller reda på alla förarna: Specifikation av klassen Driver: // konstruktor och operationer som inte utnyttjas i denna uppgift /** Tar reda på förarens placering i tävling nr racenbr (1-17), 0 om föraren inte fullföljde tävlingen */ int getresult(int racenbr); public class FormulaOneDrivers { private int nbrdrivers; // antalet förare private Driver[] drivers; // förarna, i elementen med index 0..nbrDrivers-1 // konstruktor och operationer som inte utnyttjas i denna uppgift /** Beräknar och skriver ut statistiken över antalet fullföljda tävlingar enligt exemplet ovan */ public void printstatistics() {...; Implementera operationen printstatistics. Du behöver inte skriva ut rubriken ( Antal fullföljda tävlingar antal förare ). 6. En sexsidig tärning beskrivs av följande klass: Specifikation av klassen Die: /** Skapar en tärning */ Die(); /** Kastar tärningen */ void roll(); /** Tar reda på resultatet av det senaste tärningskastet */ int getresult(); a) Implementera klassen fullständigt dvs deklarera de attribut som behövs och skriv konstruktorn och de båda metoderna. Utnyttja klassen Random. b) Skriv en klass med en main-metod där man beräknar och skriver ut medelvärdet av resultaten av ett antal kast med tärningen. Antalet kast skall läsas in i början av main-metoden. Utskriften skall ha följande form: Medelvärdet av 2000 kast med tärningen: 3.494
4(13) 7. I spelet FourWay är spelplanen ett kvadratiskt rutnät med n*n rutor (n udda). I varje ruta finns ett tal mellan 1 och 4. En omgång i spelet går till på följande sätt: Låt mittrutan vara aktuell ruta. Upprepa tills aktuell ruta är utanför rutnätet: Om aktuell ruta innehåller talet 1 ändra 1-an till en 2-a och gå åt norr Om aktuell ruta innehåller talet 2 ändra 2-an till en 3-a och gå åt öster Om aktuell ruta innehåller talet 3 ändra 3-an till en 4-a och gå åt söder Om aktuell ruta innehåller talet 4 ändra 4-an till en 1-a och gå åt väster Exempel på en omgång när n=3 (den aktuella siffran är markerad med grå färg): 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 2 4 4 3 4 4 3 1 4 4 1 4 4 1 4 4 1 4 4 1 4 4 1 4 4 1 4 4 1 4 1 1 1 1 1 Spelet beskrivs i följande klass: Specifikation av klassen FourWay: /** Skapar ett spel med n*n rutor */ FourWay(int n); /** Initierar spelplanen med 1-or i alla rutor */ void init(); /** Genomför en omgång av spelet */ void oneround(); /** Undersöker om alla rutor innehåller 1-or */ boolean allones(); a) Implementera klassen fullständigt dvs deklarera attribut och skriv konstruktorn och metoderna. Spelplanen bör naturligtvis vara en heltalsmatris. b) Skriv ett huvudprogram som för ett visst n-värde (som läses in) beräknar och skriver ut antalet omgångar som krävs för att återfå det första rutnätet när man startar med ett rutnät med enbart 1-or. Du får förutsätta att man verkligen återfår det första rutnätet. 8. I handelsresandeproblemet gäller det för en handelsresande att besöka ett antal städer. Varje stad skall besökas exakt en gång. Handelsresanden vill att den totala resvägen skall bli så kort som möjligt. Att lösa detta problem exakt är tidsödande, eftersom man måste beräkna alla möjliga resvägar för att finna den kortaste vägen. Vi nöjer oss därför i denna uppgift med att hitta en approximation till den bästa lösningen genom att i varje steg besöka den stad som ligger närmast den senast besökta staden. Städerna och kartan med alla städer beskrivs av följande klasser: Specifikation av klassen Town: //... konstruktor och metoder som inte används i denna uppgift /** Tar reda på stadens namn */ String getname(); /** Tar reda på avståndet till staden t */ double getdistanceto(town t); /** Undersöker om denna stad är besökt */ boolean isvisited(); /** Markerar att denna stad är besökt/inte besökt (b = true/false) */ void setvisited(boolean b);
5(13) public class Map { private Town[] towns; // städerna, i elementen med index 0..towns.length-1 /** Skapar en karta med städer. Uppgifter om städerna läses in från en fil med namnet mapfile */ public Map(String mapfile) { // Här läses antalet städer från filen mapfile och vektorn towns skapas. // Därefter läses uppgifter om städerna, Town-objekt skapas och // läggs in i vektorn towns. Konstruktorn är färdigskriven /** Skriver ut namnet på de städer som besöks, i tur och ordning, när man påbörjar en resa i den första staden (towns[0]) */ public void printtour() { // Markera alla städer som obesökta // Skriv ut startstadens namn, markera den som besökt // Leta upp närmaste stad som inte är besökt, skriv ut dess namn, // markera den som besökt // osv /* I metoden printtour skall du utnyttja följande privata metod: */ /** Tar reda på den obesökta stad som ligger närmast staden t */ private Town getnearest(town t); Implementera metoderna printtour och getnearest i klassen Map. 9. I ett tärningsspel utnyttjas en spelplan med rutor numrerade 1 till 100. När spelet börjar ställer varje spelare sin spelpjäs på ruta 1. Spelarna gör sedan drag i tur och ordning. I varje drag kastar spelaren tärningen och flyttar fram sin pjäs så många rutor som tärningen visar. Om pjäsen hamnar på en ruta där det redan finns en annan pjäs så knuffas denna pjäs tillbaka till ruta 1. Spelet avslutas när en spelare (vinnaren) passerar ruta 100. Följande färdigskrivna klasser skall du utnyttja i ett program som beskriver spelet: Specifikation av klassen Dice: /** Skapar en vanlig sexsidig tärning */ Dice(); /** Kastar tärningen, ger antalet prickar (1-6) */ int roll(); Specifikation av klassen Player: /** Skapar en spelare med nummer inbr som kastar tärningen id, placera spelaren på position 1 på spelplanen */ Player(int inbr, Dice id); /** Tar reda på spelarens nummer */ int getnbr(); /** Tar reda på spelarens position på spelplanen */ int getpos(); /** Kastar tärningen, ändra spelarens position på spelplanen */ void move(); /** Flyttar spelaren till ruta 1 på spelplanen */ void setpostostart(); Skriv en main-operation som utför följande: 1. Skapar spelarna, med nummer 1, 2, 3,..., och ställer upp dem på startrutan. 2. Genomför spelet enligt beskrivningen ovan. 3. Skriver ut numret på spelaren som vann.
10. Implementera en klass Translator som används för att på ett primitivt sätt översätta en sträng från svenska till engelska enligt följande specifikation: Specifikation av klassen Translator: /** Skapar en ny översättare (translator) som använder sig av ordlistan idict för översättningen */ Translator(Dictionary idict); /** Översätter innehållet i en sträng från svenska till engelska */ String translate(string swedish); 6(13) Implementera klassen fullständigt, dvs deklarera attributen och skriv konstruktorn och operationen translate. Översättningen skall ske ord för ord, utan hänsyn till svensk eller engelsk grammatik. För att översätta ett ord skall den färdiga klassen Dictionary användas. För varje svenskt ord i strängen anropar man operationen getenglish och får därmed den engelska översättningen. Du kan förutsätta att alla svenska ord som kan förekomma i strängen finns i klassens interna databas. Du kan också förutsätta att klassen automatiskt hanterar stora/små bokstäver. Dictionary har följande specifikation (skall inte implementeras): Specifikation av klassen Dictionary: /** Skapar en tom ordlista med plats för inbr ordpar */ Dictionary(int inbr); /** Lägger in ett nytt ordpar (svenska ordet sw med den engelska översättningen eng) i ordlistan */ void insert(string sw, String eng); /** Tar reda på den engelska översättningen av det svenska ordet sw, null om ordet inte finns i ordlistan */ String getenglish(string sw); I strängen som skall översättas kan bara bokstäver, blanktecken, kommatecken och punkter förekomma. Blanktecken, kommatecken och punkter skall behållas som de stod i den ursprungliga strängen. Exempel på användning av klassen Translator: Dictionary dictionary = new Dictionary(100000);... Translator translator = new Translator(dictionary); String s; s = translator.translate( Jag kan programmera, vilket är roligt. ); System.out.println(s); Resultatutskrift: I can program, which is funny. Ledning: Använd ett objekt av klassen StringBuilder i operationen translate för att successivt bygga upp den nya, översatta, strängen. Kopiera efter hand över blanktecken, kommatecken, punkter och översatta ord till detta objekt.
7(13) 11. Vi har en färdigskriven klass Airport som beskriver en flygplats. Nedan visas en delmängd av klassens metoder (som kan vara intressanta för att lösa uppgiften). Specifikation av några metoder i klassen Airport: /** Ger flygplatsens "id", t ex CPH. */ public String getid(); /** Ger flygplatsens namn, t ex Kastrup. */ public String getname(); /** Ger närmaste stad, t ex Copenhagen. */ public String getcity(); /** Ger en sträng som beskriver flygplatsen. */ public String tostring(); /** Ger avståndet till flygplatsen other. */ public double getdistanceto(airport other); Vi vill också ha en klass som håller reda på alla flygplatser. Denna klass skall du skriva, och den skall ha följande specifikation: public class AirportDatabase { /** Skapar en tom flygplatsdatabas. */ public AirportDatabase(); /** Lägger in en ny flygplats (airport), om det inte redan finns en flygplats med samma "id" i databasen. Returnerar true om den gick att lägga in och false om den redan fanns med i databasen. */ public boolean add(airport airport); /** Ger flygplatsen med identiteten id, eller null om ingen sådan flygplats finns. */ public Airport get(string id); /** Ger en lista med de flygplatser som ligger inom ett givet avstånd (distance) från en given flygplats (airport). */ public ArrayList<Airport> findwithin(airport airport, double distance); /** Ger den flygplats som ligger närmast en given flygplats (airport). Flygplatsen själv räknas naturligtvis inte in. */ public Airport findclosest(airport airport); /** Returnerar en sträng med alla flygplatser i databasen med en flygplats per rad (id och stad med blanktecken mellan). */ public String tostring(); Implementera klassen AirportDatabase enligt specifikationen ovan. Du skall naturligtvis utnyttja den färdigskrivna klassen Airport.
Lösningsförslag 1. /** Skapar en tävling med plats för högst nmax deltagare */ public Contest(int nmax) { part = new Person[nMax]; stat = new int[6]; n = 0; /** Beräknar poängfördelningen: hur många av de n tävlande som har 0-9 poäng, 10-19,..., >= 50 poäng. */ public void computestatistics() { int index; for (index = 0; index<6; index++) { stat[index] = 0; for (int p = 0; p<n; p++) { if (part[p].getpoints()<50) { index = part[p].getpoints()/10; else { index = 5; stat[index]++; /** Skriver ut poängfördelningen enligt exemplet nedan */ public void printstatistics() { System.out.println( Antalet deltagare i tävlingen är + n +. Poängfördelning: ); System.out.println(); System.out.println( Poäng Antal ); for (int index = 0; index<stat.length-1; index++) { System.out.println(index*10 + - + (index*10+9) + + stat[index]); System.out.println( >=50 + stat[5]); 2. public int frogjump() { int jumps = 0; int x = 10, y = 10; Random rand = new Random(); while (x>=0 && x<=20 && y>=0 && y<=20) { switch (1 + rand.nextint(4)) { case 1: x++; break; case 2: x--; break; case 3: y++; break; case 4: y--; break; jumps++; return jumps; 3a. public class Person { private String name; private String telnbr; // personens namn // personens telefonnummer /** Skapar en person med namnet name och telefonnumret telnbr */ public Person(String name, String telnbr) { this.name = name; this.telnbr = telnbr; /** Tar reda på personens namn */ public String getname() { return name; /** Tar reda på personens telefonnummer */ public String gettelnbr() { return telnbr; 8(13)
3b. public class TelephoneDirectory { private Person[] persons; // personerna i registret private int n; // aktuellt antal personer i registret /** Skapar ett tomt telefonregister */ public TelephoneDirectory() { persons = new Person[100]; n = 0; /** Lägger in en person (p) i registret */ public void insert(person p) { persons[n] = p; n++; /** Tar bort personen med namnet name ur registret */ public void delete(string name) { int i = 0; while (i<n &&!persons[i].getname().equals(name)) { i++; if (i<n) { persons[i] = persons[n-1]; n--; /** Tar reda på personen med namnet name (null om ingen sådan person finns) */ public Person findperson(string name) { int i = 0; while (i<n &&!persons[i].getname().equals(name)) { i++; if (i<n) { return persons[i] else { return null; 9(13) 3c. public class TelephoneDirectory { private ArrayList<Person> persons; // personerna i registret /** Skapar ett tomt telefonregister */ public TelephoneDirectory() { persons = new ArrayList<Person>(); /** Lägger in en person (p) i registret */ public void insert(person p) { persons.add(p); /** Tar bort personen med namnet name ur registret */ public void delete(string name) { int i = 0; while (i<persons.size() &&!persons.get(i).getname().equals(name)) { i++; if (i<persons.size()) { persons.remove(i); /** Tar reda på personen med namnet name (null om ingen sådan person finns) */ public Person findperson(string name) { int i = 0; while (i<persons.size() &&!persons.get(i).getname().equals(name)) { i++; if (i<persons.size()) { return persons.get(i); else { return null;
3d. I lösningen till 3c behövs inte begränsning med en övre gräns på antalet personer. 10(13) 4a. /** Tar reda på elementet med index i,k */ public double get(int i, int k) { return a[i][k]; /** Adderar matrisen m till denna matris (matriserna förutsätts vara lika stora) */ public void add(matrix m) { for (int i = 0; i<n; i++) { for (int k = 0; k<n; k++) { a[i][k] += m.a[i][k]; /** Beräknar spåret av matrisen dvs summan av diagonalelementen från övre vänstra hörnet till nedre högra hörnet */ public double trace() { double sum = 0; for (int i = 0; i<n; i++) { sum += a[i][i]; return sum; 4b. /** Undersöker om matrisen är singulär */ boolean issingular(); /** Inverterar matrisen */ void invert(); /** Multiplicerar matrisen med x */ void multiply(double x); 5. public void printstatistics() { int[] nbrdriversfinished = new int[18]; // antalet förare som har fullföljt // 0, 1,..., 17 tävlingar for (int k = 0; k<nbrdrivers; k++) { int finished = 0; // antal fullföljda tävlingar för denne förare for (int race = 1; race<=17; race++) { if (drivers[k].getresult(race)!=0) { finished++; nbrdriversfinished[finished]++; for (int finished = 0; finished<nbrdriversfinished.length; finished++) { System.out.println(finished + "\t" + nbrdriversfinished[finished]); 6. public class Die { private int dots; private Random rand; /** Skapar en tärning */ public Die() { rand = new Random(); roll(); /** Kastar tärningen */ public void roll() { dots = 1 + rand.nextint(6); // antal prickar som tärningen visar // slumptalsgenerator /** Tar reda på resultatet av det senaste tärningskastet */ public int getresult() { return dots;
public class Test { public static void main(string[] args) { Die die = new Die(); Scanner scan = new Scanner(System.in); int n = scan.nextint(); int sum = 0; for (int i = 1; i<=n; i++) { die.roll(); sum += die.getresult(); System.out.println("Medelvärdet av " + n + " kast med tärningen: " + (double) sum/n); 7. public class FourWay { private int n; private int[][] a; // spelplanens storlek // spelplanen /** Skapar ett spel med n*n rutor */ public FourWay(int n) { this.n = n; a = new int[n][n]; /** Initierar spelplanen med 1-or i alla rutor */ public void init() { for (int i = 0; i<n; i++) { for (int k = 0; k<n; k++) { a[i][k] = 1; /** Genomför en omgång av spelet */ public void oneround() { int i = n/2; int k = i; while (i>=0 && i<n && k>=0 && k<n) { int oldvalue = a[i][k]; a[i][k] = oldvalue%4 + 1; switch (oldvalue) { case 1: i--; break; case 2: k++; break; case 3: i++; break; case 4: k--; break; /** Undersöker om alla rutor innehåller 1-or */ public boolean allones() { for (int i = 0; i<n; i++) { for (int k = 0; k<n; k++) { if (a[i][k]!=1) { return false; return true; class FourWayTest { public static void main(string[] args) { System.out.println("Skriv n-värdet:"); Scanner scan = new Scanner(System.in); int n = scan.nextint(); FourWay fw = new FourWay(n); fw.init(); int nbrrounds = 0; do { fw.oneround(); nbrrounds++; while (!fw.allones()); System.out.println("n = " + n + ". Omgångar = " + nbrrounds); 11(13)
8. /** Skriver ut namnet på de städer som besöks, i tur och ordning, när man påbörjar en resa i den första staden (towns[0]) */ public void printtour() { for (int i = 0; i<towns.length; i++) { towns[i].setvisited(false); Town current = towns[0]; System.out.println(current.getName()); current.setvisited(true); for (int i = 1; i<towns.length; i++) { current = getnearest(current); System.out.println(current.getName()); current.setvisited(true); 12(13) /* Tar reda på den obesökta stad som ligger närmast staden t */ private Town getnearest(town t) { double mindist = Double.MAX_VALUE; Town nearest = null; for (int i = 0; i<towns.length; i++) { if (towns[i]!=t &&!towns[i].isvisited() && towns[i].getdistanceto(t)<mindist) { mindist = towns[i].getdistanceto(t); nearest = towns[i] return nearest; 9. public static void main(string[] args) { Scanner scan = new Scanner(System.in); int nbrplayers = scan.nextint(); Dice d = new Dice(); Player[] players = new Player[nbrPlayers]; for(int p=0;p<nbrplayers;p++) { players[p] = new Player(p+1,d); int current = nbrplayers-1; while(players[current].getpos()<=100) { current++; if (current==nbrplayers) { current = 0; players[current].move(); for(int p=0;p<nbrplayers;p++) { if (p!=current && players[p].getpos()==players[current].getpos()) { players[p].setpostostart(); System.out.println( Spelare +players[current].getnbr()+ vann. ); 10. public class Translator { private Dictionary dict; /** Skapar en ny översättare (translator) som använder sig av ordlistan idict för översättningen */ public Translator(Dictionary idict) { dict = idict; /** Översätter innehållet i en sträng från svenska till engelska */ public String translate(string swedish) { int pos = 0; StringBuilder result = new StringBuilder(); while(pos<swedish.length()) { if (swedish.charat(pos)== swedish.charat(pos)==. swedish.charat(pos)==, ) { result.append(swedish.charat(pos)); pos++; else { int end = pos+1; while (end<swedish.length() && swedish.charat(end)!= && swedish.charat(end)!=. && swedish.charat(end)!=, ) { end++; result.append(dict.getenglish(swedish.substring(pos,end))); pos = end; return result.tostring();
11. public class AirportDataBase { private ArrayList<Airport> airports; 13(13) /** Skapar en tom flygplatsdatabas. */ public AirportDatabase () { airports = new ArrayList<Airport>(); /** Lägger in en ny flygplats (airport), om det inte redan finns en flygplats med samma "id" i databasen. Returnerar true om den gick att lägga in och false om den redan fanns med i databasen. */ public boolean add(airport airport) { String id = airport.getid(); for (int i = 0; i < airports.size(); i++) { if (airports.get(i).getid().equals(id)) { return false; airports.add(airport); return true; /** Ger flygplatsen med identiteten id, eller null om ingen sådan flygplats finns. */ public Airport get(string id) { for (int i = 0; i < airports.size(); i++) { Airport a = airports.get(i); if (a.getid().equals(id)) { return a; return null; /** Ger en lista med de flygplatser som ligger inom ett givet avstånd (distance) från en given flygplats (airport). */ public ArrayList<Airport> findwithin(airport airport, double distance) { ArrayList<Airport> closeenough = new ArrayList<Airport>(); for (int i = 0; i < airports.size(); i++) { Airport a = airports.get(i); if (airport.getdistanceto(a) < distance) { // <= också ok closeenough.add(a); return closeenough; /** Ger den flygplats som ligger närmast en given flygplats (airport). Flygplatsen själv räknas naturligtvis inte in. */ public Airport findclosest(airport airport) { Airport closest = null; double closestdist = Double.MAX_VALUE; for (int i = 0; i < airports.size(); i++) { Airport a = airports.get(i); if (!a.getid().equals(airport.getid()) && airport.getdistanceto(a) < closestdist) { closest = a; closestdist = airport.getdistanceto(a); return closest; /** Returnerar en sträng med alla flygplatser i databasen med en flygplats per rad (id och stad med blanktecken mellan). */ public String tostring(){ StringBuilder sb = new StringBuilder(); for (int i = 0; i < airports.size(); i++) { Airport a = airports.get(i); sb.append(a.getid()); sb.append( ); sb.append(a.getcity()); sb.append( \n ); return sb.tostring();