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?