L?sningsforslag ukeoppg. 6: 26. sep - 2. okt (INF1000 - H?st 2012)
For l?sningsforslag til oppgaver i l?reboken "Rett p? Java", se bokens nettside.
L?sningsforslag til repetisjonsoppgavene mangler.
NB! Legg merke til at disse er l?sningsforslag. L?sningene
dine trenger ikke ? v?re like med disse forslag for ? v?re
riktige. Det er vanlig i programmering at samme oppgave kan l?ses
p? mange vidt forskjellige m?ter, og alle fremgangsm?ter er ok
i INF1000 s? lenge de leder fram til riktig resultat og oppfyller
kravene som st?r i oppgaveteksten.
Oppgaver
- KursRegister.java:
(a) Studér f?lgende program. Finn ut hva som er klassene, objektene, og pekerne i programmet, og hvordan disse er brukt. Unders?k gangen i programmet n?r det kj?res. Hvorfor skriver det ut forskjellig informasjon om to kurs n?r det bare er én System.out.println i programmet? Begge klassene lagres i én fil, kalt KursRegister.java.class Kurs { // Objektvariabler: String kode; int studiepoeng; // Objekt-metode (dvs. uten "static"): void skrivUt() { System.out.println("Kurs med kode: " + kode + ", og studiepoeng: " + studiepoeng); } } class KursRegister { // Klasse-metode (dvs. med "static"): public static void main(String[] args) { Kurs inf, mat; // pekere (variabler som kan peke p? Kurs-objekter) inf = new Kurs(); // Lager et objekt av klassen Kurs inf.kode = "INF1000"; // Setter verdier i objektet... inf.studiepoeng = 10; inf.skrivUt(); mat = new Kurs(); // Lager et objekt til av klassen Kurs mat.kode = "MAT1001"; mat.skrivUt(); } }
KJ?REEKSEMPEL: > java KursRegister Kurs med kode: INF1000, og studiepoeng: 10 Kurs med kode: MAT1001, og studiepoeng: 0
Programmet skriver ut informasjon om to forskjellige kurs fordi metoden skrivUt() blir kalt to ganger fra klassen KursRegister, og den kalles via forskjellig Kurs-objekt hver gang, ved hjelp av disse setningene i koden ovenfor:inf.skrivUt(); ... mat.skrivUt();
(b) Mange kurs: Endre programmet slik at kursene lagres i en array av Kurs-pekere, i stedet for enkelt-pekerne inf og mat. F.eks. skal f?rste element i arrayen v?re kurs[0], og koden til denne (kurs[0].kode) skal v?re "INF1000". Lag en l?kke som oppretter tre kurs-objekter, setter verdien 10 som studiepoeng i alle, og setter kode til kursene ved ? ta ett og ett navn fra f?lgende tilleggsarray:String[] koder = { "INF1000", "MAT1001", "INF1080" };
L?kken skal til slutt kalle metoden skrivUt() for ? skrive ut info om kursene som opprettes.class Kurs { // Objektvariabler: String kode; int studiepoeng; // Objekt-metode (dvs. uten "static"): void skrivUt() { System.out.println("Kurs med kode: " + kode + ", og studiepoeng: " + studiepoeng); } } class KursRegister { // Klasse-metode (dvs. med "static"): public static void main(String[] args) { Kurs[] kurs = new Kurs[3]; // Array av Kurs-pekere String[] koder = { "INF1000", "MAT1001", "INF1080" }; for (int i = 0; i < kurs.length; i++) { kurs[i] = new Kurs(); // Lager et objekt av klassen Kurs kurs[i].studiepoeng = 10; // Setter verdier i objektene... kurs[i].kode = koder[i]; kurs[i].skrivUt(); } } } KJ?REEKSEMPEL: > java KursRegister Kurs med kode: INF1000, og studiepoeng: 10 Kurs med kode: MAT1001, og studiepoeng: 10 Kurs med kode: INF1080, og studiepoeng: 10
(c) Legg til foreleser: Anta at hvert kurs har én foreleser og at vi bare ?nsker ? lagre navnet p? foreleseren i hvert kurs. Utvid programmet med objektvariabelen String foreleser i klassen Kurs, og slik at verdien i denne initialiseres med f?lgende foreleser-navn for de tre kurs, henholdsvis "Ragnhild K.", "Erik L.", og "Roger A." (bruk gjerne en tilleggsarray slik som i del (b) ovenfor). Utvid ogs? metoden skrivUt() slik at det f?r tak i og skriver ut navnet p? foreleseren i hvert kurs.class Kurs { // Objektvariabler: String kode; int studiepoeng; String foreleser; // Objekt-metode (dvs. uten "static"): void skrivUt() { System.out.println("Kurs med kode: " + kode + ", og studiepoeng: " + studiepoeng + ". Foreleser: " + foreleser); } } class KursRegister { // Klasse-metode (dvs. med "static"): public static void main(String[] args) { Kurs[] kurs = new Kurs[3]; // Array av Kurs-pekere String[] koder = { "INF1000", "MAT1001", "INF1080" }; String[] forelesere = { "Ragnhild K.", "Erik L.", "Roger A." }; for (int i = 0; i < kurs.length; i++) { kurs[i] = new Kurs(); // Lager et objekt av klassen Kurs kurs[i].studiepoeng = 10; // Setter verdier i objektene... kurs[i].kode = koder[i]; kurs[i].foreleser = forelesere[i]; kurs[i].skrivUt(); } } } KJ?REEKSEMPEL: > java KursRegister Kurs med kode: INF1000, og studiepoeng: 10. Foreleser: Ragnhild K. Kurs med kode: MAT1001, og studiepoeng: 10. Foreleser: Erik L. Kurs med kode: INF1080, og studiepoeng: 10. Foreleser: Roger A.
(d) Legge til studenter: Anta at hvert kurs har maks. 200 studenter. Hvordan kan vi legge til informasjon om studentene i kursene? Unders?k f?lgende to muligheter: Legge til en array String[] studenter; vs. ? lage en ny klasse Student med en objektvariabel navn. Hvilken av de to variantene vil v?re mest hensiktsmessig hvis vi vil lagre enda mer informasjon om hver student i systemet (i tillegg til navn)?Det er bedre ? lage en klasse Student, og s? lagre informasjon om studentene i objekter av denne klassen, f.eks. ved hjelp av en arrayStudenter[] studenter = new Studenter[200]; deklarert i klassen Kurs. Fordelen er at man da kan samle forskjellig type informasjon om en student i ett og samme student-objekt.