1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.



Relevanta dokument
1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Malmö högskola 2008/2009 CTS

Del A (obligatorisk för alla)

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

Malmö högskola 2007/2008 Teknik och samhälle

Tentamen OOP

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Del A (obligatorisk för alla)

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

TENTAMEN OOP

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Objektorienterad programmering i Java

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Presentation av trafiksimuleringsprojektet

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Tentamen i Programmeringsteknik I

Lösningsförslag övning 2.

Lösningsförslag, tentamen FYTA11 Javaprogrammering

LyckaTill önskar Anna

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen i Programmeringsteknik I,, KandMa/Fy,

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Tentamen i Programmeringsteknik I

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Tentamen. Lösningsförslag

Laboration 1 - Grunderna för OOP i Java

Laboration A Objektsamlingar

Malmö högskola 2007/2008 Teknik och samhälle

Tentamen i Programmeringsteknik I, ES,

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Tentamen i Programmeringsteknik I

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

TENTAMEN OOP

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Laboration 3, uppgift En klass för en räknare

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Chapter 4: Writing Classes/ Att skriva egna klasser.

OOP Objekt-orienterad programmering

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen FYTA11 Javaprogrammering

Objektorienterad Programmering (TDDC77)

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreläsning 3-4 Innehåll

Tentamen. Grundläggande programmering i Java A 5p, DTAA

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Objekt och referenser

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Att öva på och förstå ett program med flera samverkande klasser.

Klasshierarkier - repetition

OOP Objekt-orienterad programmering

trafiksimulering Intro OU5 trafiksimulering

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

TENTAMEN OOP

F4. programmeringsteknik och Matlab

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Föreläsning 6: Metoder och fält (arrays)

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Föreläsning REPETITION & EXTENTA

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

2D1339 Programkonstruktion för F1, ht 2004

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Tentamen, EDA501 Programmering M L TM W K V

JAVA Mer om klasser och objektorientering

Laboration 13, Arrayer och objekt

Redovisning av inlämningsuppgifter

Presentation av obligatoriska uppgiften trafiksimulering. Ett större program med flera klasser

Tentamen i Grundläggande programmering STS, åk 1 lördag

Presentation av trafiksimuleringsprojektet

Föreläsning 2, vecka 8: Repetition

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Sortering. Om du följt dessa steg korrekt så ska böckerna nu vara sorterade.

Transkript:

1 Uppgift 1 Klassen Company Banken FinanceTrust som tidigare bara haft privatpersoner som kunder vill nu bygga ut sitt datasystem så att även företag kan registreras som kunder. Skriv klassen Company som kan hantera företagskunder. Data om företaget skall vara företagsnamn, adress och den utlåningsränta banken ger företaget. Vidare skall det finnas ett finansindextal som visar företagets finansiella ställning. Finansindextalet representeras av ett decimaltal mellan 1.0 och 10.0 och bestäms av bankens ekonomer. Du skall skriva klassen Company med två konstruktorer: en standardkonstruktor utan parametrar, och en överlagrad konstruktor där instansvariablerna namn, adress och finansindextal får värden genom parametrar. Vidare skall klassen ha en tostring-metod som returnerar en sträng med värden på objektets instansvariabler. Slutligen skall det finnas en metod finanscheck som bestämmer instansvariabeln utlåningsränta: utlåningsräntan skall vara 0.029, dvs 2.9% om finansindextalet är större än 5, och annars skall utlåningsräntan vara 0.032, dvs 3.2%. Skriv slutligen en main-metod i klassen eller i en egen testklass som gör följande: a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna. b) Anropar metoden finanscheck som bestämmer utlåningsräntan. c) Skriver ut information om Company-objektet m h a tostring-metoden. OBS! Inga metoder utöver de som beskrivs i uppgiften ovan får läggas till // Klassen hanterar ett företag i en bank import java.util.scanner; public class Company { private String namn=new String();; private String adress; private double ränta; private double finansindextal; public Company() { namn = "NoName"; adress = "NoAdress"; 1

public Company(String newname, String newadress, double newfinansindex) { namn = newname; adress = newadress; finansindextal = newfinansindex; public void finanscheck() { if (finansindextal > 5.0) ränta = 0.029; else if (finansindextal <= 5.0) ränta = 0.032; public String tostring() { String s = namn + "\n" + adress + "\n" + "Räntesats: " + ränta + "\n" + "Finansindextal: " + finansindextal; return s; public static void main(string[] arg) { Company comp = new Company("HippHurra", "Broadway 1, Uppsala", 7); comp.finanscheck(); //Man behöver inte skriva comp.tostring() System.out.println(comp); 2 Uppgift 2 Nya arbetstillfällen Ett rekryteringsföretag gör statistik på hur många jobb de förmedlat per månad under ett år. Antalet jobb lagras i en array med heltal. Ett exempel på en sådan array med värden inlagda är: 23, 34, 31, 40, 37, 58, 12, 25, 39, 42, 45, 21 I exemplet har företaget lyckats hitta 23 jobb i januari, 34 jobb i februari osv. Din uppgift är att skriva klassen Jobbfix. Klassen finns påbörjad nedan. Arrayen som innehåller antalet skapade jobb under ett år är en instansvariabel. 2

a) Skriv en metod matain som för varje månad frågar efter hur många jobb som skapats och låter användaren mata in värden för årets tolv månader i arrayen. b) Skriv en metod summa som summerar samtliga jobb som skapats under året och returnerar summan. c) Skriv en metod maxvarde som söker rätt på det största värdet i arrayen och returnerar detta. Du behöver inte ta hänsyn till om flera element i arrayen innehåller lika stora tal. d) Skriv slutligen en main-metod i klassen eller i en egen testklass som skapar ett objekt av typen Jobbfix och sedan testar alla metoder så att användaren kan se att metoderna fungerar. OBS! Inga metoder utöver de som beskrivs i uppgiften ovan får läggas till. import java.util.scanner; public class Jobbfix { private int[] jobb; public Jobbfix() { jobb = new int[12]; //Skriv resten av klassen här import java.util.*; public class Jobbfix { private int[] jobb; public Jobbfix() { jobb = new int[12]; 3

public void matain() { for (int i=0; i<12; i++) { Scanner scan = new Scanner(System.in); System.out.print("Mata in data för månad " + (i+1)+ ": "); jobb[i] = scan.nextint(); public int summa() { //variabeln sum måste nollställas först! int sum = 0; for (int i=0; i<12; i++) sum = sum + jobb[i]; return sum; public int maxvärde() { int max = 0; //Ge variablen ett rimligt startvärde: //max kan aldrig vara mindre än 0. for (int i=0; i<12; i++) { if (max < jobb[i]) max = jobb[i]; return max; public static void main(string[] arg) { Jobbfix jf = new Jobbfix(); jf.matain(); System.out.print("Sammanlagt har vi förmedlat " + jf.summa()); System.out.println(" jobb under ett år."); System.out.print("Maximalt har " + jf.maxvärde()); System.out.println(" jobb förmedlats på en månad."); 4

3 Uppgift 3 1. Givet följande klass 1 public class Kopp { 2 3 private int talet; 4 5 public Kopp(int n) { 6 talet = n; 7 8 9 public int get(){ 10 return n; 11 12 13 public void set(int i) { 14 n = i; 15 16 17 public static void main(string[] args) { 18 Kopp[] kafferep = new Kopp[5]; 19 for (int i=1; i<=5; i++) { 20 kafferep[i].set(i); 21 22 23 (a) Vid kompileringsförsöket fås följande felmeddelanden Kopp.java:10: cannot find symbol symbol : variable n location: class Kopp return n; ^ Kopp.java:14: cannot find symbol symbol : variable n location: class Kopp n = i; ^ Förklara vad det beror på och hur man ska lösa problemet. (2p) Svar: Felet är att man försöker använda n som inte är ett attribut i klassen utan en formell parameter i konstruktorn. Den naturliga ändringen är att byta n mot talet i get och set-metoden alternativt att byta namn på attributet talet till n men då måste bytet göras överallt dvs även i konstruktorn. Vanligt förekommande felaktiga svar: 5

Metoderna måste heta getn och setn för att Java skall veta vad som skall returneras eller sättas. Nej, metodernas namn har inget med saken att göra. Ur Javas synpunkt skulle get-metoden kunna heta fasteranki (men det är naturligtvis olämpligt ur mänsklig synpunkt). Det är vad metoden gör (i detta fall alltså return talet) som betyder något. set-metoden måst stå före get-metoden. Nej, i vilken ordning metoderna i en klass skrivs spelar ingen roll (i Java i andra programmeringsspråk kan det ha betydelse) Man måste lägga till n som attribut i klassen. Ja, det kan man göra men då blir det en annan klass (med två attribut) och då bör man ändra i konstruktorn och dessutom ändå ha get och set-metoder för det första attributet (talet) (b) Efter att ha rättat felen går kompileringen bra men när man försöker köra programmet får man följande utskrift Exception in thread "main" java.lang.nullpointerexception at Kopp.main(Kopp.java:20) Förklara vad det beror på och hur man ska lösa problemet. (2p) Svar: Diagnosen betyder att man på rad 20 (kafferep[i].set(i)) försöker utnyttja (följa) en objektreferens som är tom. kafferep[i] innehåller således null. På rad 18 skapar man själva arrayen men man har inte skapat några element. En lösningen är alltså att mellan rad 19 och 20 lägga in raden kafferep(i) = new Kopp(); men då måste man också definiera en parameterlös konstruktor. Den bästa lösningen är att byta rad 20 mot kafferep[i] = new Kopp(i); Vanligt förekommande felaktiga svar: Man missar element 0. Ja, det gör man visserligen men det är inget fel. Det finns inget i Java som säger att man måste börja med att behandla första elementet i en array. Iterationen går för långt - sista elementet har index 0 men loopen går till 5 Ja, det är också sant men det är inte det felet som Java klagar på (det är däremot felet i uppgift c). Felet inträffar redan vid första iterationen dvs när i är 1. (c) När även detta är åtgärdat får man följande fel. Exception in thread "main" java.lang.arrayindexoutofboundsexception: 5 at Kopp.main(Kopp.java:20) Rätta felet! (2p) Svar: Felet är att variabeln i som används som index i arrayen får värdet 5. Arrayen innehåller 5 element och dessa numreras 0, 1, 2, 3, 4. Iteratonsvillkoret i<=5 6

måste således ändras till i<5. (Troligen vill man också ändra undre grånsen från 1 till 0 men det kan man ju inte veta med säkerhet.) 4 Uppgift 4 Diagonalen hos ett parallellogram Du är ansvarig för att skriva en klass som utför beräkningar på parallellogram. Den längsta diagonalen hos ett parallellogram beräknas med formeln ÓÒ Ð=Ô 2 + 2 + 2 cos«där och är sidorna på parallellogrammet och«är parallellogrammets spetsiga vinkel. Du har skapat ramen till klassen 1 och ska nu skriva en metod som beräknar längden på den längsta diagonalen. public class Parallellogram { private double a, b, alpha; public Parallellogram(double starta, double startb, double startalpha) { a = starta; b = startb; alpha = startalpha; // Metod för att beräkna den längsta diagonalen public double longdiagonal() { // Skriv klart metoden Dina uppgifter är: a) Skriv färdigt metoden longdiagonal i klassen. b) Skriv en mainmetod i klassen eller i en testklass. Du ska använda mainmetoden för att beräkna den längsta diagonalen hos parallellogrammet: = 1 5, =2,«=37 5Æ. Skriv sedan ut resultatet av beräkningen. 1 Den trubbiga vinkeln,, kan beräknas genom 180 för den. «, så vi behöver inte deklarera en instansvariabel 7

public class Parallellogram { // Aplha är den spetsiga vinkeln, private double a, b, alpha; // Defaultkonstruktor public Parallellogram() { a = 1; b = 1; alpha = 45; // Överlagrad konstruktor public Parallellogram(double starta, double startb, double startalpha) { a = starta; b = startb; alpha = startalpha; // Beräknar den längsta diagonalen på parallellogrammet. public double longdiagonal() { return Math.sqrt(Math.pow(a,2) + Math.pow(b,2) + 2*a*b*Math.cos(alpha)); public static void main(string[] args) { Parallellogram para = new Parallellogram(1.5, 2, 33.5); double dia = para.longdiagonal(); System.out.println(dia); 5 Uppgift 5 Snica Värst blir Ica Bäst Din avlägsne släkting Snål-Sven har precis gått bort. Något oväntat har han testamenterat sin ICA-butik till dig. När du besöker butiken upptäcker du att den går under namnet Snica Värstöch du förstår snart varför. Varorna, de få som finns, är av sämsta möjliga kvalitet men priset är ändå högt. Personalen är för liten, utar- 8

betad och underbetald. När du letar efter bokföringen hittar du ingen, Snål-Sven skötte allt själv för att spara pengar. Samma sak gäller affärens leverantörer, du hittar inga uppgifter om vilka de är eller hur du får kontakt med dem. Butiken är nära en konkurs. Du har nästan gett upp när du plötsligt kommer att tänka på en kurs i objektorienterad programmering som du läste för länge sedan. Hmm, undrar om det finns ett program som kan hantera varor, leverantörer och anställda?, tänker du. Öm jag hade ett sådant så skulle jag enkelt kunna styra upp verksamheten. Ett snabbt samtal till ICAs huvudkontor visar att programmet existerar med det är alldeles för dyrt. Då får jag väl skriva ett själv, hur svårt kan det vara?, tänker du. Snica Värst ska bli Ica Bäst! För att få information om hur ICAs program ser ut så stämmer du möte med Folke, en annan ICA-handlare Folke är också sparsam och vill inte avslöja för mycket om sitt dyra program. Du lyckas dock få fram följande: * ICAs program kan bl a hantera anställda, leverantörer och varor. * Det håller reda på butikens inkomster/utgifter. * Programmet har koll på hur många exemplar av olika varor som finns på lager och det går att beställa hem fler varor med det. * Det har funktioner för löneutbetalningar och andra personalrelaterade åtgärder. * Det går lätt att ta fram vilka leverantörer som levererar en vissa vara. * Det finns många funktioner för att summera och ta fram intressant data, t ex antalet sålda gurkburkar, hur mycket som köpts från en viss leverantör och medellönen hos de anställda. Du tar fram papper och penna och börjar att skissa på en objektorienterad analys av problemet. Du börjar starta på ett UML-diagram men du gör också en skriftlig förklaring til ditt diagram. Du hoppas att ha ett första utkast färdigt cirka 14:00. 9

Figur 1: Exempel på lösning 6 Uppgift 6 Kö vid övergångsställe Du skall bidra till utvecklingen av ett programpaket för trafiksimulering. I paketet skall det ingå klasser för att representera fordon, ljussignaler, köer, vägsträckor mm. En klass för att representera bilar är redan färdigskriven: public class Bil { private String regnr; public Bil() { regnr = "ABC" + (int)(math.random()*1000); public String tostring() { return "Bil(" + regnr + ")"; 10

Vidare finns en klass för att representera ljussignaler: public class Signal { private int period; private int gperiod; private int tid; public Signal(int per, int gper) { period = per; gperiod = gper; tid = 0; public void stega() { tid++; if (tid==period) tid = 0; public boolean groen() { // Returnerar true om signalen är grön return tid < gperiod; Det finns också en (ännu ej färdigskriven) klass för att representera ett med ljussignal försett övergångsställe som vi för enkelhetsskull kallar Korsning: import java.util.scanner; public class Korsning { private double intensitet; // Sannolikheten att en bil anländer vid ett tidssteg private Queue ko; // Kön med bilar private Signal sig; // Signalen public Korsning(double intens, int kstorlek, int per, int gper) { intensitet = intens; ko = new Queue(kStorlek); sig = new Signal(per, gper); public void stega() { /* Metoden skall först stega signalen. Om kön inte är tom och signalen är grön skall bilen som står först i kön tas ut. Med sannolikheten anges av intensitet skall en ny bil skapas och ställas i kön. Metoden skall också skriva ut vilka bilar som passerar, vilka som passerar samt köns längd. */ 11

public static void main(string [] args) { Scanner sc = new Scanner(System.in); double intens; int period = 10; int gperiod; int kstorlek = 10; int antalsteg; System.out.print("Ankomstintensitet: "); intens = sc.nextdouble(); System.out.print("Grönljusintervall: "); gperiod = sc.nextint(); System.out.print("Antal steg: "); antalsteg = sc.nextint(); Korsning k = new Korsning(intens, kstorlek, period, gperiod); for (int i=1; i<antalsteg; i++) { k.stega(); En testkörning med av main-metoden i klassen Korsning ger följande resultat: Ankomstintensitet: 0.8 Grönljusintervall: 6 Antal steg: 10 Antal bilar i kön: 0 Antal bilar i kön: 0 Bil(ABC100) anländer Antal bilar i kön: 1 Bil(ABC100) passerar Bil(ABC942) anländer Antal bilar i kön: 1 Bil(ABC942) passerar Bil(ABC150) anländer Antal bilar i kön: 1 Antal bilar i kön: 1 Bil(ABC575) anländer Antal bilar i kön: 2 Bil(ABC674) anländer Antal bilar i kön: 3 Bil(ABC84) anländer Antal bilar i kön: 4 Dina uppgifter: (a) Skriv klassen Queue som skall representera en bilkö. Bilarna i kön skall lagras i en array. Arrayens längd (dvs det maximala antalet som kan finnas i kön) skall ges som parameter till konstruktorn (se konstruktorn i Korsning). Det skall finnas metoder för att ställa en bil i respektive hämta en bil från kön. Det skall vidare finnas metoder för att se om kön är tom respektive full samt en metod som returnerar antalet bilar i kön. 12

(b) Skriv metoden stega i klassen Korsning. Metoden skall först stega fram ljussignalen och sedan, om kön inte är tom och signalen är grön, ta ut en bil ur kön. Metoden skall också med sannolikheten som anges av instansvariabeln intensitet skapa en ny bil och ställa den sist i kön. Metoden skall dessutom skriva ut om en bil passerar korsningen, om en bil skapas samt den aktuella längden av kön. Se körexemplet! Ledning: För att med en viss sannolikhet skapa en bil kan metoden Math.random() användas. Denna metod returnerar ett slumptal (en double) mellan 0 och 1. (a) public class Queue { private Fordon[] theq; private int maxantal; private int antal; public Queue(int max) { maxantal = max; antal = 0; theq = new Fordon[maxAntal]; public boolean tom() { return antal == 0; public boolean full() { return antal == maxantal; public int laengd() { return antal; public Fordon taut() { if ( antal==0 ) return null; else { // Ta bilen längst fram Fordon val = theq[0]; for (int i=0; i<antal-1; i++) // Flytta fram resten theq[i] = theq[i+1]; antal--; return val; // Anm: Effektivare kömekanismer finns 13

public void sattin(fordon f) { if (full()) System.out.println("*** Full kö ***"); else { theq[antal] = f; antal++; (b) public void stega() { sig.stega(); if (!ko.tom() && sig.groen()) System.out.println(ko.taUt() + " passerar"); if ( Math.random()<intensitet ) { Fordon f = new Fordon(); System.out.println(f + " anländer"); ko.sattin(f); System.out.println("Antal bilar i kön: " + ko.laengd()); 14