252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public...

66
252-0027 Einführung in die Programmierung I 7.0 Arbeiten mit Objekten und Klassen Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013. and Thomas Gross 2016 All rights reserved.

Transcript of 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public...

Page 1: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

252-0027Einführung indie Programmierung I

7.0Arbeiten mit Objekten und KlassenThomasR.Gross

DepartmentInformatikETHZürichCopyright(c)Pearson2013.andThomasGross2016Allrightsreserved.

Page 2: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Uebersicht

6.9999Review

7.0Listenals Beispiel

Copyright(c)Pearson2013andThomasGross2016.Allrightsreserved.

2

Page 3: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Basistyps,Methode

public static void someFct() {

int x = 0;

int y = 0;

int z = 0;

// first stmt

}3

x

y

z

Page 4: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Basistyps,Methode

public static void someFct() {

int x = 0;

int y = 0;

int z = 0;

// first stmt

}4

x

y

z

0

0

0

Page 5: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

5

Leider falsch.Lokale Variablemüssen explizit initialisiertwerden,siehe letzte Slides.

Page 6: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Basistyps,Instanzmethode

void someFct() {

int x = 1;

int y = x + 1;

int z = 0;

// first stmt

}6

x

y

z

Page 7: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Basistyps,Instanzmethode

void someFct() {

int x = 1;

int y = x + 1;

int z = 0;

// first stmt

}7

x

y

z

1

2

0

Page 8: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Basistyps,Attributepublic class SomeClass {

int x = 1;

int y = x + 1;

int z;

void someFct() {

// first stmt

}

} 8

x

y

z

Page 9: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

public class SomeClass {

int x = 1;

int y = x + 1;

int z;

}

public class OtherClass {

void otherFct() {

SomeClass s = new SomeClass();

// first stmt

}

} 9

x

y

z

Page 10: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

public class SomeClass {

int x = 1;

int y = x + 1;

int z;

}

public class OtherClass {

void otherFct() {

SomeClass s = new SomeClass();

// first stmt

}

} 10

x

y

z

OtherClass.java

SomeC

lass.java

Page 11: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

public class SomeClass {

int x = 1;

int y = x + 1;

int z;

}

public class OtherClass {

void otherFct() {

SomeClass s = new SomeClass();

// z set to 0 even w/o initialization

}

} 11

x

y

z

OtherClass.java

SomeC

lass.java 1

2

0

Page 12: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

class SomeClass {

int x;

}

class OtherClass {

public static void main (String[] args) {

SomeClass x = new SomeClass();

System.out.println(x.x);

} // poor naming …

}

12

x

OtherClass.java

SomeC

lass.java

Page 13: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Referenztypes (“referencevariable”)

public static void someFct() {

SomeClass c;

// first stmt

System.out.println(c);

}

Class2d.java:8: variable c might not have been initialized System.out.println(c)

^1 error 14

c

Page 14: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Referenztypes (“referencevariable”)

§ Alle Variablen müssen ineiner Methode initialisiert werden§ Giltfür VariabledieReferenzen (Verweise)aufObjekte speichern§ Giltfür auch für Arrays

§ Verwenden auch Referenzvariable

§ Sonst gibt es eine CompilerErrorMessage§ Esmussfür denCompilerklar seindass eine Zuweisung stattfand§ Wenn möglich inDefinitioninitialisieren

15

Page 15: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

17

Page 16: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Referenztypes (“referencevariable”)

public static void someFct() {

int [] x;

// first stmt

System.out.println(x);

}

Class2d.java:8: variable x might not have been initialized System.out.println(x)

^1 error 20

x

Page 17: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Referenztypes (“referencevariable”)

public static void someFct() {

int [] x = new int[3];

// first stmt

}

21

x

Index 0 1 2

Element 0 0 0

Page 18: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Referenztypes (“referencevariable”)

public static void someFct() {

int [] x = {2, 5, 8};

// first stmt

}

22

x

Index 0 1 2

Element 2 5 6

Page 19: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Referenztypes (“referencevariable”)

public static void someFct() {

String [] s = null;

// first stmt

}

23

s

Page 20: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Referenztypes (“referencevariable”)

public static void someFct() {

String [] s = {“a”, “b”, “c”};

// first stmt

}

24

s

Index 0 1 2

Element “a” “b” “c”

Page 21: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Referenztypes (“referencevariable”)

public static void someFct() {

String [] s = new String[3]

// first stmt

}

25

s

Index 0 1 2

Element null null null

Page 22: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Attributeeiner Klassepublic class SomeClass {

int i;

int [] ia;

OtherClass o;

}

26

i

ia

o

Page 23: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Referenztypes (“referencevariable”)

public static void someFct() {

SomeClass c = new SomeClass();

// first stmt

}

28

c

i

ia

o

0

null

null

Page 24: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Referenztypes (“referencevariable”)

public static void someFct() {

SomeClass [] ca = new SomeClass[3];

// first stmt

}

29

ca

Index 0 1 2

Element null null null

Page 25: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

31

Page 26: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Referenztypes (“referencevariable”)

public static void someFct() {

SomeClass [] ca = new SomeClass[3];

for (int i=0; i<3; i++){

ca[i] = new SomeClass();

ca[i].ia = new int[3];

}

}32

ca

32

Index 0 1 2

Element

i

ia

o

0

null

i

ia

o

0

null

i

ia

o

0

null

Index 0 1 2

Element 0 0 0

Index 0 1 2

Element 0 0 0

Index 0 1 2

Element 0 0 0

Page 27: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

34

Page 28: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Attributeeiner Klassepublic class SomeClass {

int i;

int [] ia;

SomeClass o;

}

35

i

ia

o

Page 29: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

39

Page 30: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

41

Page 31: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Referenztypes (“referencevariable”)

public static void someFct() {

SomeClass c = new SomeClass();

SomeClass d = null;

d = c;

d.i = 1;

c = null;

d = null;

} 42

c

i

ia

o

1

null

null

d

Page 32: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Referenztypes (“referencevariable”)

public static void someFct() {

SomeClass c = new SomeClass();

SomeClass d = new SomeClass();

} 43

c

i

ia

o

0

null

null

d

i

ia

o

0

null

null

Page 33: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Referenztypes (“referencevariable”)

public static void someFct() {

SomeClass c = new SomeClass();

SomeClass d = new SomeClass();

c.o = d;

}

44

c

i

ia

o

0

null

d

i

ia

o

0

null

null

Page 34: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Variableeines Referenztypes (“referencevariable”)

public static void someFct() {

SomeClass c = new SomeClass();

SomeClass d = new SomeClass();

c.o = d;

}

Wie kann ich d.i auf1setzen?

2Möglichkeiten … 45

c

i

ia

o

0

null

d

i

ia

o

0

null

null

Page 35: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

46

Page 36: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Referenzen undObjekte

§ InJava, für Objekte undArraysgelten die”referencesemantics”Regeln.

Page 37: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Eine Klasse für Knoten einer Listepublic class ListNode {

int data;ListNode next;

}

§ Jeder Knoten der Liste speichert:§ DenWerteiner ganzen (int)Zahl§ Einen Verweis aufeinen anderen Listenknoten

§ ListNodes können zu einer Kette verbunden (“linked”) wer-denumeine Menge oder Liste vonWerten zu speichern.

data next42

data next-3

data next17

data next9 null

Page 38: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Verknüpfte Knoten -- Uebungsproblem 1

Welche Folge vonAnweisungen verändert diesesBild:

indieses?

list.next.next = new ListNode(30);

data next10

data next20

list

data next10

data next20

list data next30

Page 39: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Verknüpfte Knoten -- Uebungsproblem 2

Welche Folge vonAnweisungen verändert diesesBild:

indieses?

data next10

data next20

list

data next30

data next10

list data next20

list = new ListNode(30, list);

Page 40: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Verknüpfte Knoten -- Uebungsproblem 3

Welche Folge vonAnweisungen verändert diesesBild:

indieses?

data next10

data next20

list1

data next30

data next40

list2

data next10

data next30

list1

data next40

list2

data next20

Page 41: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

rest = list2.next;

list2.next = list1.next;

list1.next = list2;

list2 = rest;

64

Page 42: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Referenzen vs. ObjektenVariable = Wert;

Eine Variable (linksvon= )ist ein Zeiger ("Referenzvariable")

Ein Wert(rechts von= )ist ein Objekt (ein Rechteck,;worauf der Zeiger zeigt)

§ Für dieListe rechts:§ a.next = value;

heisst anpassen worauf zeigt§ variable = a.next;

heisst dievariable setzen sodass sie aufzeigt

data next10

adata next201

2

1

2

Page 43: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Referenzen verändern

§ Wenn dasProgramm sagt:

§ a.next = b.next;

§ dann heisst das:§ ”LassedieVariable a.next aufdenselbenWert(Objekt) zeigen wieb.next."

§ Oder, ”Lasse a.next aufdenselben Ortwie b.next zeigen."

data next10

adata next20

data next30

bdata next40

Page 44: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Verknüpfte Knoten -- Uebungsproblem 4

Welche Folge vonAnweisungen verändert diesesBild:

indieses?

data next10

data next990

list...

data next10

data next990

list...

data next1000

Page 45: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Frage über verknüpfte Knoten

§ Nehmen wir anwir haben eine lange Kette vonKnoten:

§ Wir wissen nicht wie lang dieKette ist.

§ Wie könnten wir dieWerte inallen Knoten ausgeben?

data next10

data next990

list...

data next20

Page 46: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Algorithmus Pseudocode

§ Fangen wir amAnfang der Liste an,front ist der 1.Knoten

§ while(es gibt noch Knoten auszugeben):§ Gebe dendataWertdesKnotens aus§ Gehe weiter zum nächsten Knoten viadasnext Attribut.

data next10

data next990

list...

data next20

Page 47: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Algorithmus Pseudocode

§ Fangen wir amAnfang der Liste an,front ist der 1.Knoten

§ while(es gibt noch Knoten auszugeben):§ Gebe dendataWertdesKnotens aus§ Gehe weiter zum nächsten Knoten viadasnext Attribut.

§ Wie wissen wir obnoch Knoten auszugeben sind?§ Wir haben einen Verweis aufeinen Knoten§ Nach der Ausgabe desletzten Knotens ist nextnull.

data next10

data next990

list...

data next20

Page 48: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Algorithmus Pseudocode

§ Fangen wir amAnfang der Liste an,front ist der 1.Knoten

§ while(es gibt noch Knoten auszugeben):§ Gebe dendataWertdesKnotens aus§ Gehe weiter zum nächsten Knoten viadasnext Attribut.

§ Wie können wir uns durch dieListe arbeiten ?

list = list.next; // is this a good idea?

data next10

data next990

list...

data next20

Page 49: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Abarbeiten einer Liste?

§ Ein (schlechter)Weg jeden Wertinder Liste auszugeben :

while (list != null) {System.out.println(list.data);list = list.next; // move to next node

}

§ Wasist dasProblem?§ (Wir verlieren dieListe während wir sie ausgeben)

data next10

data next990

list...

data next20

Page 50: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Eine weitere Referenz:current

§ Wir wollen list nicht verändern.Wir deklarieren eineandere Variableundändern diese.§ Eine ListNode Variableist nicht ein ListNode Objekt§ …sondern eine Referenz (Verweis)aufein Objekt

ListNode current = list;

data next10

data next990

list...

data next20

current

Page 51: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Eine weitere Referenz:currentListNode current = list;

§ Waspassiert wenn wir jetzt diese Anweisung ausführen:

current = current.next;

data next10

data next990

list...

data next20

current

Page 52: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Korrektes Durchlaufen einer Liste

§ Der korrekte Weg jeden Wertder Liste auszugeben:

ListNode current = list;while (current != null) {

System.out.println(current.data);current = current.next; // move to next node

}

§ DasVerändern voncurrent hatkeinen Einfluss aufdieListe.

data next10

data next990

list...

data next20

Page 53: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Eine Klasse LinkedIntList

§ ListNodes sollen nicht vonKlienten direkt verändertwerden.

§ Alsoentwickeln wir eine Klasse diedieKnoten versteckt:LinkedIntList.

front

LinkedIntListListNode ListNode ListNode

data next42

data next-3

data next17

element 0 element 1 element 2

Page 54: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

§ HatdieMethoden:§ add,add,get,indexOf,remove,size,toString

§ DieListe ist als Kette vonKnoten internimplementiert§ DasLinkedIntList Objekt enthält eine Referenz aufdasersteElementim front

§ null im next Attribut signalisiert Ende derListe§ Hatfront denWertnull soist dieListe leer

front

add(value)add(index, value)indexOf(value)remove(index)size()toString()

LinkedIntListListNode ListNode ListNode

data next42

data next-3

data next17

element 0 element 1 element 2

Page 55: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

LinkedIntList Klasse v1public class LinkedIntList {

private ListNode front;

public LinkedIntList() {front = null;

}

// methodsgohere

}

front =

LinkedIntList

Page 56: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Dieadd Methode// Adds the given value to the end of the list.public void add(int value) {

...}

§ Wie wollen wir einen neuen Knoten amEnde hinzufügen?§ SinddieWerte inderListe vor diesem Schritt wichtig?

front = data next42

data next-3

data next17

element 0 element 1 element 2

Page 57: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

Ein Elementneine leere Liste hinzufügen

§ Bevor20hinzugefügt wird: Danach:

§ Wir müssen einen Knoten erstellen undandieListe anhängen.

front = front = data next20

element 0

Page 58: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

DieaddMethode,1.Versuch// Adds the given value to the end of the list.public void add(int value) {

if (front == null) {// adding to an empty listfront = new ListNode(value);

} else {// adding to the end of an existing list

...

}}

Page 59: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

§ Bevor20amEnde hinzugefügt wird :

§ Danach:

front = data next42

data next-3

front = data next42

data next20

element 0 element 2

element 0 element 1

Aneine nicht-leere Liste anhängen

data next-3

element 1

Page 60: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

data next-3

Vorsicht anderKante!

§ Umein Elementzur Liste hinzuzufügen (oder zu vonderListezu entfernen)müssen wir dasnext Attribut desvorherigenKnotens modifizieren.

front = data next42

element 0 element 1

Page 61: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

data next-3

Vorsicht anderKante!

§ Umein Elementzur Liste hinzuzufügen (oder zu vonderListezu entfernen)müssen wir dasnext Attribut desvorherigenKnotens modifizieren.

§ Wie durchlaufen wir eine Liste?

front = data next42

element 0 element 1

Page 62: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

data next-3

Vorsicht anderKante!

§ Umein Elementzur Liste hinzuzufügen (oder zu vonderListezu entfernen)müssen wir dasnext Attribut desvorherigenKnotens modifizieren.

§ Wie durchlaufen wir eine Liste?

front = data next42

element 0 element 1

current =

Page 63: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

data next-3

Vorsicht anderKante!

§ Umein Elementzur Liste hinzuzufügen (oder zu vonderListezu entfernen)müssen wir dasnext Attribut desvorherigenKnotens modifizieren.

§ Wie durchlaufen wir eine Liste?§ Wasfür einen Typ musscurrent haben?

front = data next42

element 0 element 1

current =

Page 64: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

data next-3

Vorsicht anderKante!

§ Umein Elementzur Liste hinzuzufügen (oder zu vonderListezu entfernen)müssen wir dasnext Attribut desvorherigenKnotens modifizieren.

§ Wie durchlaufen wir eine Liste?§ Wasfür einen Typ musscurrent haben?ListNode

front = data next42

element 0 element 1

current =

Page 65: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

data next-3

Vorsicht anderKante!

§ Umein Elementzur Liste hinzuzufügen (oder zu vonderListezu entfernen)müssen wir dasnext Attribut desvorherigenKnotens modifizieren.

§ Worauf sollte current verweisen wenn wir 20amEnde einfügenwollen?

§ Welcher LoopTestlässt uns andieser Stelle anhalten?

front = data next42

element 0 element 1

Page 66: 252-0027 Einführungin dieProgrammierungI 7.0 ... · 21 x Index 0 1 2 Element 0 0 0. ... public class ListNode {int data; ListNode next;} § JederKnoten derListespeichert: § Den

DieaddMethode// Adds the given value to the end of the list.public void add(int value) {

if (front == null) {// adding to an empty listfront = new ListNode(value);

} else {// adding to the end of an existing listListNode current = front;while (current.next != null) {

current = current.next;}current.next = new ListNode(value);

}}