6108 Programmering i Java. Leksjon 5. Tabeller. Roy M. Istad 2015

Like dokumenter
Hva er tabeller? Tabell (array): Sammensetning av verdier av samme datatype, under ett navn i hurtigminnet.

Leksjon 6. Objekt. Evt. importsetninger. public class Klasse { Konstruktør. Objektmetoder. Innkapsling (private): set-og get-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

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

Forelesning inf Java 4

Leksjon 2. Setninger og uttrykk

Leksjon 2. Setninger og uttrykk

Leksjon 3. Kontrollstrukturer

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

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

UNIVERSITETET I OSLO

Leksjon 3. Kontrollstrukturer

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

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

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

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

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

Leksjon 7. Filer og unntak

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

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

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

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

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

Forelesning inf Java 5

Forelesning inf Java 5

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

INF 1000 høsten 2011 Uke september

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

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

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

6108 Programmering i Java. Leksjon 4. Metoder. Roy M. Istad 2015

Programmering Høst 2017

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

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

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

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

Leksjon 2. Setninger og uttrykk

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Leksjon 2. Setninger og uttrykk

INF Uke 10. Ukesoppgaver oktober 2012

INF Uke 10. Løsningsforslag ukesoppgaver oktober 2012

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

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

UNIVERSITETET I OSLO

INF1000. Marit Nybakken 10. februar 2004

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

Leksjon 4. Metoder. Program, klasse og metode

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

Eksamensoppgaver 2014

Introduksjon til objektorientert programmering

INF1000 Eksamen 2014 (modifisert)

INF1000: Forelesning 7

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

INF1000 (Uke 6) Mer om metoder, tekster

INF1000 Behandling av tekster

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

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

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

Ole Christian Lingjærde, 12. september 2013

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

Forelesning inf Java 4

INF1000: Forelesning 6. Klasser og objekter del 1

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

INF1000: Forelesning 7. Konstruktører Static

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

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

Oblig4 - forklaringer. Arne og Ole Christian

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

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

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

Endret litt som ukeoppgave i INF1010 våren 2004

Kapittel 9: Sortering og søking Kort versjon

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

Videregående programmering 6

Leksjon 7. Filer og unntak

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

UNIVERSITETET I OSLO

OPPGAVE 5b og 8b Java Kode

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

UNIVERSITETET I OSLO

INF1000: noen avsluttende ord

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

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

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

Transkript:

6108 Programmering i Java Leksjon 5 Tabeller Roy M. Istad 2015

Hva er tabeller? Tabell (evt. array): Sammensetning av verdier i den samme datatypen, under ett navn i hurtigminnet. Gir rask og effektiv håndtering av data. Verdiene i en tabell adresseres ved posisjon (indeks). 1) Eksempel: 2) Timeplan 6108 Programmering i Java Leksjon 5 side 2

Andre datatabeller Datatabeller fra regneark eller databaser tillater blanding av datatyper, f.eks: I Java må akkurat disse dataene håndteres i minst tre tabeller: En egen tabell i String, en i double og en i int Hvis Nr er et vilkårlig varenummer, trengs enda en int tabell 6108 Programmering i Java Leksjon 5 side 3

Tabelldimensjon og indekser Dimensjonen til en tabell er gitt ved antall indekser (vanligvis én) flere indekser/flerdimensjonale tabeller kommer i senere emner. Indeksene er heltall, og blir automatisk satt med 0 som den minste. (String) Vår indeksering: Ukedag 0 1 2 3 4 5 6 Denne tabellen har altså dimensjon 1 Javas indeksering (heltall) 6108 Programmering i Java Leksjon 5 side 4

Deklarasjon og oppretting int[] timetab; Referansevariabel Merkelapp, navngitt referanse. Kan peke på en tabell, men det er ingen tabell der ennå... Alternativ: Deklarasjon og oppretting samtidig (initiering) int[] timetab = {8, 12, 10, 7, 7, 4, 0}; // Verdiliste 7 verdier samlet i én enhet Indeksert variabel: timetab[2] Automatisk indeksert 0 6 6108 Programmering i Java Leksjon 5 side 5

Tabelldeklarasjon generelt datatype[] tabellnavn = new datatype[lengde]; Siste komponent har indeks lengde-1 fordi tellingen starter på 0. int[] heltallstabell = new int[5]; OBS! Automatisk nullstilling Ved oppretting (new) av tabell blir alle element i tabellen tildelt standardverdi. Dersom tabellen inneholder heltall: 0 desimaltall: 0.0 boolske verdier: false enkelttegn: NUL (tegn nr 0) objekt: null 6108 Programmering i Java Leksjon 5 side 6

Avlesing av verdi, og utskrift av tabeller int[] timetab = {8, 12, 10, 7, 7, 4, 0}; int sum = 0; for(int i=0; i<7; i++) sum += timetab[i]; out.print("sum timer: " + sum); 1) Fungerer ikke (kompilering ok, men info ): Konsollet out.println("tabellen: " + timetab); 2) Vanlig utskrift via indeksert variabel: for (int i=0; i<7; i ++) out.println("dag " + i + ": "+ timetab[i]); 6108 Programmering i Java Leksjon 5 side 7

Inndata til tabeller Eksempel: Telling av øyne (1 6) ved terningkast Leser inn ett og ett kastresultat fra brukeren vha. en hjelpemetode: int[] antall = new int[7]; int kast = lesheltall(); while (kast!= 0) { antall[kast]++; kast = lesheltall(); } NB! Koden forutsetter at brukeren skriver en lovlig terningverdi, eller 0 for å avslutte tellingen. Kommer det et negativt tall, eller ett som er større enn 6, vil programmet bli avsluttet med feilmeldingen: ArrayIndexOutOfBounds 6108 Programmering i Java Leksjon 5 side 8

Telletabell for terningkast Figur s. 178 int[] antall = new int[7]; int kast = lesheltall(); while (kast!= 0) { antall[kast]++; kast = lesheltall(); } Obs! Alternativt kunne tabellen vært deklarert slik: int[] antall = new int[6]; Da ville oppdateringene blitt: antall[kast-1]++; fordi indekseringen er 0 5 6108 Programmering i Java Leksjon 5 side 9

Eksempel: Sekvensielt søk Gjenfinne verdier i en tabell boolean funnet=false; int i=0; while (!funnet && i<tall.length ) if ( tall[i] == leteretter ) funnet = true; else i++; // Flytt til neste tall NB! Avleser antall element i tabellen. Merk at length er en (instans )variabel, ikke en metode. 6108 Programmering i Java Leksjon 5 side 10

Tabellkopiering 1 : tabellb = tabella; : «Kopi»: Referanseoverføring, ikke ny tabell! 6108 Programmering i Java Leksjon 5 side 11

Tabellkopiering 2 Ønsker å kopiere innholdet i tabellen, dvs. få en annen like stor tabell med eksakt samme innhold komponent for komponent. int[] tabellb = new int[tabella.length]; for (int i=0; i<tabella.length; i++) tabellb[i] = tabella[i]; = i = i = i = i // NB! Komponentvis kopiering 6108 Programmering i Java Leksjon 5 side 12

Likhet mellom tabeller Sjekker referanselikhet, ikke innholdslikhet: if ( tabella == tabelld ) // false Referanselikhet: Pekes det på én og samme tabell? tabella.length == tabelld.length Verdilikhet (innholdslikhet): == == == == To tabeller sies å være verdilike dersom de er like store og inneholder eksakt samme verdier i samme rekkefølge. if ( Arrays.equals(tabellA, tabelld) ) // true 6108 Programmering i Java Leksjon 5 side 13

Like tabeller? false tabella == tabellb Arrays.equals(tabellA, tabellb) true 6108 Programmering i Java Leksjon 5 side 14

Læreboka side 194 NB! Arrays klassen importeres ved: import java.util.*; Arrays klassen importeres altså ikke statisk (static) for å unngå navnekollisjoner som ved min/max metodene i Integer og Math! Metoder fra Arrays klassen må da kalles ved klasse som fornavn: Arrays.equals Arrays.sort Arrays.binarySearch Arrays.copyOf 6108 Programmering i Java Leksjon 5 side 15

Gjenfinne verdier i en tabell boolean funnet=false; int i=0; while (!funnet && i<tall.length ) if ( tall[i] == leteretter ) funnet = true; else i++; // Flytt til neste tall Jfr. eks. 5.1, side 180, og lysark nr 10 Alternativ nå via Arrays klassen: Arrays.sort(tall); // NB! Sortering før søk int i = Arrays.binarySearch(tall, leteretter); boolean funnet = (i>=0); // i holder indeks til tallet 6108 Programmering i Java Leksjon 5 side 16

Sortering av en tabell Figur s. 184 int[] tall = {7, 2, 1, 4}; int lengde = tall.length; int[] nyetall = new int[lengde]; for (int tallnr=0; tallnr<lengde; tallnr++) { int minpos = 0; // Minimum på 0-plassen? for (int posnr=1; posnr<lengde; posnr++) if ( tall[posnr] < tall[minpos] ) minpos = posnr; // Nå er minste verdi på plass nr minpos nyetall[tallnr] = tall[minpos]; // Sletter minimumsverdien tall[minpos] = Integer.MAX_VALUE; } tall = nyetall; // tall-tabellen er sortert Arrays.sort(tall); // Alternativt 6108 Programmering i Java Leksjon 5 side 17

Tabell som returverdi fra en metode private public static int[] dobling(int[] tab) { int[] nytab = new int[tab.length]; for (int i=0; i<tab.length; i++) nytab[i] = 2*tab[i]; return nytab; } Eksempel på metode kall: : // tabella har fått verdier : int[] tabellb; tabellb = dobling(tabella); : 6108 Programmering i Java Leksjon 5 side 18

Metoder: Referanseoverføring av tabeller Java bruker referanseoverføring (call by reference) til parameter overføring av tabeller. Det er altså kun referansen (pekeren) til tabellen som overføres og metoden "jobber på" den aktuelle parameteren (faktiske tabellen). private static void nullstill(int[] tab) { for (int i=0; i<tab.length; i++) tab[i] = 0; } Eksempel på metode kall: : nullstill(mintabell); // void-metode, egen programsetning // Etter kallet: Alle element i mintabell har verdien 0 : 6108 Programmering i Java Leksjon 5 side 19

6108 Programmering i Java Slutt på leksjon 5