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

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

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

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

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

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

Forelesning inf Java 4

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

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

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

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

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

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

INF1000 : Forelesning 3

Blokker og metoder INF1000 (Uke 6) 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

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

Forelesning inf Java 3

Mer om arrayer Metoder

Forelesning inf Java 5

Forelesning inf Java 5

Inf1000 uke 5 18.sept. 2007

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

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.

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

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

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

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

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

Eksempel: Body Mass Index (BMI)

Forelesning inf Java 3

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

Ole Christian Lingjærde, 12. september 2013

Forelesning inf Java 4

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

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

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

Repetisjon INF 1000 våren 2006

INF1000: Forelesning 4. Mer om arrayer Metoder

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

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

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

INF 1000 høsten 2011 Uke 3 6. september

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

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

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:

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

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

INF1000 (Uke 6) Mer om metoder, tekster

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

INF 1000 høsten 2011 Uke september

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

INF1000 undervisningen INF 1000 høsten 2011 Uke september

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

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

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

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

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

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

UNIVERSITETET I OSLO

INF Uke 10. Ukesoppgaver oktober 2012

Inf1000 (Uke 5) Arrayer, filer og tekst

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000. Marit Nybakken 10. februar 2004

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

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

INF1000 Metoder. Marit Nybakken 16. februar 2004

Ukeoppgaver INF1000: 12. feb 16. feb

INF1000 oppgaver til uke 38 (17 sep 23 sep)

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

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.

Oversikt. INF1000 Uke 3. Repetisjon Program. Repetisjon Program. Litt repetisjon Program Variabler og Uttrykk Presedens Matematiske funksjoner

Løsningsforslag ukeoppg. 3: sep (INF Høst 2011)

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

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

UNIVERSITETET I OSLO

løsningsforslag-uke5.txt

UNIVERSITETET I OSLO

INF1000 : Forelesning 1 (del 2)

Kapittel 1 En oversikt over C-språket

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

INF1000: noen avsluttende ord

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

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

Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF Høst 2011)

UNIVERSITETET I OSLO

Løsningsforslag ukeoppg. 4: sep (INF Høst 2011)

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

Programmering Høst 2017

UNIVERSITETET I OSLO

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

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

Transkript:

Praktisk informasjon INF (Uke 5) Mer om løkker, arrayer og metoder Oblig er lagt ut Frist 8. februar Kan løses etter denne forelesningen Grunnkurs i programmering Institutt for Informatikk Universitetet i Oslo Anja Bråthen Kristoffersen og Are Magnus Bruaset 75 I dag Repetisjon: Whileløkker Rep: Whileløkker Mer om løkker: dowhile og for Arrayer Litt om metoder while (logisk uttrykk) { <programsetninger> 75 75

Variant av while: dowhile Formen på en dowhile løkke: do { <programsetninger> while (logisk uttrykk); Noen foretrekker denne fremfor whileløkker. I motsetning til for whileløkker vil dowhileløkker alltid utføres minst en gang. 75 5 Eksempel på dowhile løkke do{ skjerm.outln("a: Kjør del oppgave A"); skjerm.outln("b: Kjør del oppgave B"); skjerm.outln("q: Avslutt"); skjerm.out("valg: "); valg = tast.inchar(); tast.inline(); switch(valg){ case 'A : deloppgavea(); break; // etter break vil vi hoppe ut av switch og tilbake i dowhile løkka case 'B : deloppgaveb(); break; // etter break vil vi hoppe ut av switch og tilbake i dowhile løkka case 'Q : skjerm.outln("programmet avslutter"); break; // etter break vil vi hoppe ut av switch og tilbake i dowhile løkka default: skjerm.outln("ugyldig valg"); break; // etter break vil vi hoppe ut av switch og tilbake i dowhile løkka // avslutter switch kommandoen. while(valg!= 'Q'); //her avsluttes dowhile løkken. 75 6 Forsetninger En annen måte å få utført en instruksjon (eller blokk) mange ganger er ved hjelp av en forsetning (også kalt forløkke): initialisering løkketest for (int i=; i<=antall; i++) { <setning > <setning >... <setning n> //her avsluttes forløkka løkkeoppdatering 75 7 Forsetningens struktur. Først deklareres tellevariabelen i, som settes lik. Hvis i <= antall gå til punkt ; hvis ikke avsluttes forsetningen. Utfør setningene inni forløkkebolken. Utfør i++ og gå til punkt 75 8

Hvordan forsetningen virker int i = Operatorene ++ og i++ i <= antall? JA <setning > <setning >... <setning n> NEI avslutt forløkka Instruksjon i = i + i = i Alternativ Postfiksoperator i++ i Alternativ Prefiksoperator ++i i 75 9 75 Prefiks/postfiks forskjeller Oppgave ++i, i++, i og i endrer ikke bare på verdien til i, de er dessuten uttrykk som selv har en verdi. Eksempel: // Skriv ut i og øk deretter i med (postfiks) System.out.println(i++); // Øk i med og skriv deretter ut i (prefiks) System.out.println(++i); Prefiksoperatorene endrer verdien til variabelen før uttrykket er evaluert. Postfiksoperatorene endrer verdien etter at uttrykket er evaluert. 75 Program kode int k = ; int m; int n; k = k + ; m = ++k; n = + k++; Verdien til k Verdien til m Verdien til n 75

Nøtt Kompilering og kjøring Hva blir utskriften fra dette programmet? class InkrementOperator { public static void main (String [] args) { for (int i=; i<; i++) { int j = i; int k = j++ + ++j; System.out.println("k = " + k); //slutt for //slutt main //slutt InkrementOperator 75 > javac InkrementOperator.java java InkrementOperator k= k= k=6 k=8 k= k= k= k=6 k=8 k= 75 Nesting av løkker Ofte behov for å neste løkkesetninger inne i hverandre Eksempel: Skriv følgende på skjermen: 55 Ytre løkke styrer utskrift av linjene rad kol 5 6 7 8 9 5 Indre løkke skriver ut de enkelte tegnene på en linje kol = = 6 rad Programmet class SkrivPyramide { public static void main (String [] args) { for (int rad = ; rad < 6; rad++) { for (int kol = ; kol < 6 rad; kol++) { System.out.print(" "); for (int sif = rad; sif >= ; sif) { System.out.print(sif); for (int sif = ; sif <= rad; sif++) { System.out.print(sif); System.out.println(); //slutt for (int rad //slutt main //slutt SkrivPyramide 75 5

Kompilering og kjøring > javac SkrivPyramide.java java SkrivPyramide 55 Variabler Hittil har vi sett på variable som kan holde en enkelt verdi: en intvariabel har plass til ett heltall en doublevariabel har plass til ett desimaltall en Stringvariabel har plass til en enkelt tekststreng osv. 75 7 75 8 Arrayer Arrayer er "variable" som kan holde på mange verdier: en intarray har plass til mange heltall en doublearray har plass til mange desimaltall en Stringarray har plass til mange tekststrenger osv. Arrayer Verdiene som ligger i en array har hver sin posisjon (= indeks):,,,..., K hvor K = lengden til arrayen En array med lengde kan visualiseres slik: I hver av disse boksene er det plass til en verdi 75 9 75

Deklarere og opprette arrayer Syntaks for å deklarere en array: datatype[] arraynavn; f.eks. int, double, boolean eller String Syntaks for å opprette en array. Før vi kan begynne å bruke en deklarert array, må vi fortelle hvor lang den skal være. Det kan gjøres på to måter: arraynavn = new datatype[k]; // K er ønsket lengde Deklarere og opprette arrayer De to trinnene over kan slås sammen til en setning: datatype[] arraynavn = new datatype[k]; datatype[] arraynavn = {verdi,, verdik; (NB: merk syntaksen og trykkfeilen i boka s. 55) arraynavn = new datatype[]{verdi, verdi,, verdik; 75 75 Eksempel Ønsker å lagre navn, adresse og telefonnr for de som tar et bestemt kurs (max 6 studenter): String[] navn = new String[6]; String[] adresse = new String[6]; int[] telefonnr = new int[6]; Resultatet kan visualiseres slik: navn adresse telefonnr Verdiene i en array Anta at vi har deklarert og opprettet følgende array: int[] tlf = new int[6]; For å få tak i de enkelte verdiene i arrayen: tlf[], tlf[], tlf[],..., tlf[599] For å få tak i lengden på arrayen: tlf.length // NB: ingen parenteser til slutt 599 599 75 599 75

Initialisering av arrayer Når en array blir opprettet, blir den samtidig initialisert : Spesielt om Stringarrayer String [] s = new String[]; // Nå er alle s[i] == null int [] k = new int[]; // Nå er alle k[i] == double [] x = new double[]; // Nå er alle x[i] ==. boolean [] b = new boolean[]; // Nå er alle b[i] == false char [] c = new char[]; // Nå er alle c[i] == '\u' Merk: Stringarrayer 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 tekststrengverdi, f.eks. s[i] = Per eller s[i] =. 75 5 75 6 Eksempel: Lese desimaltall fra terminal import easyio.*; class LesFraTerminal { public static void main (String [] args) { In tastatur = new In(); double[] a = new double[]; for (int i = ; i < ; i++) { System.out.print("Oppgi neste verdi: "); a[i] = tastatur.indouble(); // Nå kan vi evt gjøre noe med verdiene i a //avslutter main //avslutter LesFraTerminal Eksempel: Finne en bestemt verdi /* Gitt intarray a og intvariabel x. Finnes verdien i også i a? */ boolean funnet = false; int i = ; while (i < a.length &&!funnet) { if (a[i] == x) { funnet = true; i++; if (funnet) { System.out.println("Verdien ligger i posisjon " + (i)); else { System.out.println("Verdien ble ikke funnet!"); 75 7

Eksempel: Finne minste verdi Slik kan man finne den minste verdien i en array: 5 //Anta at x er en doublearray double minste = a[]; for (int i=; i<a.length; i++) { if (a[i] < minste) { minste = a[i]; // Nå er minste lik den minste // verdien i x 6 8 7 minste 5 En arrayvariabel er en adresse Når vi deklarerer en array så refererer arraynavnet ikke til selve verdiene i arrayen, men til adressen (i hukommelsen) hvor verdiene ligger lagret. Resultatet etter at vi har utført int[] primtall = {,, 5, 7,,, 7, 9,, 9; kan visualiseres slik: primtall 5 7 5 6 7 7 9 8 9 9 75 9 a 75 Å kopiere en arrayadresse Hvis vi har double[ ] x = new double []; så vil double[ ] y = x; medføre at adressen til arrayen vi opprettet kopieres over til variabelen y. Dermed har vi fortsatt bare ett sett med verdier lagret, men vi har to referanser til arrayen, x og y. 75 Oppgave Hva blir utskriften fra følgende program? class ToArrayer { public static void main (String [] args) { int[] x = new int[]; int[] y = x; for (int i = ; i < ; i++) { x[i] = i; for (int i = ; i < ; i++) { System.out.println(y[i]); 75

Kompilering og kjøring Hva som skjedde > javac ToArrayer.java > java ToArrayer 5 6 7 8 9 int[] x = new int[]; int[] y = x; x x y 9 9 75 75 Kopiering av arrayer 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 legges inn i 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: double[] y = new double[x.length]; for (int i=; i<x.length; i++) { y[i] = x[i]; Det finnes også ferdige verktøy i Java for å kopiere en array, f.eks: int [] y = (int []) x.clone(); 75 5 75 6

Når arrayen blir for liten Kan ha behov for å utvide en array Framgangsmåte: Deklarer og opprett en ny array temp som er av ønsket lengde Flytt over alle verdier fra opprinnelig array til temp Sett opprinnelig arraypeker til å peke på temp Når arrayen blir for liten Programkode: /* Anta at tall er en intarray og at vi ønsker å utvide tall til dobbel lengde */ int[] temp = new int[ * tall.length]; for (int i = ; i < tall.length; i++) { temp[i] = tall[i]; tall = temp; 75 7 75 8 Flerdimensjonale arrayer Vi kan også deklarere todimensjonale (og høyeredimensjonale) arrayer. Eksempel: int[][] soltimer = new int[][];... Resultat: 5 soltimer 6 7 8 9 75 9 Flerdimensjonale arrayer Eksempler på bruk: soltimer[][] = ; int antallrader = soltimer.length; int antallkolonner = soltimer[].length;... 5 soltimer 6 7 8 9 75

Blokker og metoder En blokk er en samling instruksjoner omgitt av krøllparenteser: { instruksjon ; instruksjon ;... instruksjon n; Alle steder i et Javaprogram hvor det kan stå en instruksjon, kan vi om ønskelig i stedet sette inn en blokk Metoder Siden en blokk ofte forekommer flere steder i et program, hadde det vært praktisk om vi kunne definert blokken en gang for alle og gitt den et navn. Da trenger vi bare å angi blokkens navn hvert sted vi ønsket å få utført instruksjonene i blokken. Dette er fullt mulig i Java ved hjelp av det som kalles metoder 75 75 Metoder Metoder mainmetoden er et eksempel på en metodedeklarasjon: En metode er essensielt en navngitt blokk med instruksjoner som vi kan få utført hvor som helst i et program ved å angi metodens navn Beskrivelsen av hva metoden skal hete og hvilke instruksjoner som skal ligge i metoden kalles en metodedeklarasjon. modifikatorer metodenavn returtype formelle parametre public static void main (String[] args) {... metodekropp ( innmat )... En klasse kan inneholde vilkårlig mange metodedeklarasjoner 75 75

Å deklarere en metode Å benytte en metode Beskrivelse av hva slags output Mer om denne senere metoden gir, f.eks. void, int, double, char,... modifikatorer returverditype metodenavn (parametre) { instruksjon ; instruksjon ; Et navn som vi velger... instruksjon n; Beskrivelse av hva slags input metoden skal ha gis i form av variabeldeklarasjoner separert av komma Merk at en metode kan kreve input og at den kan returnere en verdi, men ingen av delene er nødvendig. I enkleste tilfelle er det ingen input og ingen output. 75 5 Når vi benytter en metode sier vi at vi kaller på metoden For å kalle på en metode uten parametre, skriver vi ganske enkelt metodenavn(); 75 6 Metoder med parametre Ved kall på en metode med parametre må vi oppgi like mange verdier som metoden har parametre i'te verdi ha samme datatype som i'te parameter i metodedeklarasjonen Eksempel: Metoder med returverdi Hvis metoden returnerer en verdi, kan vi velge om verdien skal tas vare på eller ikke når metoden kalles. Eksempel hvor vi tar vare på verdien: int alder = metodenavn(5., 5, 7); metodenavn(., 5, 6); 75 7 75 8

Eksempel: Metode uten input/output Forklaring: static void skrivstjerner () { String s = ""; static er en modifikator som forteller at dette er en klassemetode og ikke en objektmetode, dvs metoden skal ikke benyttes inni et objekt. void er en returverditype som forteller at metoden ikke gir noe output. skrivstjerner er det navnet vi har valgt å gi metoden 75 9 Eksempel på bruk class Stjerner { public static void main (String[] args) { skrivstjerner(); System.out.println("Hei"); skrivstjerner(); //slutt main static void skrivstjerner () { String s = ""; //slutt skrivstjerner //slutt Stjerner 75 5 Kompilering og kjøring > javac Stjerner.java > java Stjerner Hei 75 5