Forelesning inf Java 4

Like dokumenter
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

INF1000 : Forelesning 4

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

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder

for (int i=0; i<3; i++) { for (int j=0; j<5; j++) { System.out.print(i*j); System.out.println();

Forelesning inf Java 5

Forelesning inf Java 5

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

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

Ole Christian Lingjærde, 12. september 2013

Forelesning inf Java 4

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

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

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

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

En klasse er noe - en metode gjør noe (! / # <= (! * +!! ",-' %. "- -/ %.!#) )! " 0'%! * *$! "1-)) '' % '. 22!'( 7/ /! * 2 2! "*"% 8"%% 9 - -!

Blokker og metoder INF1000 (Uke 6) Metoder

INF1000: Forelesning 4. Mer om arrayer Metoder

Blokker. Uke 4, INF 1000, 13 sept Løkker og arrayer. Eksempel. Deklarasjoner inne i blokker. Institutt for Informatikk Universitet i Oslo

Inf1000 uke 5 18.sept. 2007

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:

Mer om arrayer Metoder

Oversikt. INF1000 Uke 5. Hva er for-løkker - repetisjon. Spørsmål forrige uke. Svar på spm. fra forrige uke. Litt mer om arrayer.

Teste om to tekster er like. Inf1000 uke 6 26.sept Alfabetisk ordning. Inneholder en tekst en annen? Litt om tekster Metoder

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

INF1000 (Uke 6) Mer om metoder, tekster

Rep: Metoder. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. 3 typer variable: Klassevariable. Java-programmene så langt i kurset:

INF1000 Uke 4. Innlesning fra terminal. Uttrykk og presedens. Oversikt

INF1000 : Forelesning 3

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

INF1000 (Uke 6) Mer om metoder, tekster

Orakeltjeneste på Abel Hjelp til Obligatorisk oppgave 2. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. Rep: Metoder

Oversikt. INF1000 Forelesning 6. Variable Deklarasjon. Variabel en plass i lageret int radius;

Eksempel: Body Mass Index (BMI) Forelesning inf Java 3. Ferdig program (første del) Ferdig program (siste del)

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

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

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

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

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

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

Forelesning inf Java 3

Java 4. Mer om easyio Mer om forgreninger Løkker. 7. september 2004

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

Eksempel: Body Mass Index (BMI)

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

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

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

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

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

Innlesning fra tastatur med easyio. INF1000 høst Vi må først skrive i toppen av programmet: import easyio.*;

Repetisjon INF 1000 våren 2006

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

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

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

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

Forelesning inf Java 5

Forelesning inf Java 3

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

INF1000 : Forelesning 1 (del 2)

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

INF 1000 høsten 2011 Uke 3 6. september

INF1000 : Forelesning 5

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

UNIVERSITETET I OSLO

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

Innhold uke 3. INF 1000 høsten 2011 Uke 3 6. september. Uttrykk. Variabel: En plass i hukommelsen

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

Endret litt som ukeoppgave i INF1010 våren 2004

INF1000 Uke 3. Innlesning fra terminal. Uttrykk og presedens. Oversikt. Litt repetisjon Blokker og forgreininger

Mål for INF1000. Repetisjon INF 1000 våren Representasjon av data. Programvareutvikling - oversikt

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

Forelesning inf Java 1

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger

UNIVERSITETET I OSLO

som jobbet nærmest døgnet rundt i 18 måneder i Menlo Park i California for å forberede den neste bølgen innen computing.

Litt Java-historikk. Litt Java-historikk. Ulike varianter for ulike behov. Litt Java-historikk. The Green Team

UNIVERSITETET I OSLO

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

INF1000 Behandling av tekster

INF1000 høst Forelesning 2: Innlesning fra terminal Boolean-variable if-setninger Løkker Litt mer om heltall: divisjon og modulo Arrayer

Inf1000 (Uke 5) Arrayer, filer og tekst

INF1000: noen avsluttende ord

INF1000 Metoder. Marit Nybakken 16. februar 2004

UNIVERSITETET I OSLO

Mer om uttrykk, terminal I/O, forgreninger. Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

Java 6. Eksempel med to-dimensjonal array Filbehandling Tekster

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

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

Oversikt. INF1000 Uke 4. Logisk uttrykk Beregne uttrykk. Eksempel (Feil sist) Logisk uttrykk. Litt repetisjon En feil i forrige forelesning

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; }

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java

Transkript:

Forelesning inf1000 - Java 4 Tema: Løkker Arrayer Metoder Ole Christian Lingjærde, 12. september 2012 Ole Chr. Lingjærde Institutt for informatikk, 29. august 2012 1

Repetisjon: arrayer Deklarere og opprette array - eksempler: int[] a1 = new int[100]; String[] a2 = new String[100]; I begge tilfellene over får arrayen 100 elementer, nummerert 0, 1,..., 99. Bruke array - eksempler: for (int i=0; i<100; i++) { a1[i] = i; for (int i=0; i<a2.length; i++) { a2[i] = "Posisjon nr " + i; Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 2

Repetisjon: nesting av løkker for (int i=0; i<3; i++) { for (int j=0; j<5; j++) { System.out.print(i*j); System.out.println(); i=0 i=1 i=2 j=0 j=1 j=2 j=3 j=4 Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 3

Repetisjon: nesting av løkker i=0 for (int i=0; i<3; i++) { for (int j=0; j<5; j++) { System.out.print(i*j + "\t"); System.out.println(); 0*0 0*2 0*3 0*1 0*4 i=0 i=1 i=2 j=0 j=1 j=2 j=3 j=4 0 0 0 0 0 Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 4

Repetisjon: nesting av løkker for (int i=0; i<3; i++) { i=1 for (int j=0; j<5; j++) { System.out.print(i*j + "\t"); System.out.println(); 1*0 1*2 1*1 1*3 i=0 i=1 i=2 j=0 j=1 j=2 j=3 j=4 0 0 0 0 0 0 1 2 3 4 1*4 Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 5

Repetisjon: nesting av løkker for (int i=0; i<3; i++) { i=2 for (int j=0; j<5; j++) { System.out.print(i*j + "\t"); System.out.println(); 2*0 2*1 2*2 2*3 i=0 i=1 i=2 j=0 j=1 j=2 j=3 j=4 0 0 0 0 0 0 1 2 3 4 0 2 4 6 8 2*4 Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 6

Automatisk initialisering av arrayer Når en array blir opprettet, blir den automatisk initialisert (dvs verdiene er ikke udefinerte når den er opprettet). int[] k = new int[100]; // Nå er alle k[i] == 0 double[] x = new double[100]; // Nå er alle x[i] == 0.0 boolean[] b = new boolean[100]; // Nå er alle b[i] == false char[] c = new char[100]; // Nå er alle c[i] == '\u0000' String[] s = new String[100]; // Nå er alle s[i] == null Merk: String-arrayer initialiseres med den spesielle verdien null. Dette er ikke en tekststreng og må ikke blandes sammen med en tom tekst:. For å kunne bruke verdien s[i] til noe fornuftig må du først sørge for å gi s[i] en tekststreng-verdi, f.eks. s[i] = Per eller s[i] =. Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 7

Egendefinert initialisering av en array Det er ikke alltid den automatiske initialiseringen av en array gir det vi ønsker. Vi kan da initialisere arrayen med våre egne verdier, slik som i disse eksemplene: int[] primtall = {2, 3, 5, 7, 11, 13; double[] halve = {0.0, 0.5, 1.0, 1.5, 2.0; String[] ukedager = { Mandag, Tirsdag, Onsdag, Torsdag, Fredag, Lørdag, Søndag ; Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 8

Er denne lovlig? Må alltid ha med [K] hvor K er antall elementer arrayen skal ha int[] a = new int; Ikke lovlig Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 9

Er denne lovlig? Må ha med [ ] for å angi at det er en array int a = new int[5]; Ikke lovlig Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 10

Er denne lovlig? Må ha med antall ønskede elementer int[] a = new int[]; Ikke lovlig Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 11

Er denne lovlig? int[] a = new int[99]; a[99] = (int) 3.14; Ulovlig indeks. Lovlige indekser er 0, 1,..., 98 Ikke lovlig Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 12

Er denne lovlig? Det er ikke samsvar mellom arraytypene på venstre side og høyre side double[] a = new int[100]; Ikke lovlig Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 13

Er denne lovlig? String[] s = new String[3]; s = {"juni", "juli", "august"; Initialisering av arrayer med {... må alltid skje i samme setning som arrayen deklareres. Ikke lovlig Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 14

Er denne lovlig? String[] s = new String[3]; s = new String[]{"juni", "juli", "august"; Lovlig Vi kan initialisere arrayer med {... hvor vi vil i et program, men må da skrive new datatype[ ]{... Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 15

Finne minste verdi i en array double[] a = new double[6]; double min = a[0]; for (int i=1; i<6; i++){ if (a[i] < min){ min = a[i]; 0 1 2 3 4 5 a: 2 1 5-3 1 5 Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 16

Finne minste verdi i en array a: 0 2 double min = a[0]; for (int i=1; i<6; i++){ if (a[i] < min){ min = a[i]; 1 2 3 4 1 5-3 1 min: 2 5 5 Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 17

Finne minste verdi i en array a: 0 2 i=1 true double min = a[0]; for (int i=1; i<6; i++){ if (a[i] < min){ min = a[i]; 1 2 3 4 1 5-3 1 min: 12 5 5 Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 18

Finne minste verdi i en array a: 0 2 i=2 false double min = a[0]; for (int i=1; i<6; i++){ if (a[i] < min){ min = a[i]; 1 2 3 4 1 5-3 1 min: 1 5 5 Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 19

Finne minste verdi i en array a: 0 2 i=3 true double min = a[0]; for (int i=1; i<6; i++){ if (a[i] < min){ min = a[i]; 1 2 3 4 1 5-3 1 min: -31 5 5 Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 20

Finne minste verdi i en array a: 0 2 i=4 false double min = a[0]; for (int i=1; i<6; i++){ if (a[i] < min){ min = a[i]; 1 2 3 4 1 5-3 1 min: -3 5 5 Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 21

Finne minste verdi i en array a: 0 2 i=5 false double min = a[0]; for (int i=1; i<6; i++){ if (a[i] < min){ min = a[i]; 1 2 3 4 1 5-3 1 min: -3 5 5 Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 22

Utvidelse - hvor ligger minste verdi? double min = a[0]; minpos = 0; for (int i=1; i<6; i++) { if (a[i] < min) { min = a[i]; minpos = i; Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 23

Fullstendig program import easyio.*; class MinsteVerdi { public static void main (String[] args) { In tastatur = new In(); double[] a = new double[6]; for (int i=0; i<a.length; i++) { System.out.print( Oppgi en verdi: "); a[i] = tastatur.indouble(); easyio double min = a[0]; int minpos = 0; for (int i=1; i<a.length; i++) { if (a[i] < min) { min = a[i]; minpos = i; System.out.println( Minste verdi er + min); System.out.println( Den ligger på plass + minpos); Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 24

En array-variabel er en adresse Når du har opprettet en array så inneholder arrayvariabelen adressen til stedet i hukommelsen hvor verdiene ligger lagret. Eksempel: resultatet etter at vi har utført int[] primtall = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29; kan visualiseres slik: 0 1 2 3 4 5 6 7 8 9 2 3 5 7 11 13 17 19 23 29 primtall Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 25

Hva blir utskriften fra følgende program? Oppgave (viktig å forstå!) class ToArrayer { public static void main (String [] args) { int[] x = new int[10]; int[] y = x; for (int i=0; i<10; i++) { x[i] = i; y[i] = 10-i; for (int i=0; i<10; i++) { System.out.println(x[i] + "\t" + y[i]); Test programmet Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 26

Kompilering og kjøring > javac ToArrayer.java > java ToArrayer 10 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 Merk: samme innhold i de to arrayene x og y!! Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 27

Hva som skjedde Etter å ha utført instruksjonen... int[] x = new int[10];... så er situasjonen denne: x 0 1 2 int[] y = x; x y 9 0 1 2 9 Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 28

Hva som skjedde class ToArrayer { public static void main (String [] args) { int[] x = new int[10]; int[] y = x; for (int i=0; i<10; i++) { x[i] = i; y[i] = 10-i; Denne tilordningen overskriver det vi gjør i setningen over for (int i=0; i<10; i++) { System.out.println(x[i] + "\t" + y[i]); Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 29

Kopiering av arrayer Vi kan ikke lage en kopi av en array x ved å skrive int[] y = x; siden dette bare medfører at adressen til arrayen kopieres til y. Skal vi lage en kopi, må vi først opprette en array til (f.eks. y), og så kopiere over verdiene en for en, for eksempel slik: double[] y = new double[x.length]; for (int i=0; i<x.length; i++) { y[i] = x[i]; Tips: det finnes også ferdige verktøy for å kopiere arrayer, bl.a. int[] y = (int[]) x.clone(); Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 30

Todimensjonale arrayer int[][] tabell = new int[10][50] tabell 0 1 0 1 2 3... 49 9

Oppgave: Fyll en array med samme verdi int[][] a 0 1 2 3 0 1 2 3 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 Ole Chr. Lingjærde Institutt for informatikk 5. september 2012 32

Løsning class FillArray { public static void main(string[] args) { int[][] a = new int[4][5]; for (int i=0; i<4; i++) { for (int j=0; j<5; j++) { a[i][j] = 2; Ole Chr. Lingjærde Institutt for informatikk 5. september 2012 33

Oppgave: Fyll diagonalen med verdier int[][] a 0 1 2 3 0 1 2 3 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 Ole Chr. Lingjærde Institutt for informatikk 5. september 2012 34

Løsning 1 class FillDiagonal { public static void main(string[] args) { int[][] a = new int[4][4]; for (int i=0; i<4; i++) { for (int j=0; j<4; j++) { if (i == j) a[i][j] = 1; Ole Chr. Lingjærde Institutt for informatikk 5. september 2012 35

Løsning 2 class FillDiagonal2 { public static void main(string[] args) { int[][] a = new int[4][4]; for (int i=0; i<4; i++) { a[i][i] = 1; Ole Chr. Lingjærde Institutt for informatikk 5. september 2012 36

Oppgave: bytte rader og kolonner int[][] a int[][] b 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 Ole Chr. Lingjærde Institutt for informatikk 5. september 2012 37

Innsikt b[0][1] a[1][0] Ole Chr. Lingjærde Institutt for informatikk 5. september 2012 38

Innsikt a[1][1] b[1][1] Ole Chr. Lingjærde Institutt for informatikk 5. september 2012 39

Innsikt a[1][2] b[2][1] Ole Chr. Lingjærde Institutt for informatikk 5. september 2012 40

Innsikt a[1][3] b[3][1] Ole Chr. Lingjærde Institutt for informatikk 5. september 2012 41

Løsning class Transponer { public static void main(string[] args) { int[][] a = new int[4][4]; int[][] b = new int[4][4]; <Fyll opp a med verdier>; for (int i=0; i<4; i++) { for (int j=0; j<4; j++) { b[i][j] = a[j][i]; Ole Chr. Lingjærde Institutt for informatikk 5. september 2012 42

class Image { public static void main (String[] args) { int[][] a = new int[21][21]; a[0][10] = 1; for (int i=1; i<21; i++) { for (int j=1; j<20; j++) { if (a[i-1][j-1] > 0) a[i][j] = 1; System.out.println(); for (int i=0; i<21; i++) { for (int j=0; j<21; j++) { if (a[i][j] > 0) System.out.print("o"); else System.out.print(" "); System.out.println(); Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 43

0 0 20 20 Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 44

0 0 20 a[0][10] = 1; 20 Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 45

0 0 20 for (int i=1; i<20; i++) { for (int j=1; j<20; j++) { if (a[i-1][j-1] > 0) a[i][j] = 1; 20 Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 46

0 0 20 for (int i=1; i<20; i++) { for (int j=1; j<20; j++) { if (a[i-1][j-1] > 0) a[i][j] = 1; 20 Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 47

0 0 20 for (int i=1; i<20; i++) { for (int j=1; j<20; j++) { if (a[i-1][j-1] > 0) a[i][j] = 1; 20 Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 48

Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 49

class Image2 { public static void main (String[] args) { int[][] a = new int[21][21]; a[0][10] = 1; for (int i=1; i<21; i++) { for (int j=1; j<20; j++) { if (a[i-1][j-1] > 0) a[i][j] = 1; if (a[i-1][j+1] > 0) a[i][j] = 1; System.out.println(); for (int i=0; i<21; i++) { for (int j=0; j<21; j++) { if (a[i][j] > 0) System.out.print("o"); else System.out.print(" "); System.out.println(); Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 50

Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 51

class Image3 { public static void main (String[] args) { int[][] a = new int[21][21]; a[0][10] = 1; for (int i=1; i<21; i++) { for (int j=1; j<20; j++) { if (a[i-1][j-1] > 0) a[i][j] = 1; if (a[i-1][j+1] > 0) a[i][j] = 1; if (a[i-1][j-1] > 0 && a[i-1][j+1] > 0){ a[i][j] = 0; System.out.println(); for (int i=0; i<21; i++) { for (int j=0; j<21; j++) { if (a[i][j] > 0) System.out.print("o"); else System.out.print(" "); System.out.println(); Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 52

Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 53

Metodedeklarasjoner En metode er en navngitt blokk med instruksjoner som vi kan få utført hvor som helst i et program ved å angi metodens navn. Vi definerer (deklarerer) metoder etter følgende mønster: mer om denne senere beskrivelse av hva slags output metoden gir, f.eks. void, int, double, char,... modifikatorer returverditype minmetode (parametre) { instruksjon 1; instruksjon 2;... instruksjon n; et navn som vi velger beskrivelse av hva slags input metoden skal ha - gis i form av variabel-deklarasjoner separert av komma Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 54

Metodekall En metode kan kreve input og den kan returnere en verdi, men ingen av delene er nødvendig. I enkleste tilfelle er det ingen input og ingen output. Når vi benytter en metode sier vi at vi kaller på metoden. Kall på metode uten input (=parametre) - eksempel: minmetode(); Kall på metode med input (=parametre) - eksempel: minmetode(34.2, 53, 6); Kall på metode som returnerer en verdi - eksempel: int alder = minmetode(25.3, 52); Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 55

Plassering i programmet Vi plasserer metodene i en egen klasse (eller flere klasser): Filen MittProgram.java : class MittProgram { public static void main(string[] args) { Hjelpeklasse hj = new Hjelpeklasse(); hj.minmetode(); class Hjelpeklasse { void minmetode() {... innholdet i metoden... Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 56

Metode uten parametre/returverdi Følgende metode skriver ut fire linjer på skjermen: void skrivstjerner () { String s = "****"; System.out.println(s); System.out.println(s+s); System.out.println(s+s+s); System.out.println(s+s+s+s); Forklaring: void forteller at metoden ikke gir noe output. skrivstjerner er det navnet vi har valgt å gi metoden Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 57

Eksempel på bruk class Stjerner { public static void main (String[] args) { Hjelpeklasse hj = new Hjelpeklasse(); hj.skrivstjerner(); class Hjelpeklasse { void skrivstjerner() { String s = "****"; System.out.println(s); System.out.println(s+s); System.out.println(s+s+s); System.out.println(s+s+s+s); Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 58

Kompilering og kjøring > javac Stjerner.java > java Stjerner **** ******** ************ **************** Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 59

Metode med returverdi Følgende metode leser et positivt desimaltall fra terminal og returnerer det: double lespositivttall() { In tastatur = new In(); double x; do { System.out.println("Gi et positivt tall: "); x = tastatur.indouble(); while (x <= 0); return x; Forklaring: return x betyr at metoden slutter å eksekvere og at verdien til variabelen x returneres til kallstedet. Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 60

Eksempel på bruk import easyio.*; class LesPositivtTall { public static void main (String[] args) { Hjelpeklasse hj = new Hjelpeklasse(); double tall = hj.lespositivttall(); System.out.println("Tallet var " + tall); class Hjelpeklasse { double lespositivttall () { In tastatur = new In(); double x; do { System.out.print("Gi et positivt tall: "); x = tastatur.indouble(); while (x <= 0); return x; Test programmet Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 61

Eksempel: metode med input og output Følgende metode finner summen av elementene i en double-array: double finnsum (double[] x) { double sum = 0.0; for (int i=0; i<x.length; i++) { sum += x[i]; return sum; Forklaring: Når metoden kalles vil input-parameteren x bli tilordnet en verdi (= den verdien som benyttes i kallet på metoden). Metoden summerer elementene i arrayen, og returnerer så denne summen tilbake til kallstedet. Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 62

Eksempel på bruk class Lengde { public static void main (String[] args) { double[] lengder = {2.0, 5.1, 7.5, 2.0, 3.8; Kalkulator k = new Kalkulator(); double total = k.finnsum(lengder); System.out.println("Samlet lengde: " + total); class Kalkulator { double finnsum (double[] x) { double sum = 0.0; for (int i=0; i<x.length; i++) { sum += x[i]; return sum; Test programmet Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 63

Parametre og argumenter class MittProgram { public static void main (String[] args) { Kalkulator k = new Kalkulator(); double pris = 100.0; double beløp = k.trekkfrarabatt(pris); System.out.println("Utsalgspris: " + beløp); class Kalkulator { Argument double trekkfrarabatt (double x) { return x * 0.8; Parameter Merk: i noen bøker kalles argumenter aktuelle parametre, mens parametre kalles formelle parametre. Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 64

Overføring av verdi til parametere Anta at følgende eksekveres: double beløp = k.trekkfrarabatt(pris); Metoden som kalles: double trekkfrarabatt (double x) { return x * 0.8; Eksekveringsrekkefølgen (blått angir ting som skjer "bak kulissene"): double beløp = k.trekkfrarabatt(pris); x = pris; return x * 0.8; double beløp = 80.0; Ole Chr. Lingjærde Institutt for informatikk 8. september 2009 65