Oppgavesettet: Ukeoppgaver 11.
Oppgave merket med n?kkelsymbol er plukket ut som spesielt representativ for de viktigste temaene fra ukens forelesning, og alle b?r ha som minimumsm?l ? l?se denne selvstendig.
Oppgave 1
Legg inn i et hashmap
Du har klassen Dyr (se under) Lag en klasse DyreMap, som inneholder en main-metode. Her skal du deklarere et HashMap
class Dyr { String navn; String idnr; Dyr(String navn, String idnr) { this.navn = navn; this.idnr = idnr; } String getIDnr() { return idnr; } }
L?sningsforslag
import java.util.*; class DyreHashMap { public static void main(String[] args) { // Oppretter et HashMap med dyr: HashMap<String, Dyr> dyr = new HashMap<String, Dyr>(); // Oppretter tre dyre-objekter og legger dem inn i HashMappet: Dyr d1 = new Dyr("Albert", "1234"); Dyr d2 = new Dyr("Shaun", "2345"); Dyr d3 = new Dyr("Mathilde", "3456"); dyr.put(d1.getIDnr(), d1); dyr.put(d2.getIDnr(), d2); dyr.put(d3.getIDnr(), d3); // L?per gjennom HashMappet og ser at dyrene er lagt inn for (Dyr d: dyr.values()) { System.out.println(d.navn + " " + d.getIDnr()); } } } class Dyr { String navn; String idnr; Dyr(String navn, String idnr) { this.navn = navn; this.idnr = idnr; } String getIDnr() { return idnr; } }
KJ?REEKSEMPEL:
Albert 1234
Mathilde 3456
Shaun 2345
Opppgave 2 - Array med tall
a) Lag et program som ber bruker taste inn tre heltall og lagrer disse i en array kalt tall:
int[] tall = new int[3];
b) Sum av array: Utvid programmet slik at det regner ut summen av tallene ved hjelp av en l?kke, og skriver ut resultatet.
c) Minste verdi: Utvid programmet slik at det finner og skriver ut det minste tallet i arrayen.
d) Lave verdier: Legg til programkode som skriver ut alle verdiene i arrayen som er mindre enn 10.
e) S?k: Legg til programkode som skriver ut en beskjed om verdien 5 finnes eller ikke finnes i arrayen.
import easyIO.*; class Ukeoppg3_3 { public static void main(String[] args) { In tast = new In(); Out skjerm = new Out(); int[] tall = new int[3]; // (a) Lese 3 tall fra tastatur: for (int i = 0; i < 3; i++) { // Ledetekst: skjerm.out("Angi tall[" + i + "]: "); // Les et tall fra tastatur og lagre det i arrayen tall[]: tall[i] = tast.inInt(); } // (b) Sum av array: int sum = 0; for (int i = 0; i < 3; i++) { sum += tall[i]; } skjerm.outln("(b) Sum av tallene = " + sum); // (c) Minste verdi: int minste = tall[0]; for (int i = 0; i < 3; i++) { if (tall[i] < minste) { minste = tall[i]; } } skjerm.outln("(c) Minste verdi = " + minste); // (d) Lave verdier: skjerm.out("(d) Lave verdier (< 10): "); for (int i = 0; i < 3; i++) { if (tall[i] < 10) { skjerm.out(tall[i] + " "); } } skjerm.outln(); // (e) S?k: boolean funnet = false; for (int i = 0; i < 3; i++) { if (tall[i] == 5) { funnet = true; } } skjerm.out("(e) Verdien 5 finnes "); if (! funnet) { skjerm.out("ikke "); } skjerm.outln("i arrayen"); } }
KJ?REEKSEMPEL:
> java Ukeoppg3_3 Angi tall[0]: 2 Angi tall[1]: 7 Angi tall[2]: 11 b) Sum av tallene = 20 c) Minste verdi = 2 d) Lave verdier (< 10): 2 7 e) Verdien 5 finnes ikke i arrayen
Oppgave 3
Metoder (10 poeng) oppgave 5 fra eksamen h09
a) Nedenfor er det deklarert en metode sum(int[] array), som skal beregne summen av tallene i en int-array. Vil metoden kompilere? Hvis nei, forklar hva som m? endres for at metoden skal kompilere.
public void sum ( int[] array ) { int sum = 0; for (int i=0; i < array.length: i++) { sum += array[i]; } return sum; }
L?sningsforlsag
Tre syntaksfeil:
-
I linje 3 brukes ’:’ i stedet for ’;’ etter betingelsen i for-l?kka.
-
I linje 4 brukes ’{’/’}’ i stedet for ’[’/’]’ som paranteser for ? angi plass i arrayen.
-
I linje 6 returneres en int-verdi, selv om metoden er deklarert void. Endre metodensreturtype til int.
b) Deklararer en metode snitt(int[] array), som skal beregne gjennomsnittet av tallene i parameteren array av type int-array. Snittet skal beregnes med flyttallsdivisjon og returverdien skal v?re av type double. Du skal skrive hele metoden, inkludert signaturen.
L?sningsforslag
double snitt (int[] array) { double snitt = 0.0; for (int i = 0; i < array.length; i++) { snitt += array[i]; } return snitt/array.length ; }
c) Vi kan beregne en gjenstands snitthastighet ved ? dividere tilbakelangt distanse p? tid. Deklararer en metode som tar to double-parametre distanse og tid, og som returnerer hastigheten som en double-verdi. Hvis verdien til tid er 0, skal metoden returnere -1. Du skal skrive hele metoden, inkludert signaturen. Finn p? et passende metodenavn.
L?sningsforslag
double snittHastighet (double distanse, double tid) { if (tid == 0) { return -1; }else{ return distanse/tid; } }
d) I sj?- og luftfart oppgis ofte hastigheter i knop. ?n knop er definert som én nautisk mil pr. time, som tilsvarer 1852 meter pr. time. Deklarer en metode som tar en double-parameter knop og returnerer den tilsvarende hastigheten i km/t som en double-verdi. Du skal skrive hele metoden, inkludert signaturen. Finn p? et passende metodenavn.
L?sningsforslag
double beregnKmT ( double knop ) { return knop * 1.852; }
Oppgave 4
Klasser og objekter, Oppgave 11 eksamen h05 (25 poeng)
I programmet nedenfor skal du lage en konstrukt?r til klassen Pyramide som har pyramidens bredde, lengde og h?yde som tre double-parametreparameter. Du skal ogs? lage en objektmetode i klassen Pyramide som regner ut volumet og returnerer denne verdien (du skal bruke formelen: volum = 0.333*h?yde*bredde*lengde).
Du skal ogs? skrive programkode i main som oppretter to pyramider, en med langde =30.1,bredde=30.1 og h?yde = 22.9 og en med samme grunnflate, men med dobbelt s? stor h?yde som den f?rste pyramiden.
Fra main skal du s? kalle p? volumberegningsmetoden i hvert av de to objektene og skrive ut en linje for hver pyramide med h?yde, lengde og bredde samt volumet.
L?sningsfoslag
class PyramideTest { public static void main ( String [] args) { // skriv kode her som lager to Pyramide-objekter og // skriver ut deres h?yde, lengde og volum Pyramide[] p = new Pyramide[2]; p[0] = new Pyramide(30.1,30.1,22.9); System.out.println("Pyramide "+ 30.1 +" x "+ 30.1+" x "+22.9+"har volum "+ p[0].volum()); p[1] = new Pyramide(30.1,30.1,2*22.9); System.out.println("Pyramide "+ 30.1 +" x "+ 30.1+" x "+2*22.9+"har volum "+ p[1].volum()); } // end main } // end class PyramideTest class Pyramide { double h?yde, lengde, bredde; // skriv konstrukt?r her Pyramide( double lengde, double bredde, double h?yde ){ this.lengde = lengde; this.bredde = bredde; this.h?yde = h?yde; } // skriv objektmetode her som beregner og returnerer volumet double volum(){ return 0.333*h?yde*bredde*lengde; } } // end class Pyramide
Tilbakemelding p? dette oppgavesettet kan du sende p? mail til ingridgg [a] ifi.uio.no