INF1010. grensesni-et Comparable<T> grensesni-et Iterable<T> rekursjon

Like dokumenter
INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

INF1010. Grensesnittet Comparable<T>

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

UNIVERSITETET I OSLO

INF1010. Stein Michael Storleer (michael) Lenkelister

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Dagens forelesning. Husk prøveeksamen Fredag 15/3-13 kl 12 i R1. Iterator-teknikken. Eksempel med bruk av Iterator og Iterable-grensesnittene

UNIVERSITETET I OSLO

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

Algoritmer og datastrukturer Eksamen

INF1010, 23. februar Parametriserte klasser Om å gå gjennom egne beholdere (subklasser og grensesnitt 3)

Lenkelister, iteratorer, indre klasser. Repetisjonskurs våren 2018 kristijb

INF1010, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

INF Uke 10. Ukesoppgaver oktober 2012

Algoritmer og datastrukturer Løsningsforslag

Gjennomgang av eksamen H99

UNIVERSITETET I OSLO

Løsningsforslag eksamen INF1020 høsten 2005

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

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

Repetisjon. INF gruppe 13

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

UNIVERSITETET I OSLO

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

INF1010 Binære søketrær ++

Faglærerne prøver å besøker eksamenslokalet mellom klokka 15 og 16 for å oppklare eventuelle uklarheter og feil i oppgaveteksten.

OPPGAVE 5b og 8b Java Kode

TDT4100 Objektorientert programmering

Liste som abstrakt konsept/datatype

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

INF1000 Forelesning 9. Hashmap Eksempel: Flyreservasjon

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

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

INF Notater. Veronika Heimsbakk 10. juni 2012

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

INF1010, 21. januar Klasser med parametre = Parametriserte klasser = Generiske klasser

UNIVERSITETET I OSLO

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

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

Løsningsforslag til eksamen i INF1000 våren 2006

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

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

INF1000 oppgaver til uke 38 (17 sep 23 sep)

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

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

Kapittel 14, Hashing. Tema. Definere hashing Studere ulike hashfunksjoner Studere kollisjonsproblemet 17-1

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

klassen Vin må få en ny variabel Vin neste alle personvariable (personpekere) i listeklassen må byttes til Vin

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

Sensur-veiledning INF1000 h 2013 (fasit) am - 6. des. 2013

INF Innleveringsoppgave 6

UNIVERSITETET I OSLO

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

EKSAMEN. Algoritmer og datastrukturer

"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009

Løsningsforslag, inf101, våren 2001

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen

INF1010 siste begreper før oblig 2

UNIVERSITETET I OSLO

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

Sortering med tråder - Quicksort

PG4200 Algoritmer og datastrukturer Forelesning 7

Oppgave 1. Løsningsforslag til eksamensoppgave. ITF20006 Algoritmer og datastrukturer Postorden traversering:

Kapittel 9: Sortering og søking Kort versjon

UNIVERSITETET I OSLO

Repitisjonskurs. Arv, Subklasser og Grensesnitt

INF1010 våren Grensesnitt

UNIVERSITETET I OSLO

Enkle generiske klasser i Java

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

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Dagens tema INF1010 INF1010 INF1010 INF1010

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Seminaroppgaver IN1010, uke 2

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

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

EKSAMEN med løsningsforslag

Transkript:

INF1010 grensesni-et Comparable<T> grensesni-et Iterable<T> rekursjon

Tenk på hvordan en for- løkke «går igjennom» alle objektene i en array

Iterator miniterator Object next() Iterator miniterator = new Iterator (beholder) ; while ( miniterator.hasnext() ) { Object o = miniterator.next(); <Gjør noe med objektet>

Iterator<Ska-bar> ska-eiterator Ska-bar next() Ska-bar sk = null; Iterator<Ska-bar> ska-eiterator = beholder.iterator(); while ( ska-eiterator.hasnext() ) { sk = ska-eiterator.next(); System.out.println("De-e er et ska-ebelagt objekt [" + sk + "] med ska- NOK " + sk.ska-());

int teller pekertilneste Ska-bar next() class LenkeListeIterator implements Iterator<T> { private int teller = 0; private pekertilneste = foran; public { return ( teller < antall ); public T next() { T returnerdenne = pekertilneste.obj; teller++ ; pekertilneste = pekertilneste.neste; return returnerdenne;

int teller pekertilneste Ska-bar next() public Iterator<T> iterator() { return new LenkeListeIterator(); class LenkeListeIterator implements Iterator<T> { private int teller = 0; private pekertilneste = foran; public { return ( teller < antall ); public T next() { T returnerdenne = pekertilneste.obj; teller++ ; pekertilneste = pekertilneste.neste; return returnerdenne; Husk hvordan vi får tak i iteratorobjektet i testprogrammet: Iterator<Ska-bar> ska-eiterator = beholder.iterator();

public class LenkeListe <T> implements Iterable<T> {... public Iterator<T> iterator() { return new LenkeListeIterator(); T next() int teller pekertilneste private class LenkeListeIterator implements Iterator<T> { int teller = 0; pekertilneste = foran; public { return ( teller < antall ); public void remove() { public T next() { T returnerdenne = pekertilneste.obj; teller++ ; pekertilneste = pekertilneste.neste; return returnerdenne;... et slikt objekt finnes ikke

int Iterator<Ska-bar> ska-eiterator teller Ska-bar next() pekertilneste Men denne koden i testprogrammet gir oss et slikt objekt som kan iterere over ska;bare objekter public stazc void main (String[] a) { LenkeListe<Ska-bar> beholder = new LenkeListe<Ska-bar>(); Iterator<Ska-bar> ska-eiterator = beholder.iterator(); Ska-bar sk = null; while ( ska-eiterator.hasnext() ) { sk = ska-eiterator.next(); System.out.println("De-e er et ska-ebelagt objekt [" + sk + "] med ska- NOK " + sk.ska-());

LenkeListe<Ska-bar> beholder foran Iterator<Ska-bar> ska-eiterator int 6 antall int 0 teller Ska-bar next() pekertilneste public Ska-bar next() { Ska-bar returnerdenne = pekertilneste.obj; teller++ ; pekertilneste = pekertilneste.neste; return returnerdenne; while ( ska-eiterator.hasnext() ) { sk = ska-eiterator.next(); System.out.println("De-e er et ska-ebelagt objekt [" + sk + "] med ska- NOK " + sk.ska-());

LenkeListe<Ska-bar> beholder foran Iterator<Ska-bar> ska-eiterator int 6 antall int 1 teller Ska-bar next() pekertilneste public Ska-bar next() { Ska-bar returnerdenne = pekertilneste.obj; teller++ ; pekertilneste = pekertilneste.neste; return returnerdenne; while ( ska-eiterator.hasnext() ) { sk = ska-eiterator.next(); System.out.println("De-e er et ska-ebelagt objekt [" + sk + "] med ska- NOK " + sk.ska-());

LenkeListe<Ska-bar> beholder foran Iterator<Ska-bar> ska-eiterator int 6 antall int 2 teller pekertilneste Ska-bar next() public Ska-bar next() { Ska-bar returnerdenne = pekertilneste.obj; teller++ ; pekertilneste = pekertilneste.neste; return returnerdenne; while ( ska-eiterator.hasnext() ) { sk = ska-eiterator.next(); System.out.println("De-e er et ska-ebelagt objekt [" + sk + "] med ska- NOK " + sk.ska-());

LenkeListe<Ska-bar> beholder foran Iterator<Ska-bar> ska-eiterator int 6 antall int 3 teller pekertilneste Ska-bar next() public Ska-bar next() { Ska-bar returnerdenne = pekertilneste.obj; teller++ ; pekertilneste = pekertilneste.neste; return returnerdenne; while ( ska-eiterator.hasnext() ) { sk = ska-eiterator.next(); System.out.println("De-e er et ska-ebelagt objekt [" + sk + "] med ska- NOK " + sk.ska-());

LenkeListe<Ska-bar> beholder foran Iterator<Ska-bar> ska-eiterator int 6 antall int 4 teller pekertilneste Ska-bar next() public Ska-bar next() { Ska-bar returnerdenne = pekertilneste.obj; teller++ ; pekertilneste = pekertilneste.neste; return returnerdenne; while ( ska-eiterator.hasnext() ) { sk = ska-eiterator.next(); System.out.println("De-e er et ska-ebelagt objekt [" + sk + "] med ska- NOK " + sk.ska-());

LenkeListe<Ska-bar> beholder foran Iterator<Ska-bar> ska-eiterator int 6 antall int 5 teller pekertilneste Ska-bar next() public Ska-bar next() { Ska-bar returnerdenne = pekertilneste.obj; teller++ ; pekertilneste = pekertilneste.neste; return returnerdenne; while ( ska-eiterator.hasnext() ) { sk = ska-eiterator.next(); System.out.println("De-e er et ska-ebelagt objekt [" + sk + "] med ska- NOK " + sk.ska-());

LenkeListe<Ska-bar> beholder Iterator<Ska-bar> ska-eiterator int 6 teller pekertilneste Ska-bar next() foran int 6 antall null public Ska-bar next() { Ska-bar returnerdenne = pekertilneste.obj; teller++ ; pekertilneste = pekertilneste.neste; return returnerdenne; while ( ska-eiterator.hasnext() ) { sk = ska-eiterator.next(); System.out.println("De-e er et ska-ebelagt objekt [" + sk + "] med ska- NOK " + sk.ska-());

LenkeListe<Ska-bar> beholder = new LenkeListe<Ska-bar>(); Iterator<Ska-bar> ska-eiterator = beholder.iterator(); Ska-bar sk = null; while ( ska-eiterator.hasnext() ) { sk = ska-eiterator.next(); System.out.println( "De-e er et ska-ebelagt objekt [" + sk + "] med ska- NOK " + sk.ska-() ); for (Ska-bar s: beholder) { System.out.println( "De-e er et ska-ebelagt objekt [" + s + "] med ska- NOK " + s.ska-() );

LenkeListe<Ska-bar> beholder = new LenkeListe<Ska-bar>(); Iterator<Ska-bar> ska-eiterator = beholder.iterator(); while ( ska-eiterator.hasnext() ) { System.out.println( "De-e er et ska-ebelagt objekt [" + sk + "] med ska- NOK " + ska-eiterator.next().ska-() ); // akkurat den samme itereringen: for (Ska-bar s: beholder) { System.out.println( "De-e er et ska-ebelagt objekt [" + s + "] med ska- NOK " + s.ska-() );

class TestProg { public stazc void main (String[] argumenter) { LenkeListe<String> beholder = new LenkeListe<String>(); for (String s: argumenter) { beholder.se-innforan(s); beholder.skrivutinfoomalleobjekteneilista(); for (String s : beholder) { System.out.println("- - - - > " + s);

public class LenkeListe <T> { private foran; private int antall; private class { (T t) { obj = t; neste; T obj; public void skrivutinfoomalleobjekteneilista() { n = foran; for (int i = antall; i>0; i- - ) { n.skrivutinfoomobjektetin(); n = n.neste; void skrivutinfoomobjektetin() { System.out.println(obj);.... public void skrivutinfoomalleobjekteneilista() {...

public class LenkeListe <T> { private foran; private int antall; private class { (T t) { obj = t; neste; T obj; public void skrivutinfoomalleobjekteneilista() { n = foran; for (int i = antall; i>0; i- - ) { n.skrivutinfoomobjektetin(); n = n.neste; void skrivutinfoomobjektetin() { System.out.println(obj);.... public void skrivutinfoomalleobjekteneilista() {...

void skrivutdennenogresten() { System.out.println("skrivUtDennenOgResten kalt i node nr " + nodenr); skrivutinfoomobjektetin(); if (neste!= null) neste.skrivutdennenogresten(); System.out.println("skrivUtDennenOgResten i node nr " + nodenr + " avslu-er"); void skrivutrestentilslu-dennen() { System.out.println("skrivUtRestenTilSlu-Dennen kalt i node nr " + nodenr); if (neste!= null) neste.skrivutrestentilslu-dennen(); skrivutinfoomobjektetin(); System.out.println("skrivUtRestenTilSlu-Dennen i node nr " + nodenr + " avslu-er");

neste neste neste neste null metode() metode() metode() metode() neste.metode(); neste.metode(); neste.metode(); neste.metode(); foran void metode() { <gjør det som skal gjøres i noden>; if ( neste!= null ) { neste.metode(); <her kan det også gjøres noe i noden> Se;er i gang «kall- løkka» void offentligmetode() { if ( foran!= null ) foran.metode() ;