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

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

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

INF1000: Forelesning 4. Mer om arrayer Metoder

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 5) Mer om løkker, arrayer og metoder

Inf1000 uke 5 18.sept. 2007

Forelesning inf Java 5

Forelesning inf Java 5

Blokker og metoder INF1000 (Uke 6) Metoder

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

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

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:

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

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

Mer om arrayer Metoder

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

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

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

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

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

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

Repetisjon INF 1000 våren 2006

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

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

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

INF 1000 høsten 2011 Uke 3 6. september

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

Ole Christian Lingjærde, 12. september 2013

Forelesning inf Java 4

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

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

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

UNIVERSITETET I OSLO

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

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

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

INF1000 : Forelesning 3

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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)

2 Om statiske variable/konstanter og statiske metoder.

INF 1000 høsten 2011 Uke september

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

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

INF1000 undervisningen INF 1000 høsten 2011 Uke september

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

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

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

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

INF1000: noen avsluttende ord

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

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

løsningsforslag-uke5.txt

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

INF Uke 10. Ukesoppgaver oktober 2012

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

UNIVERSITETET I OSLO

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

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

INF1000 Behandling av tekster

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

Forelesning inf Java 3

UNIVERSITETET I OSLO

Eksempel: Body Mass Index (BMI)

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

UNIVERSITETET I OSLO

Løse reelle problemer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

Introduksjon til objektorientert programmering

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

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

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

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

UNIVERSITETET I OSLO

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

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

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

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

INF1000 oppgaver til uke 38 (17 sep 23 sep)

Transkript:

INF høsten 2 Uke 4: 3. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Mål for uke 4: Innhold uke 4 Repetisjon m/ utvidelser: Arrayer representasjon av array: arrayreferanse (peker) og arrayobjekt initialisering av arrayer Flerdimensjonale arrayer Metoder En ny programstruktur deklarasjon og kall returverdier og parametere * Java: Flerdimensjonale arrayer, metoder (Kap. 5.7, 7.-7.7) * Programmering: Designe og skrive programmer med ny struktur inkl. metoder 2 Representasjon av array i Java Deklarasjon av peker og opprettelse av arrayobjektet arrayreferanse En array er en rekke med variable av samme type, som aksesseres med arraynavn og indeks int [] = new int [2]; 99998888 [] = 99998888; 77776666 [] = 77776666; forenklet tegning Mer presist: I Java representeres dette som en arrayreferanse til et arrayobjekt 99998888 77776666 arrayobjekt 3 Deklarasjon av arraypeker int [] ; arrayreferanse: Ikke initialisert Arrayobjekt med angitt størrelse opprettes og pekes på av arrayreferansen har nå fått en verdi int [] = new int [2];? new oppretter arrayobjektet og initialiserer m/ defaultverdier 4

Kopiering av arrayreferanse Kopiering av array Vi setter en ny arrayreferanse lik den vi har int [] nytlf = ; nytlf Begge arrayreferansene peker nå på samme arrayobjekt Skal vi ha en egen kopi av alle plassene i arrayen må vi sette av ny plass med new, og kopiere en og en verdi, f eks. i en for-løkke nytlf = new int[.length]; for (int i=; i<.length;i++) { nytlf[i] = [i]; nytlf Hvis vi nå endrer verdiene i arrayobjektet vil endringene synes uansett hvilken arrayreferanse vi leser av [] = 99998888; 99998888 nytlf nytlf[] har også fått verdien 99998888 nytlf 99998888 99998888 To arrayobjekter med de samme verdiene. Endringer i arrayobjektet vil ikke påvirke nytlf 6 Flerdimensjonal array Dersom vi ønsker å representere en todimensjonal tabell av verdier av samme type kan vi deklarere en todimensjonal array boolean [] [] tipperekke = new boolean [2] [3]; tipperekke [][2] tipperekke Dette kan generaliseres for N dimensjoner her 3: boolean [] [] [] tippekupong = new boolean [][2] [3]; 2 f t t f 2 f 2 f 7 (s==t) (s.equals(t)) (t.equals(s)) Kopiering og testing av String-verdier String-variable er referanser (pekere) til tekstobjekter String s = Tekststreng ; String t = s; t s Tekststreng Tekstobjekter kan imidlertid ikke endres alle endringer fører til opprettelse av et nytt tekstobjekt, slik at andre tekstvariable som peker på samme objekt ikke endres (forskjellig fra arrayobjekter!) Uttrykket (s==t) er bare true dersom de peker på den samme tekststrengen. Skal vi teste på om to tekststrenger er like (men ikke nødvendigvis den samme) må vi bruke (s.equals(t)) 8

Metoder hvorfor? Ofte har vi bruk for å utføre (omtrent) samme instruksjoner flere steder i et program, eller i mange programmer. Gjenbruk reduserer størrelsen på programmet bedrer oversikten forenkler vedlikeholdet gir færre feil Da er det nyttig å kunne samle en eller flere instruksjoner med et selvvalgt navn, som så kan benyttes en eller flere ganger i programmet vårt Metoder - eksempler Vi har brukt en del metoder allerede, for eksempel System.out.println(" * "); double d = tastatur.indouble(); String s = tastatur.inword(); int i = (int) Math.round(d); Også main() er en metode:.. Vi skal nå se nærmere på hva metoder egentlig er, hvordan de brukes og hvordan vi kan lage våre egne metoder. 9 metodens type (hvis returverdi) Metoder En metode er en navngitt blokk med instruksjoner (programsetninger) som vi får utført ved å angi metodens navn Den deklareres inne i en klasse, og kan senere kalles på hver gang vi ønsker den utført metodens Eksempel på deklarasjon: void skrivpyramide() { System.out.println(" * "); System.out.println(" *** "); System.out.println("*****"); Bruk av ( kall på) metoden: skrivpyramide(); navn // Her utføres setningen i metoden Objektorientert programmering Programmeringsspråk er designet etter ulike paradigmer eller hovedprinsipper. Java er et objektorientert språk (andre typer er imperative eller funksjonelle) Det betyr at språket spesielt støtter programmereren i å tenke på det som skal beskrives og bearbeides i form av objekter som har både egenskaper (variable) og handlinger (programsetninger samlet i metoder) knyttet til seg. Hvilke variable og metoder som hører til et objekt bestemmes av hvilken klasse objektet tilhører en klasse beskriver et mønster for en type objekter. Viktige egenskaper ved objektorienterte programmer er muligheten til å skjule detaljer som ikke er vesentlig for omgivelsene (vi velger selv hva som skal synes og brukes fra utsiden av en klasse) og å gruppere variable og metoder som hører sammen.

Programstruktur med metoder Alle Java-programmer består av en eller flere klasser, med en eller flere metoder. Metoder deklareres inne i klasser. Enkel programstruktur med metoder Foreløpig vil vi benytte følgende mal for programmer med metoder (her et program fra filen PyramideProgram.java) Hittil har programmene våre bestått av én klasse med metoden main() i. Klassen har samme navn som filen, og main() som er der utføring av programmet starter og slutter - er den eneste metoden vi har skrevet, med all funksjonalitet i seg. Dere vil senere lære å skrive programmer med mange klasser og metoder først skal vi imidlertid konsentrere oss om å lære deklarasjoner og bruk av metoder i en enkel, standard programstruktur En klasse med main()-metoden, der program-utførelsen starter og avsluttes En klasse med datastruktur, og metoder som bearbeider denne 3 Klasse med main()- metoden Klasse med metoder vi skriver class PyramideProgram { Pyramide p = new Pyramide(); p.skrivpyramide(); class Pyramide { void skrivpyramide() { System.out.println(" * "); System.out.println(" *** "); System.out.println("*****"); Kall på metoden Deklarasjon av metode 4 Metode med returverdi Ofte ønsker vi at resultatet fra en metode skal kunne brukes videre i resten av programmet, som for eksempel: Deklarasjon av metode med returverdi Her er en metode som leser et heltall og returnerer det dobbelte: int k = tastatur.inint(); Her inint() en metode i klassen In, som vi får tilgang til via pekervariabelen tastatur. Metoden inint() returnerer et heltall (en int). Dette heltallet tar vi vare på i variabelen k. Typen til returverdien int lesogdoble() { System.out.print("Skriv et tall: "); int tall = tastatur.inint(); return 2*tall; Her returneres verdien fra metoden Metoder som ikke returnerer noen verdi deklareres med typen void. 5 6

Metode med returverdi: Eksempel Metoden inint() leser inn et vilkårlig heltall. Noen ganger ønsker vi å sikre oss at vi får et positivt heltall. Vi kan da lage en egen metode for dette: Eks: Program med bruk av metode med returverdi import easyio.*; class TestPosTall { PosTall pt = new PosTall(); int lespositivtheltall() { int tall; do { System.out.print ("Gi et positivt tall: "); tall = tastatur.inint(); while (tall <= ); return tall; Deklarasjon av metoden 7 int i = pt.lespositivtheltall(); System.out.println(i + " er et positivt heltall"); class PosTall { int lespositivtheltall() { int tall; do { System.out.print("Gi et positivt tall: "); tall = tastatur.inint(); while (tall <= ); return tall; 8 Metoder med parametere Eks: Metode med parameter Ofte ønsker vi at samme metode skal kunne brukes for litt ulike input-verdier, f. eks: System.out.println(" * "); System.out.println("Hei verden"); Her er println() en metode som tar en tekst som input (parameter) Metoden gjør det samme uansett hvilken String-verdi vi kaller med: Skriver den ut på skjermen 9 Parameteren avgjør antall linjer i pyramiden : class PyramideProgram { Pyramide p = new Pyramide(); p.skrivpyramide(4); class Pyramide { void skrivpyramide(int antall) { for (int i = ; i<=antall; i++) { for (int j = ; j<=i; j++) { System.out.print("*"); System.out.println (); parameter angis med type og navn som skal benyttes inni metoden 2

Metode med parameter og returverdi Eks: Gangetabell-metode import easyio.*; class TestPosTall { PosTall pt = new PosTall(); int i = pt.lespositivtheltall(); System.out.println(i + " er et positivt heltall"); class PosTall { int lespositivtheltall() { int tall; do { System.out.print("Gi et positivt tall: "); tall = tastatur.inint(); while (tall <= ); return tall; 2 Metode som skriver ut n-gangen fra til void gangetabell(int n) { n for (int i = ; i <= ; i++) { System.out.println(i * n); Eksempler på kall på metoden gangetabell(2); gangetabell(5); n 2 n 5 22 Eks: Bruk av gangetabell-metode Eksempel med flere parametre import easyio.*; class GangeProgram { Utregning utr = new Utregning(); System.out.print("Hvilken gangetabell vil du skrive? "); int tall = tastatur.inint(); utr.gangetabell(tall); class Utregning { void gangetabell(int n) { for (int i = ; i <= ; i++) { System.out.println(i * n); Vi kan utvide gangetabell-metoden med en parameter som angir hvor mye av tabellen som skal skrives: void gangetabell(int n, int slutt) { for (int i = ; i <= slutt; i++) { System.out.println(i * n); Eksempel på kall på metoden: gangetabell(2, 2); gangetabell(5, ); 23 24

Oppgave Oppgave - løsningsforslag Skriv et program som deklarerer og bruker denne metoden. Initialiser arrayen selv skriv ut summen. double finnsum (double[] x) { double sum =.; for (int i=; i<x.length; i++) { sum += x[i]; return sum; 25 class TestMetode { public static void main (String [] args) { double [] a = {.3, 2., 7.5, ; MetodeKlasse mk = new MetodeKlasse (); double total = mk.finnsum(a); System.out.println ("Returverdi = " + total); class MetodeKlasse { double finnsum(double[] x) { double sum =.; for (int i=; i<x.length; i++) { sum += x[i]; return sum; 26 type verdi metoden returnerer, f.eks. int, double, char,... eller void hvis ingen verdi Oppsummering metoder: Deklarasjon Java-programmene så langt i kurset består av to klasser, startklassen med main og en annen klasse hvor det kan det befinne seg en eller flere metoder. De metodene vi ser på så langt i kurset har følgende form: et navn vi velger returverditype metodenavn (parametre) { setninger ; setninger 2;... setninger n; return verdi; // Hvis ikke returverditype void Beskrivelse av hva slags input metoden skal ha - i form av variabeldeklarasjoner skilt av komma 27 Oppsummering metoder: Kall Når vi benytter en metode sier vi at vi kaller på metoden Kall på metode uten parametere eks: minmetode(); Kall på metode med parametere eks: minmetode2 (2, Hei! ); Kall på metode med parameter som returnerer en verdi eks: int i = minmetode3 (); 28

Parametre og argumenter class MittProgram { Kalkulator k = new Kalkulator(); double pris =.; double nypris = k.trekkfrarabatt(pris); System.out.println("Utsalgspris: p " + nypris); Parameter class Kalkulator { double trekkfrarabatt(double x) { return x *.8; Argument Merk: argumenter til metodekallet kalles også for aktuelle parametre mens parametre i deklarasjonen da kalles formelle parametre. Parametre og argumenter Parametre Deklareres mellom parentesene i toppen (= den første linjen) av metode-deklarasjonen. De er vanlige variable som bare eksisterer inne i metoden og så lenge denne eksekverer. Argumenter Verdier som oppgis mellom parentesene når vi kaller på en metode. Antall argumenter må samsvare med antall parametre i metoden Argumentenes datatyper må samsvare med datatypen til tilsvarende parameter. 29 3