Lösningsförslag till delmålskontroll 1 Programmering
Transcription
Lösningsförslag till delmålskontroll 1 Programmering
1(3) Institutionen för datavetenskap LUNDS TEKNISKA HÖGSKOLA Lösningsförslag till delmålskontroll 1 Programmering 2015–09–18 Rättningsanvisningar: Skriv era namn på omslaget på den/de lösningar ni rättar. Använd en penna av avvikande färg så att det tydligt framgår vad som är era rättningskommentarer. Sätt bock för det som är fel och rätta felet om möjligt. Skriv också en kort kommentar om vad som är fel. Efter varje lösning finns en checklista som kan vara till hjälp vid rättningen. Kommentera även sådant som inte är fel, men ändå olämpligt. T ex svårläst programkod där ordentliga indragningar inte har gjorts, konstiga eller intetsägande variabelnamn. Sätt dock ingen bock i dessa fall. När ni rättat klart så markera tydligt poängen på omslaget enligt: • • • • 1.5 poäng: Om ni tycker att alla tre deluppgifterna är behandlade ok*. 1 poäng: Om två av deluppgifterna är behandlade ok*. 0.5 poäng: Om en av uppgifterna är behandlade ok*. 0 poäng: Om ingen uppgift är behandlad ok*. *) Behandlad ok betyder att det får finnas en del fel, men naturligtvis inte hur många som helst. 1. public class ComputeSums { public static void main(String[] args) { System.out.println("Skriv talen. Avsluta med 0"); int posSum = 0; int negSum = 0; Scanner scan = new Scanner(System.in); int nbr = scan.nextInt(); while (nbr != 0) { if (nbr > 0) { posSum = posSum + nbr; } else { negSum = negSum + nbr; } nbr = scan.nextInt(); } System.out.println("Summan av de positiva talen är " + posSum); System.out.println("Summan av de negativa talen är " + negSum); } } • Är ”ramen” runt programkoden rätt: public class ComputeSums { public static void main(String[] args) { ... } } • Markera inget fel om import-satsen inte finns med. Vi förutsätter att de klasser vi behöver finns tillgängliga när vi löser uppgifter på papper. • Markera inget fel om utskriften av ledtexten saknas. Det specificeras inte i uppgiften att en sådan ska med. • Är alla variabler deklarerade innan de används? Har de rätt typer? Variabelnamn bör börja med liten bokstav. 2(3) • Läses talen in på korrekt sätt? • Är variablerna posSum och negSum (eller motsvarande) nollställda innan repetitionen? • Stämmer while-satsen? Har variabeln i villkoret (nbr eller motsvarande) fått ett värde innan while-satsen? Är villkoret korrekt formulerat? Finns { } omkring satserna som skall utföras i repetitionen? • Stämmer uträkningen av summorna? • Är den avslutande utskriften korrekt? Finns det citationstecken omkring teckensträngar? Kontrollera att det inte finns citationstecken omkring variabelňnamn när en variabels värde skall skrivas ut. 2. public class TemperatureMonitor { private double min; private double max; private Alarm alarm; private int nbrAlarms; /** Skapar en temperaturövervakare som kontrollerar att patientens temperatur ligger i intervallet [min,max]. Larmanordningen alarm används för larm. */ public TemperatureMonitor(double min, double max, Alarm alarm) { this.min = min; this.max = max; this.alarm = alarm; nbrAlarms = 0; } /** Ändrar den undre gränsen för temperaturen till newMin. */ public void setNewMin(double newMin) { min = newMin; } /** Ändrar den övre gränsen för temperaturen till newMax. */ public void setNewMax(double newMax) { max = newMax; } /** Kontrollerar att temperaturen currentTemp ligger inom tillåtna gränser, larmar annars. */ public void checkTemperature(double currentTemp) { if (currentTemp < min || currentTemp > max) { alarm.temperatureAlarm(); nbrAlarms++; } } /** Returnerar antalet gånger temperaturövervakaren larmat. */ public int getNbrAlarms() { return nbrAlarms; } } • Finns public class TemperatureMonitor {...} runt omkring? • Saknas något attribut? Finns något onödigt attribut med? Har attributen rätt typer? Det måste finnas attribut för min- och maxtemperatur, alarm samt antal alarm. • Är det med private eller public deklarerat vad som skall vara åtkomligt utanför klassen eller ej? • Görs rätt saker i konstruktorn? Får attributen rätt startvärden? Observera att attribut automatiskt får startvärden när de skapas (gäller inte andra variabler). Attribut av typen int får startvärdet 0, attribut av typen referens får startvärdet null etc. 3(3) • • • • 3. Attributet nbrAlarms (eller motsvarande) behöver alltså inte få något värde i konstruktorn. Det är ändå lämpligt att för tydlighetens skull tilldela sådana attribut startvärden i konstruktorn. Görs rätt saker och används rätt attribut i respektive metod? Är villkoret i if-satsen i metoden checkTemperature korrekt? Anropas metoden temperatureAlarm på rätt sätt? Ökas antal larm? Istället för nbrAlarms++; kan man skriva nbrAlarms = nbrAlarms + 1; Finns det en return-sats i varje funktion? Returneras rätt värde? Stämmer returvärdets typ med typen som anges i metodrubriken? a) Följande variabler deklareras i main-metoden: namn theAlarm m nbrTimes typ Alarm TemperatureMonitor int b) Ett TemperatureMonitor-objekt skapas. Temperaturmonitorns min- och max-värde är från början 36.5 respektive 38.0 och alarm ska ges via det objekt theAlarm refererar till. Referensvariablen m refererar till det nyskapade objektet. c) Larmet gick 2 ggr. d) Följande variabler och objekt finns: theAlarm m nbrTimes 2 min 36.5 max 37.8 alarm nbrAlarms • • • • 2 Finns alla variabler med (theAlarm, m och nbrTimes)? Refererar referensvariablerna till rätt objekt? Finns rätt antal objekt med (2 st.)? Finns alla attribut med i TemperatureMonitor-objektet? Tänk på att antal attribut och namnen på attributen skall stämma överens med den skrivandes lösning till uppgift 2. • Har attributen rätt värden?