INF1000 (Uke 12) Sortering

Like dokumenter
Eksamen høsten 2003 Den store bøygen i INF1000 er de obligatoriske oppgavene.

! " ##$ % 4 2, &/ ( & +, )-. &* &/ ),* 0, 1 1 ( &/ 2& &, & &/ &,, &/" 2 &/ 2 ) *

( & ( &/ 2& , )-. &* &/ ),* 0, &/ 2 ) *

Uke 8 - Oppramstyper, HashMap og Innstikksortering, litt javadoc. 17. oktober 2013, Arne Maus Inst. for informatikk, UiO

Oppramstyper, HashMap og Innstikksortering, litt. 6. oktober 2009, Arne Maus Inst. for informatikk, UiO

UNIVERSITETET I OSLO

INF Forelesning 10. Eksempler på Hashmap Oppramstyper Innstikksortering Javadoc

UNIVERSITETET I OSLO

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

UNIVERSITETET I OSLO

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

INF Uke 10. Løsningsforslag ukesoppgaver oktober 2012

UNIVERSITETET I OSLO

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

INF1010 våren januar. Objektorientering i Java

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

IN1010 våren januar. Objektorientering i Java

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

UNIVERSITETET I OSLO

Oversikt II. Innhold. INF1000 (Uke 12) Oversikt I. Sortering. Lære å lage proff programvare ved å lage. en generell klasse for sortering

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

Innhold. INF1000 (Uke 12) Sortering og eksamensoppgaver. Oversikt II. Oversikt I. Om sortering. Litt om dokumentasjon av kode. Deler av eksamen H03

De neste ukene. INF1000 Uke 12. Prøveeksamen. Nå - Prøveeksamen. Forelesning om IT og samfunn neste uke (13/11).

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Gjennomgang av eksamen H99

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

UNIVERSITETET I OSLO

To måter å programmere på. Java 12. Programmering med objekter. Statisk programmering

UNIVERSITETET I OSLO

INF1000 (Uke 14) Resten av eksamen H03 + del av V05

INF1010 Sortering. Marit Nybakken 1. mars 2004

UNIVERSITETET I OSLO

INF1000 oppgaver til uke 38 (17 sep 23 sep)

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

INF1000 (Uke 4) Mer om forgreninger, While-løkker

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

INF1000 Forelesning 9. Hashmap Eksempel: Flyreservasjon

Forelesning inf Java 4

HashMap. INF1000 Forelesning 9. Ulike versjoner i Java 1.4 (gammel) og Java 1.5/1.6 av HashMap. Objekter lagres med en søkenøkkel

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

Løsningsforslag til eksamen i INF1000 våren 2006

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

INF1000: Forelesning 7

INF Uke 10. Ukesoppgaver oktober 2012

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000: noen avsluttende ord

UNIVERSITETET I OSLO

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

Hva er en metode? INF1000 Forelesning 8. Hva skjer når vi kaller en metode? Hvorfor bruke metoder?

INF1000: Forelesning 7. Konstruktører Static

INF 1000 Prøveeksamen. 23. november Ole Christian og Arne. Oppgave 1 (10 poeng) Er disse programsetningene lovlige i Java? Oppgave 2 (10 poeng)

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

INF1000 Forelesning 8. Litt repetisjon: Metoder og klasser Innkapsling av variable og metoder Hvordan gripe an et stort problem?

Forelesning inf Java 5

Body Mass Index (BMI) INF1000 : Forelesning 3. Ferdig program (forts.) Ferdig program

INF1000 : Forelesning 4

Forelesning inf Java 5

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

INF1000 : Forelesning 3

INF1000: Forelesning 6. Klasser og objekter del 1

Oppgave 1 - Kortsvarsoppgave. INF1000 eksamen V05. Oppgave 1 (c) Oppgave 1 (b) Svar: a = 9, b=10

Oblig4 - forklaringer. Arne og Ole Christian

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

Ukeoppgaver INF1000: 12. feb 16. feb

INF 1000 høsten 2011 Uke september

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

UNIVERSITETET I OSLO

Dagens tema Kapittel 8: Objekter og klasser

Hva er en metode. Hva skjer når vi kaller en metode

INF1000 undervisningen INF 1000 høsten 2011 Uke september

UNIVERSITETET I OSLO

Introduksjon til objektorientert programmering

Leksjon 6. Objekt. Evt. importsetninger. public class Klasse { Konstruktør. Objektmetoder. Innkapsling (private): set-og get-metoder

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

Inf1000 (Uke 10) HashMap og ArrayList

Velkommen til. INF våren 2016

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Blokker og metoder INF1000 (Uke 6) Metoder

Praktisk informasjon. Repetisjon: While-løkker. I dag. INF1000 (Uke 5) Mer om løkker, arrayer og metoder. Oblig 2 er lagt ut

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

UNIVERSITETET I OSLO

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

INF1000 (Uke 6) Mer om metoder, tekster

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

Transkript:

INF1000 (Uke 12) Sortering Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B. Kristoffersen

Innhold Om sortering Sortering av heltall Litt om dokumentasjon av kode Deler av eksamen H03 2

Oversikt I Lære å løse et vanskelig problem Sortering mange metoder, her Innstikksortering Sortere hva: Heltall Tekster En tabell (2-dim) etter verdiene i første kolonne Eks : telefonkatalogen (sortert på navn) 3

Oversikt II Lære abstraksjon Når vi har løst ett problem, kan lignende problemer løses tilsvarende Lære å lage proff programvare ved å lage en generell klasse for sortering Hvordan deklarere en slik klasse Javadoc lage dokumentasjon Testing Hvordan utvikle programmet 4

Sortering Mange datatyper kan sorteres Krav: operatorer som <, <=, =, >, >=,!= må ha mening Eksempler Tall Tekster (leksikografisk = i samme rekkefølge de ville stått i et leksikon) Tabeller av tekster eller tall 5

Sortering Vi må ha en algoritme (oppskrift) for sortering Det finns mange titalls (hundretalls) metoder å velge blant Vi skal se på innstikkssortering Dette er den raskeste metoden når vi skal sortere få elementer (typisk mindre enn 50 elementer) 6

Hvorfor sorterer vi For å få noen tall i en bestemt (stigende eller synkende) rekkefølge Eksempel: lotto-tallene Sortere tekster (navnelister) for raskere oppslag Sortere noen opplysninger som hører sammen, ved å sortere på en av opplysningene Eksempel: Telefonkatalogen (navn, adresse, telefonnummer informasjonen sortert på navn) 7

Vi skal først lære å sortere heltall Dette skal vi (med minimale endringer) bruke til å sortere: String-arrayer (tekster) Sammenhengende opplysninger i en 2-dim array av tekster (hver linje er opplysninger om ett objekt) Eks : Telefonkatalogen navn adr. postnr. tlf. 8

En felles klasse for sortering Vi ønsker en klasse med tre varianter av sortering: Heltall Tekster To-dimensjonal tekst-arrays (sortert på data i 1. kolonne) 9

Class ISort public class ISort { public static void sorter(int [] a) { public static void sorter(string [] a) { public static void sorteretterkol1(string [] [] a) { // end class ISort 10

class TestInnstikkSortering { public static void main ( String[] args) { int [] a = {3,1,7,14,2,156,77; String [] navn = {"Ola", "Kari", "Arne", "Jo"; String [][] telefonliste = { {"Per","22852451", {"Arne","33445566", {"Kari","44452611", {"Jo","55010102"; // sorter heltall - skriv ut ISort.sorter(a); for (int i = 0; i < a.length; i++) System.out.println("b[" + i +"]= " + a[i]); System.out.println("\n Test tekst-sortering:"); // sorter Stringer - skriv ut ISort.sorter(navn); for (int i = 0; i < navn.length; i++) System.out.println("navn[" + i +"]= " + navn[i]); System.out.println("\n Test 2dim tekst-sortering:"); // sorter Tabell - skriv ut ISort.sorterEtterKol1(telefonliste); for (int i = 0; i < navn.length; i++) System.out.println("navn[" + i +"]= " + telefonliste[i][0] + ", med tlf.: " + telefonliste[i][1] ); 11

Heltalls-array a 3 1 7 14 2 156 77 "Ola "Kari "Arne "Jo" En-dimensjonal String-array navn "Per "22852451" To-dimensjonal String-array telefonliste "Arne "33445566" "Kari "44452611" Pekere for alle radene "Jo 55010102 Pekere for hvert element i rad nr. 3

>java InnstikkSortering b[0]= 3 b[1]= 1 b[2]= 7 b[3]= 14 b[4]= 2 b[5]= 156 b[6]= 77 Test av test-programmet med tomme sortering-metoder Test tekst-sortering: navn[0]= Ola navn[1]= Kari navn[2]= Arne navn[3]= Jo Test 2dim tekst-sortering: telefonliste[0]= Per, med tlf.: 22852451 telefonliste[1]= Arne, med tlf.: 33445566 telefonliste[2]= Kari, med tlf.: 44452611 telefonliste[3]= Jo, med tlf.: 55010102 13

Sortering av heltall innstikksmetoden a 3 1 7 14 2 156 77 a Se på arrayen element for element fra venstre Sorterer det vi hittil har sett på ved : Hvis det nye elementet vi ser på ikke er sortert i forhold til de vi allerede har sett på: Ta ut dette elementet (gjem verdien i en variabel t) Skyv de andre elementene vi her sett på, en-etter-en, ett hakk til høyre. Slutt når elementet i t kan settes inn på sortert plass Den sorterte delen er nå ett element lenger (sett fra venstre) Når vi har sett på alle elementene, er hele arrayen sortert 14

Sorter 1 på plass i forhold til 3 steg 1 a 3 1 7 14 2 156 77 t 1 steg 2 3 3 7 14 2 156 77 a t 1 steg 3 1 3 7 14 2 156 77 a t 1

7 og 14 står riktig, Sorter 2 på plass i forhold til : 1,3,7,14 steg 4 1 3 7 14 2 156 77 a steg 5 1 3 7 14 2 156 77 a steg 6 a 1 3 7 14 2 156 77 t 2 flytt: 3,7,14 ett hakk til høyre steg 7 a 1 3 3 7 14 156 77 t 2 steg 8 a 1 2 3 7 14 156 77 t 2

i k+1 Kode for å flytte ett element på plass : a 1 3 7 14 2 156 77 t 2 // a[k +1 ] står muligens på // feil plass, ta den ut int t = a[k + 1], i = k; a i k+1 1 3 3 7 14 156 77 t 2 // skyv a[i] mot høyre ett hakk til // vi finner riktig plass til t while (i >= 0 && a[i] > t) { a[i + 1] = a[i]; i--; a 1 2 3 7 14 156 77 t 2 // sett t inn på riktig plass a[i + 1] = t;

public class ISort { public static void sorter(int [] a) { for (int k = 0 ; k < a.length-1; k++) { // a[k +1 ] står muligens på feil plass, ta den ut int t = a[k + 1], i = k; // skyv a[i] mot høyre ett hakk til // vi finner riktig plass til t while (i >= 0 && a[i] > t) { a[i + 1] = a[i]; i--; // sett t inn på riktig plass a[i + 1] = t; // end heltall-sortering

>java InnstikkSortering b[0]= 1 b[1]= 2 Resultat av sortering med heltalls-metoden kodet, de to andre tomme b[2]= 3 b[3]= 7 b[4]= 14 b[5]= 77 b[6]= 156 Test tekst-sortering: navn[0]= Ola navn[1]= Kari navn[2]= Arne navn[3]= Jo Test 2dim tekst-sortering: telefonliste[0]= Per, med tlf.: 22852451 telefonliste[1]= Arne, med tlf.: 33445566 telefonliste[2]= Kari, med tlf.: 44452611 telefonliste[3]= Jo, med tlf.: 55010102

Sortering av tekster (String) "Ola "Kari "Arne "Jo" a Vi skal sortere denne ved å bytte om på pekerne (la a[0] peker på Arne, osv.) med innstikkmetoden 20

Sortere de to første elementene ved å bytte om pekere a t "Ola "Kari "Arne "Jo" t = a[1]; "Ola "Kari "Arne "Jo" a t a[1]= a[0]; "Ola "Kari "Arne "Jo" a t a[0]= t;

public static void sorter(int [] a) { // Sorterer heltallsarrayaen 'a'. for (int k = 0 ; k < a.length-1; k++) { int t = a[k + 1], i = k; while (i >= 0 && a[i] > t) { a[i + 1] = a[i]; i--; a[i + 1] = t; // end heltall-sortering public static void sorter(string [] a) { // Sorterer String-arrayen 'a'. for (int k = 0 ; k < a.length-1; k++) { String t = a[k + 1]; int i = k; while (i >= 0 && ( a[i].compareto(t) > 0) ){ a[i + 1] = a[i]; i--; a[i + 1] = t; // end String-sortering

>java InnstikkSortering b[0]= 1 b[1]= 2 b[2]= 3 Test med heltall og enkel String-sortering kodet, 2dim sortering tom b[3]= 7 b[4]= 14 b[5]= 77 b[6]= 156 Test tekst-sortering: navn[0]= Arne navn[1]= Jo navn[2]= Kari navn[3]= Ola Test 2dim tekst-sortering: telefonliste[0]= Per, med tlf.: 22852451 telefonliste[1]= Arne, med tlf.: 33445566 telefonliste[2]= Kari, med tlf.: 44452611 telefonliste[3]= Jo, med tlf.: 55010102

Sortering av 2-dim String array "Per "22852451" "Arne "33445566" a "Kari "44452611" "Jo 55010102 Vi kan sortere denne på to måter: Bytte om på pekerne til radene (la a[0] peker på Arne -raden,..osv) Enklest Bytte om på pekerne til hvert element i hver rad Mye mer arbeid, vanskeligere kode, langsommere 24

public static void sorter(string [] a) { // Sorterer String-arrayen 'a'. for (int k = 0 ; k < a.length-1; k++) { String t = a[k + 1]; int i = k; while (i >= 0 && ( a[i].compareto(t) > 0) ){ a[i + 1] = a[i]; i--; a[i + 1] = t; // end String-sortering public static void sorteretterkol1(string [] [] a) { // Sorterer den 2-dim String-arrayen 'a ettter verdi i kol.1. for (int k = 0 ; k < a.length-1; k++) { String [] trad = a[k + 1]; int i = k; while (i >= 0 && ( a[i][0].compareto(trad[0]) > 0) ){ a[i + 1] = a[i]; i--; a[i + 1] = trad; // end 2-dim String-sortering

M:\INF1000\prog2>java InnstikkSortering b[0]= 1 b[1]= 2 b[2]= 3 b[3]= 7 b[4]= 14 b[5]= 77 b[6]= 156 Alle sorterings metodene skrevet Test tekst-sortering: navn[0]= Arne navn[1]= Jo navn[2]= Kari navn[3]= Ola Test 2dim tekst-sortering: telefonliste[0]= Arne, med tlf.: 33445566 telefonliste[1]= Jo, med tlf.: 55010102 telefonliste[2]= Kari, med tlf.: 44452611 telefonliste[3]= Per, med tlf.: 22852451

Javadoc proff dokumentasjon av klassene Legg inn spesielle kommentarer i programmet ditt (over hver metode og klasse) Kjør programmet javadoc som automatisk genererer en oversiktlig dokumentasjon 27

/** Klasse for sortering etter 'innstikk-metoden', se Rett på Java - kap.5.7. Sortering av heltallsarray, tekster og en to-dimensjonal tekst-array sortert etter verdiene i første kolonne.<br> N.B. Bare velegnet for mindre enn 100 elementer. * Copyright : A.Maus, Univ. i Oslo, 2003 **********************************************************/ public class ISort { /** Sorterer heltall i stigende rekkefølge @param a heltallsarrayen som sorteres * Endrer parameter-arrayen. ********************************************/ public static void sorter(int [] a) { /** * Sorterer String-arrayer i stigende leksikografisk orden. @param a arrayen som sorteres * Endrer parameter-arrayen ********************************************/ public static void sorter(string [] a) { /** * Sorterer en to-dimensjonale String-array * etter verdiene i første kolonne. * Nytter pekerombytting av radpekerne. * Antar at alle radene har minst ett element * @param a en to-dimensjonal array som sorteres * Endrer parameter-arrayen. ******************************************************/ public static void sorteretterkol1(string [] [] a) { // end class ISort

Dokumentasjon av klassen og metodene -javadoc >javadoc ISort.java Loading source file ISort.java... Constructing Javadoc information... Standard Doclet version 1.4.2 Generating constant-values.html... Building tree for all the packages and classes... Building index for all the packages and classes... Generating overview-tree.html... Generating index-all.html... Generating deprecated-list.html... Building index for all classes... Generating allclasses-frame.html... Generating allclasses-noframe.html... Generating index.html... Generating packages.html... Generating ISort.html... Generating package-list... Generating help-doc.html... Generating stylesheet.css... 29

Eksamen høsten 2003 Den store bøygen i INF1000 er de obligatoriske oppgavene Hovedformålet med eksamen er å skille ut de som har skjønt litt om programmering fra de som ikke har skjønt noe For de som har løst de obligatoriske oppgavene uten mye hjelp, bør eksamen være ganske enkel 32

Eksamen høsten 2003 I dag tar vi oppgave 1 Resten av oppgavesettet gjennomgås på gruppene denne uka 33

Oppgave 1.1 Hvilke utsagn er riktige om en variabel deklarert i en objektmetode? Før vi foretar en tilordning til variabelen har den ingen verdi Den kan ha en aksessmodifikator (f eks private eller public) Andre objektmetoder i samme klasse har tilgang (aksess) til variabelen Objektmetoder i andre klasser har tilgang (aksess) til den via prikk-notasjon 34

Oppgave 1.1 vurderinger NB! Les oppgaveteksten nøye!... i en objektmetode? Variable i metoder er alltid utilgjengelige utenfra. Derfor er det også uaktuelt med aksessmodifikator Som alle variable er metodevariable uten verdi i starten. De kan initieres ved deklarasjonen: int x = 0; eller ved en tilordning senere 35

Oppgave 1.1 svar Svaret på oppgave 1.1 er altså alternativ 1: Før vi foretar en tilordning til variabelen har den ingen verdi 36

Oppgave 1.2 Hvilke utsagn er riktige om en objektvariabel? Før vi foretar en tilordning har den ingen verdi Den kan ha en aksessmodifikator (f eks private eller public) Objektmetoder i samme klasse har tilgang (aksess) til variabelen Objektmetoder i andre klasser har tilgang (aksess) til den via prikk-notasjon dersom variabelen er deklarert som public 37

Oppgave 1.2 vurderinger Vi har følgende aksessmodifikatorer: Private: skjult for alle andre klasser Protected: skjult for alle andre klasser (unntatt subklasser) kun tilgjengelig for klasser i samme pakke public åpen for alle Dere vet ikke hva pakker og subklasser er; det kommer i INF1010 Dere trenger bare å vite: private skjult public åpen 38

Oppgave 1.2 svar Svaret på oppgave 1.2 er da alle alternativene 1, 2, 3, 4 39

Oppgave 1.3 Hvor mange heltall settes det av plass til (array-lengde) i setningen int[] tallene = new int[100]; Alternativer: 99, 100, 101 heltall Svar: 100 heltall 40

Oppgave 1.4 Hvor mange ganger skrives Eksamen ut? for (int i = 0; i < 100; i++) { for (int j = 0; j < 99; j++) { System.out.println( Eksamen ); Svar: 100 * 99 = 9900 ganger 41

Oppgave 1.5 Hvor mange ganger skrives INF 1000 ut? for (int i = 0; i < 3; i++) { for (int j = 0; j <= i; j++) { System.out.println("INF 1000"); 42

Oppgave 1.5 svar i j 0 0 1 0, 1 2 0, 1, 2 Svar: 6 ganger 43

Oppgave 1.6 Hvilken verdi har alder etter denne koden? int alder = 4; int nyalder = alder--; // A alder += nyalder; // B alder++; // C 44

Oppgave 1.6 svar Utskrift alder nyalder A B C 3 4 7 4 8 4 Svar: alder har verdien 8 etter at alle setningene er utført 45

Oppgave 1.7 Anta at vi har et program hvor en av klassene blant annet har følgende objektvariabeldeklarasjon: HashMap personer = new HashMap(); Klassen inneholder blant annet metoder for å legge inn objekter av klassen Person (med en passende nøkkel, f eks personnummer) i HashMap-en og for å løpe gjennom alle Person-objektene i HashMapen. Sistnevnte metode, som skal kalle på en metode SkrivUt() i hvert av objektene i HashMap-en, ser slik ut: void skrivalle () { Iterator liste = personer.values().iterator(); while (liste.hasnext()) {... b.skrivut(); 46

Oppgave 1.7 Innholdet i while-løkken ovenfor er ikke ferdig utfylt. Hvilke(t) av følgende alternativer kan vi erstatte... med slik at metoden virker slik den skal? Person b = it.next(); Person b = (Person)it.next(); Person b = liste.next(); Person b = (Person)liste.next(); Bil b = (Bil)it.next(); Ingen av alternativene ovenfor 47

Oppgave 1.7 vurderinger NB! En del spørsmål vil være formet slik at de sjekker forståelse. Målet er at de som kopierer blindt fra læreboken eller lysark, skal tabbe seg ut De fleste eksemplene kaller iteratoren for it, men i dette eksemplet heter den liste Determange eksemplermed Bil i læreboken, men de har ingenting med dette eksemplet å gjøre Derimot demonstrerer eksemplene at man må typekonvertere når man bruker en iterator 48

Oppgave 1.7 svar Svaret på oppgave 1.7 blir da alternativ 4: Person b = (Person)liste.next(); 49

Oppgave 1.8 Hva skrives ut? int i = 11; int j = i; int k = 32; j er 11, j*i er 121 if (k > j * i k < i) { System.out.println("A"); else { if (k < j * i && k > i) { System.out.println("B"); else { System.out.println("C"); Svar: B 32 > 121 er false 32 < 11 er false 32 < 121 er true 32 > 11 er true 50

Oppgave 1.9 Hvordan beregne summen av tallene i a? int[] a = new int[77]; int sum = 0; 51

Oppgave 1.9 svar int i = 0; while (i < a.length) { sum = a[i]; i++; int i = 0; while (i < a.length) { sum += a[i]; ++j; int i = 0; while (i < a.length) { sum += a[i]; i++; Feil sum, får sum = a[76] Feil sum, evig løkke, sum = a[0]+a[0]+ JA riktig sum int i = 0; while (i++ < a.length) { sum += a[i-1]; JA riktig sum 52

Oppgave 1.9 svar for (int i = 0; i < a.length; i++) { sum += a[i]; JA riktig sum for (int i = 1; i <= a.length; i++) { sum += a[i-1]; JA riktig sum for (int i = 0; i < a.length; ++i) { sum = sum + a[i]; JA riktig sum 53

Oppgave 1.10 Hvilken verdi får k? int i = 11; int k = i/3; Alternativer: 3, 3.67, 4, ingen av alt. Svar: k blir 3 (heltallsdivisjon) 54

Oppgave 1.11 Hva blir k? Alternativer: 12, 24, 6 void dobleverdi(int k) { k = k * 2; Svar: 12 (ikke retur) int k = 12 dobleverdi(k) System.out.println( Verdien til k er + k); 55

Oppgave 1.12 Anta at følgende program utføres: class Studentregister { public static void main (String[] arg) { Student s = new Student("Ole", "Karl Johans gt 1"); Student p = new Student("Marit","Karl Johans gt 2"); System.out.println(s.fåNavn()+" og "+p.fånavn()); class Student { String navn = "Grete"; String adresse = "Blindernveien 3"; Student (String navn, String adresse) { this.navn = navn; this.adresse = adresse; String fånavn () {return navn; 56

Oppgave 1.12 Hva blir utskriften på skjermen? Grete og Grete Ole og Ole Marit og Marit navn og navn Ole og Marit s.fånavn() og s.fånavn() Marit og Ole Ingen av alternativene over 57

Oppgave 1.12 vurderinger Det er ingen klassevariable (angitt med static) i denne oppgaven, kun vanlige objektvariable Deklarasjonene String navn = "Grete"; String adresse = "Blindernveien 3"; utføres først hver gang et nytt objekt lages, men overskrives så av det som skjer i konstruktøren: Student (String navn, String adresse) { this.navn = navn; this.adresse = adresse; Metoden fånavn er en vanlig objektmetode og utføres inne i det objektet som angis i kallet: s.fånavn() og p.fånavn() 58

Oppgave 1.12 svar Det riktige svaret på oppgave 1.12 blir da alternativ 5: Ole og Marit 59

Resten av oppgavesettet blir gjennomgått på gruppene 60