Sie sind auf Seite 1von 90

Informatik-Lexi kon

Klasse erzeugen (BlueJ)


So legen Sie in BlueJ eine neue Klasse an: 1."New Class" bzw. "Neue Klasse" - Button klicken. 2.Der Klasse einen Namen geben z.B. "Kreis". !.Sic" #$r einen Klassen-%&' entsc"ei(en )"Class" #$r eine normale Klasse "*''let" #$r ein Ja+a-*''let (as in einem Browser ausge#$"rt wer(en soll,. -..m /au't#enster sie"t man 0etzt (ie neue Klasse als oranges 1ec"teck. 2.Do''elklicken au# (ie neue Klasse um (en 3uellte4t zu e(itieren. 5.Den automatisc"e erzeugten 3uellte4t "bereinigen" o(er e+entuell sogar ganz l6sc"en. 7.Den eigenen 3uellte4t erg8nzen - *ttribute (er Klasse (e#inieren - Konstruktor 'rogrammieren - weitere 9et"o(en anlegen. :.3uellte4t (er Klasse kom'ilieren. ;.Durc" 1ec"tsklick au# (ie neue Klasse ein <b0ekt (er Klasse erzeugen. 1=.Durc" 1ec"tsklick au# (as <b0ekt (ie 9et"o(en (er Klasse aus'robieren un( testen.

Informatik-Lexikon
Kompilieren
Das >bersetzen (es 3uellte4tes einer ?rogrammiers'rac"e in ein aus#$"rbares ?rogramm wir( als Kom'ilieren )engl.: to com'ile, bezeic"net. @inen Ja+a-3uellte4t k6nnte man 'er /an( $bersetzen was +ielleic"t (rei %age (auern w$r(e o(er aber (urc" ein s'ezielles ?rogramm automatisc" $bersetzen lassen was nur wenige Sekun(en (auert. @in solc"es >bersetzungs-?rogramm bezeic"net man als Com'iler.

Informatik-Lexikon
Klasse, Minimalquelltext
Dies ist (er 9inimalAuellte4t einer Ja+a-Klasse:
'ublic class Klassenname B 'ublic Klassenname), B C C

Der 9inimalAuellte4t einer Ja+a-Klasse beste"t aus (er Klassen-Deklaration un( (er Deklaration eines Konstruktors. Der Konstruktor ist (ie 9et"o(e (ie beim @rzeugen eines

<b0ektes (er Klasse ausge#$"rt wir(. DroE an#angen k6nnen Sie mit (iesem 9inimal-3uellte4t aller(ings noc" nic"ts. @s #e"len a, (ie *ttribute (ie (en Status (er Klassenob0ekte (e#inieren un( b, (ie 9et"o(en (ie (as Fer"alten (er Klassenob0ekte #estlegen.

Informatik-Lexikon
Konstruktor
Der Konstruktor ist eine 9et"o(e (ie immer (ann au#geru#en un( ausge#$"rt wir( wenn ein neues <b0ekt (er Klasse erzeugt wir(. Beispiel 1: irektes !r"eiten mit BlueJ Sie "aben eine Klasse wie Kreis o(er Dreieck +or sic" un( wollen nun im BlueJ-Genster ein <b0ekt sonne (er Klasse Kreis o(er ein <b0ekt (ac" (er Klasse Dreieck erzeugen. Hm (as <b0ekt sonne zu erzeugen klicken Sie mit (er rec"ten 9austaste au# (ie Klasse Kreis un( w8"len aus (em Konte4tmen$ (en Be#e"l "new Kreis" o(er "neuer Kreis". Sie wer(en (ann au#ge#or(ert (iesem neuen Kreis-<b0ekt einen Namen zu geben. *nsc"lieEen( wir( +on BlueJ ein Kreis-<b0ekt mit (em +on ."nen gew$nsc"ten Namen erzeugt un( als rotes 1ec"teck in (em unteren Gensterbereic" angezeigt. Ium @rzeugen (ieses Kreis-<b0ektes "at BlueJ automatisc" (en Konstruktor (er Klasse Kreis au#geru#en. Beispiel #: $rogrammieren Sie "aben eine Klasse wie Ieic"nung in (er Sie mit Kreis- un( Dreieck-<b0ekten umge"en wollen. .n (em Konstruktor (ieser Klasse erzeugen Sie (ann einen neuen Kreis un( ein neues Dreieck wie #olgt:
'ublic +oi( Ieic"nung), B sonne J new Kreis),K (ac" J new Dreieck),K C

.n (em 3uellte4t (es Konstruktors +on Ieic"nung wer(en zur @rzeugung (er <b0ekte sonne un( (ac" (ie Konstruktoren (er Klassen Kreis un( Dreieck au#geru#en. Lenn Sie nun mit BlueJ eine neue Ieic"nung erzeugen wollen m$ssen Sie wie(erum (en Konstruktor (er Klasse Ieic"nung au#ru#en un( so weiter.

Informatik-Lexikon
!ttri"ute
*ttribute sin( beson(ere Fariablen (ie im Ko'# (er Klassen(eklaration #estgelegt wer(en.
'ublic class Sc"i## B 'ri+ate String nameK 'ri+ate int gewic"tK

'ublic Sc"i##), B C C

.n (ieser ein#ac"en Beis'ielklasse sin( name un( tonnen (ie bei(en einzigen *ttribute (er Klasse Sc"i##. Diese *ttribute k6nnen inner"alb (er Klasse +on allen 9et"o(en (er Klasse benutzt wer(en. *uEer"alb (er Klasse sin( (ie bei(en *ttribute nic"t zug8nglic" weil sie als 'ri+ate (eklariert wur(en. Hm 'ri+ate-*ttribute zu lesen o(er zu +er8n(ern be(ar# es son(ieren(er bzw. +er8n(ern(er 9et"o(en. Die <b0ekte einer Klassen +er#$gen eben#alls $ber (ie *ttribute (er Klasse. Je(es Sc"i##<b0ekt "at einen Namen +om %&' String un( ein Dewic"t +om %&' int. *ller(ings k6nnen sic" (ie *ttributwerte (er einzelnen <b0ekte +oneinan(er untersc"ei(en. Die Desamt"eit aller *ttributwerte bestimmt (en Status eines <b0ektes.

Informatik-Lexikon
%aria"le
Kurz&efinition
Die ein#ac"ste De#inition #$r (en Begri## Fariable (ie mir au# (ie Sc"nelle ein#8llt ist #olgen(e: @ine Fariable ist eine Stelle im *rbeitss'eic"er (es 1ec"ners (ie a, eine bestimmte numerisc"e *(resse un( b, einen bestimmten .n"alt "at. Beim ?rogrammieren muss aber nic"t (ie numerisc"e *(resse einer Fariable angegeben wer(en son(ern 0e(e Fariable kann $ber einen i"r eigenen Fariablennamen anges'roc"en wer(en.

eklaration
Die Iuor(nung +on S'eic"era(resse Datent&' un( Fariablennamen in einer ?rogrammiers'rac"e wie Ja+a o(er ?ascal bezeic"net man als Fariablen(eklaration o(er "Deklaration einer Fariablen".
Beispiel $as'al +ar i : integerK +ar name : StringK

Beispiel Ja(a int iK String nameK

Initialisierung
Fiele ?rogrammiers'rac"en initialisieren neu (eklarierte Fariablen automatisc" Strings zum Beis'iel mit (em leeren String Ia"len mit (em Lert =. /8u#ig m6c"te man Fariablen aber auc" mit an(eren Startwerten ausstatten. Diesen Forgang bezeic"net man als .nitialisierung.
Beispiel Ja(a int i J =K int 0 J 2=K String name J "/elmic""K #or )int i J 1K i M 1=K iNN, ...

Das letzte Beis'iel ist (ie .nitialisierung einer Oau#+ariablen in einer #or-Sc"lei#e.

%aria"len, !ttri"ute, $arameter


*ttribute sin( Fariablen (ie bei (er Deklaration einer Klasse #estgelegt wer(en. N8"ere @inzel"eiten sie"e *ttribute. Fariablen (ie keine *ttribute sin( kommen zum Beis'iel in Gorm +on lokalen Fariablen +or.
Beispiel Ja(a 'ublic int summe)int N, B int sum J =K #or )int k J =K k M NK kNN, sum J sum N kK return sumK C

Dieses Beis'iel ent"8lt (rei Fariablen bei (enen es sic" nic"t um *ttribute "an(elt. Die Fariable sum ist eine lokale Fariable eine ganz normale Fariable also (ie inner"alb (er 9et"o(e (eklariert un( initialisiert wur(e un( (ie auc" nur inner"alb (er 9et"o(e e4istiert. Lir( (ie 9et"o(e been(et so "6rt (ie Fariable au# zu e4istieren. Die Fariable k ist eine lokale Fariable (ie inner"alb einer #or-Sc"lei#e (eklariert un( initialisiert wur(e. Der "Oebensbereic"" +on k ist noc" kleiner als (er +on sum. L8"ren( sum wenigstens inner"alb (er gesamten 9et"o(e summe), e4istiert besc"r8nkt sic" (er D$ltigkeitsbereic" +on k aussc"lieElic" au# (ie #or-Sc"lei#e. Die Fariable N ist ein ?arameter. @in ?arameter ist eine lokale Fariable (ie beim *u#ru# einer 9et"o(e $bergeben wir(. Der D$ltigkeitsbereic" +on N ist 8"nlic" wie (er +on sum (ie gesamte 9et"o(e. Die .nitialisierung +on N er#olgt aller(ings nic"t inner"alb (er

9et"o(e son(ern beim *u#ru# (er 9et"o(e (urc" (en Lert (en man (er 9et"o(e $bergibt )(urc" (en aktuellen ?arameter also,.

!rra)s
*rra&s sin( ganz s'ezielle Fariablen. @in *rra& um#asst eine en(lic"e 9enge +on gleic"en Fariablen (ie alle unter (em gleic"en Namen anges'roc"en wer(en k6nnen aller(ings muss (abei ein .n(e4 $bergeben wer(en. Leitere @inzel"eiten sie"e *rra&s.

*"+ekte
*uc" <b0ekte sin( ganz s'ezielle Fariablen "an(elt es sic" (oc" um .nstanzen )Ferk6r'erungen, +on Klassen. Leitere @inzel"eiten sie"e <b0ekte.

,eiger
Ieiger sin( eine weitere Dru''e +on s'eziellen Fariablen. L8"ren( "normale" Fariable auc" (ie <b0ekte k6nnen wir (azu rec"nen Daten als .n"alt "aben s'eic"ert ein Ieiger le(iglic" (ie *(resse eines S'eic"erbereic"s. Leitere @inzel"eiten sie"e Ieiger.

Informatik-Lexikon
$arameter
?arameter sin( Fariablen (ie (azu (ienen einer 9et"o(e beim *u#ru# bestimmte .n#ormationen zu $bergeben. Ium Beis'iel muss eine 9et"o(e namens setzeNeue?osition), (ie Koor(inaten (er neuen ?osition mitgeteilt bekommen. Da"er sc"reibt man bei (er De#inition (er Gunktion (ie so genannten #ormalen ?arameter in run(e Klammern "inter (en Gunktionsnamen:
'ublic +oi( setzeNeue?osition)int 4 int &, B 4'os J 4K &'os J &K ... C

/ier se"en wir zwei #ormale ?arameter +om %&' int n8mlic" 4 un( &. @in #ormaler ?arameter "at also einen Namen )4 &, un( einen Datent&' )int #loat (ouble boolean String etc.,. Beim *u#ru# (er Gunktion z.B. so:
mac"eDies),K setzeNeue?osition)2== 1==,K mac"eDas),K

wer(en konkrete Lerte als aktuelle ?arameter $bergeben "ier also 2== un( 1==. Der konkrete Lert 2== wir( beim *u#ru#en (er Gunktion in (en #ormalen ?arameter 4 "ineingesc"rieben (er konkrete Lert 1== in (en #ormalen ?arameter &. Lenn setzeNeue?osition), ausge#$"rt wir( "aben (ie ?arameter 4 un( & also tats8c"lic" (ie Lerte 2== bzw. 1==. Durc" (ie bei(en Iuweisungen in unserer Beis'iel#unktion "aben

(ann auc" (ie *ttribute 4'os un( &'os (ie Lerte 2== bzw. 1==. /ier noc" eine wic"tige 1egel (ie aber eigentlic" ganz selbst+erst8n(lic" sein sollte: Beim *u#ru#en einer Gunktion m$ssen (ie aktuellen ?arameter in *nza"l Datent&' un( 1ei"en#olge mit (en #ormalen ?arametern $bereinstimmen. 1ic"tige *u#ru#e +on setzeNeue?osition)int 4 int &, setzeNeue?osition)-== 2=,K PP "ier wer(en zwei Ia"lenkonstanten $bergeben setzeNeue?osition)neuQ neuR,K PP "ier wer(en zwei int-Fariable $bergeben Ge"ler"a#te *u#ru#e +on setzeNeue?osition)int 4 int &, setzeNeue?osition)-==,K PP "ier wir( nur ein ?arameter $bergeben setzeNeue?osition)"Rellow" "Dreen",K PP "ier wer(en zwei ?arameter (es #alsc"en %&'s $bergeben setzeNeue?osition)int 4 int &,K PP "ier wur(e (ie #alsc"e S&nta4 gew8"lt n8mlic" (ie einer Gunktions-De#inition un( nic"t (ie eines Gunktions-*u#ru#s. setzeNeue?osition)NeuR NeuQ,K PP "ier ist #ormal alles korrekt (oc" "at (er ?rogrammierer aus Ferse"en zuerst (ie neue R-Koor(inate $bergeben un( (ann (ie neue Q-Koor(inate. .n (er Gunktion er"8lt (ann (as *ttribut 4'os (en neuen R-Lert zugewiesen un( &'os (en neuen Q-Lert.

Informatik-Lexikon
*"+ekte
<b0ekte wer(en auc" als .nstanzen +on Klassen bezeic"net. Fon 0e(er Klasse k6nnen beliebig +iele <b0ekte angelegt wer(en un( 0e(es <b0ekt muss einer Klasse ange"6ren. Das Fer"8ltnis zwisc"en Klassen un( <b0ekten ist +ergleic"bar mit (em Fer"8ltnis +on Gormat+orlage un( Dokument (er Baurei"e "?assat" un( einem konkreten ?assat o(er +on Stem'el un( Stem'elab(ruck. N8"eres (azu sie"e %"eorieteil "Klassen un( <b0ekte" in (er ?DG-Fersion. .n BlueJ wer(en <b0ekte "ergestellt in(em man mit (er rec"ten 9austaste au# eine Klasse klickt un( (ann (en Be#e"l "new ..." o(er "neues..." gibt. Die so erzeugten <b0ekte sin( (ann in (er <b0ektleiste unten im BlueJ-Genster als rote K8sten zu se"en. Fon einer Klasse kann man zwei (rei o(er me"r +ersc"ie(ene <b0ekte anlegen. <b0ekte k6nnen Daten un( <'erationen besitzen. Die Daten wer(en bei Ja+a als "*ttribute" bezeic"net (ie <'erationen als "9et"o(en". 9it /il#e (er 9et"o(en kann man bestimmte *ttribute (er <b0ekte +er8n(ern z.B. (ie Garbe eines Kreis-<b0ektes. 9it (em BlueJ-<b0ektins'ektor kann man sic" (ie *ttribute eines 0e(en <b0ektes anse"en.

Informatik-Lexikon
Klasse
!uf"au einer Ja(a-Klasse
-lie&erung

*u#bau einer Ja+a-Klasse *ttribute 1. 'rimiti+e *ttribute 2. 1e#erenzattribute Konstruktoren 1. *llgemeines 2. <+erloa(ing +on Konstruktoren 9et"o(en 1. Datenka'selung 2. Fer8n(ern(e 9et"o(en !. *b#ragen(e 9et"o(en -. Leitere 9et"o(en

1 Aufbau einer Java-Klasse

!ttri"ute
1. primiti(e !ttri"ute/ Das sin( *ttribute in (enen ein#ac"e Daten ges'eic"ert wer(en:

# Einfache Attribute in der Klasse Auto G$r ein#ac"e *ttribute 'asst auc" (ie BarnesPK6lling-De#inition gut: "Datenfelder sind kleine Bereiche innerhalb eines Objektes, in denen Werte ges eichert !erden k"nnen#"

0 Attribute und Attribut!erte des Objektes !aage$ Solc"e Lerte "aben wir bis"er als *ttributwerte bezeic"net. *ttribute m$sse nic"t +om %&' int sein son(ern es k6nnen auc" String- o(er #loat-*ttribute o(er kom'lizierter au#gebaute *ttribute sein. #. 1eferenz-!ttri"ute/ Neben (en 'rimiti+en *ttributen k6nnen auc" <b0ekte an(erer Klassen als *ttribute au#tretenK man s'ric"t (ann +on 1e#erenz-*ttributen. .n (er Golge 2 )sie"e ?DG-Fersion, "aben wir (ie Klasse Ieic"nung mit zwei 1e#erenz*ttributen ausgestattet: sonne un( "aus. Bei (iesen 1e#erenz-*ttributen "an(elt es sic" um <b0ekte (er Klassen Kreis bzw. 3ua(rat.

Konstruktoren
1. !llgemeines/ Je(e Klasse muss min(estens einen Konstruktor "aben. @s sin( auc" me"rere Konstruktoren m6glic" (ie sic" (ann aber in i"ren ?arameterlisten untersc"ei(en m$ssen.

Der Konstruktor muss genau so "eiEen wie (ie KlasseK auc" au# DroE- un( Kleinsc"reibung ist (abei zu ac"ten. Der Konstruktor ist eine beson(ere 9et"o(e (ie zum @rzeugen +on <b0ekten (ient. 96c"te (er Benutzer (er Klasse "ier irgen(wie steuern( eingrei#en also zum Beis'iel bestimmte Lerte selbst bestimmen so gesc"ie"t (as mit /il#e +on ?arametern.

2 Ein Konstruktor %it &!ei 'ara%etern Bei unserer Klasse *uto aus Golge - "at (er Konstruktor zwei ?arameter. Lenn ein neues *uto-<b0ekt erzeugt wir( k6nnen wir (irekt beim @rzeugen #estlegen wie+iel Oiter Benzin im %ank (es Lagens sin( un( wie "oc" (er aktuelle Kilometerstan( ist. #. *(erloa&ing (on Konstruktoren/ @ine Klasse kann me"rere Konstruktoren "aben (ie sic" (ann aber in i"ren ?arameterlisten untersc"ei(en m$ssen. Das kann unter Hmst8n(en se"r +orteil"a#t sein. G$r (ie Klasse *uto k6nnte man z.B. (rei Konstruktoren sc"reiben:
'ublic *uto), 'ublic *uto )#loat benz, 'uclic *uto )#loat benz int km,

1u#t man (ie erste 9et"o(e au# so w$r(en Benzinstan( un( Kilometerstan( au# irgen(welc"e (e#ault-Lerte gesetzt z.B. au# 2= bzw. 1=.===. enn man (ie zweite 9et"o(e au#ru#t so wir( (er Benzinstan( aus (em ?arameter ausgelesen w8"ren( (er Kilometerstan( au# (en (e#ault-Lert 1=.=== gesetzt wir(. Hn( wenn man (ie (ritte 9et"o(e au#ru#t so wer(en bei(e ?arameter ausgewertet. N8"eres zum <+erloa(ing +on Konstruktoren er#a"ren Sie au# (er %"eorieseite.

Met3o&en
Be+or wir au# 9et"o(en zu s'rec"en kommen soll ein se"r wic"tiges allgemeines ?rinzi' erl8utert wer(en n8mlic" (as ?rinzi' (er Datenka'selung.

1.

atenkapselung/

Das ?rinzi' (er Datenka'selung ist (erart wic"tig (ass es in einen eigenen %eil ausgelagert wur(e. Dort k6nnen (ie @inzel"eiten nac"gelesen wer(en. #. %er4n&ern&e Met3o&en (Mutator-Met3o&en)/ 9anc"e *ttribute m$ssen +er8n(ert wer(en wenn man (em <b0ekt Oeben ein"auc"en will. Lenn man eine Klasse Kreis un( ein (a+on abgeleitetes <b0ekt ball "at so will man (en Ball au# (em Bil(sc"irm bewegen k6nnen. Dazu muss man (as *ttribut 4'os un( (as *ttribut &'os (es Ball-<b0ektes +er8n(ern k6nnen. 9an k6nnte nun ein#ac" (as *ttribut 4'os zu einem 'ublic-*ttribut mac"en. %ec"nisc" ist (ies m6glic" aber se"r riskantS Je(e 9et"o(e einer Klasse (ie 0etzt Iugri## au# Kreis<b0ekte "at kann nac" Belieben (ie 6##entlic"en *ttribute +er8n(ern un( au# Lerte setzen (ie $ber"au't keinen Sinn mac"en. Stellen Sie sic" +or (as S'iel#el( #$r (en Ball ist nac" links un( rec"ts begrenzt. Die nie(rigste 4-Koor(inate soll = sein (ie "6c"ste 5-=. Lenn sic" (er Ball nun an ?osition 4 J 2== be#in(et kann er sic" eigentlic" nur noc" 1-= ?i4el nac" rec"ts bewegen. .st (as *ttribut 4'os nun 6##entlic" zug8nglic" so k6nnte eine #alsc" 'rogrammierte G<1-Sc"lei#e (ie Q-?osition um !== Lerte er"6"en. Der Ball be#8n(e sic" 'l6tzlic" au# (er ?osition 4 J :== (ie $ber"au't nic"t (e#iniert ist. *us (iesem Drun( sollten alle *ttribute eines <b0ektes als 'ri+at (eklariert wer(en - es sei (enn Sie sin( sic" ganz sic"er (ass nic"ts gegen eine Fer6##entlic"ung (es *ttributes s'ric"t. *ber lesen Sie +or"er #olgen(es Iitat: " Das ist der gan&e Ja%%er( die Du%%en sind so sicher und die )escheiten so voller *!eifel+ " )Bertran( 1ussell,. Lenn Sie ein *ttribut +er8n(ern wollen so m$ssen Sie (azu eine s'ezielle 9et"o(e 'rogrammieren (ie bei Be(ar# bestimmte Kontrollstrukturen zur Fer#$gung stellt (amit (as *ttribut nic"t au# unerlaubte Lerte gesetzt wir(. .n unserem Beis'iel mit (em Ball k6nnte (ie 9et"o(e zum Fer8n(ern (er Q-?osition zum Beis'iel so ausse"en:
'ublic +oi( nac"Oinks)int strecke, B i# )4'os N strecke MJ 5-=, strecke NJ 4'osK C

So ganz #e"ler#rei ist (iese 9et"o(e noc" nic"tK wenn zum Beis'iel 0eman( (en Lert -1=== als ?arameter w8"lt so wir( (ie Q-?osition au# einen negati+en Lert gesetzt was nat$rlic" nic"t sein (ar#. *lso m$sste (ie Kontrollstruktur noc" etwas +er#einert wer(en. 0. !"fragen&e Met3o&en (*"ser(er-Met3o&en)/ Lenn Sie wissen wollen an welc"er Q-?osition sic" (as Kreis-<b0ekt ball gera(e be#in(et so k6nnten Sie t"eoretisc" (irekt au# (as *ttribut 4'os zugrei#en. Das ge"t aber nur (ann wenn (ieses *ttribut nic"t als 'ri+at (eklariert wur(e. Lenn Sie sic" aber an (as ?rinzi' (er Datenka'selung ge"alten "aben so ist eine solc"e *b#rage nic"t m6glic" (enn nac" auEen "in ist (as *ttribut nic"t me"r sic"tbar. *lso m$ssen Sie ab#ragen(e 9et"o(en konstruieren (ie #$r Sie (iese *rbeit $berne"men. B*1N@S un( KTOO.D s'rec"en "ier +on son(ieren(en 9et"o(en. G$r (ie Q-?osition eines Kreis-<b0ektes k6nnte (ie *b#ragemet"o(e zum Beis'iel so ausse"en:
'ublic int getQ?os),

B return 4'osK C

Soll bei einem Degenstan( aus (em *(+enture-S'iel abge#ragt wer(en ob es sic" um eine La##e "an(elt so ge"t (as so:
'ublic boolean istLa##e), B return )t&' JJ 1, C

@s wir( ein#ac" abge#ragt ob (er %&' (es Degenstan(es (en Lert 1 "at. Der La"r"eitswert (en (ieser Fergleic" lie#ert wir( als Gunktionsargument zur$ckgegeben. Dilt t&' JJ 1 so wir( true zur$ckgelie#ert an(ern#alls #alse. 5. 6eitere Met3o&en/ Neben (en +er8n(ern(en 9et"o(en un( (en ab#ragen(en 9et"o(en sin( weitere *rten +on 9et"o(en in Ja+a )un( an(eren ?rogrammiers'rac"en, (enkbar. *llgemein "aben 9et"o(en eine ganz bestimmte *u#gabe in (er ?rogrammierung einer Klasse. 1ein t"eoretisc" k6nnte eine Klasse aus (en *ttributen (em Konstruktor sowie einer o(er zwei weiteren 9et"o(en beste"en. Kom'le4e Klassen "aben aber me"r als eine o(er zwei *u#gaben zu erle(igen ents'rec"en( "oc" ist (ann auc" (ie Ia"l (er 9et"o(en. 9anc"e *u#gaben sin( aber so kom'le4 (ass man sie besser in zwei (rei 9et"o(en zerlegt: @ine 6##entlic"e )'ublic, Sc"nittstellen-9et"o(e (ie (ie Be#e"le aus (er *uEenwelt in Gorm +on ?arametern entgegennimmt sowie eine o(er zwei nic"t-6##entlic"e )'ri+ate, /il#smet"o(en (ie +on (er 6##entlic"en 9et"o(e au#geru#en wer(en nac" auEen "in aber nic"t in @rsc"einung treten. *ls erstes Beis'iel wollen wir eine mat"ematisc"e Gunktion betrac"ten (ie (ie @nt#ernung eines Kreis-<b0ekts +om rec"ten 1an( (er Ieic"en#l8c"e berec"net:
'ublic int getDistanceQ1), B return 5-= - 4'osK C

Las ist (as #$r eine 9et"o(eU @s wir( "ier etwas abge#ragt n8mlic" (ie @nt#ernung (es Kreis-<b0ektes +om rec"ten 1an( (er Ieic"en#l8c"e. *ber (ie 9et"o(e ist keine ab#ragen(e 9et"o(e in (em Sinne (ass (er Lert eines *ttributes zur$ckgelie#ert wir(. Der *ttributwert #lieEt in eine Berec"nung ein (eren @rgebis (ann zur$ckgelie#ert wir(. Hnser zweites Beis'iel ist reic"lic" konstruiert soll aber +er(eutlic"en was alles in Ja+a m6glic" ist )ob es sinn+oll ist ist eine an(ere Sac"e,.
'ublic int nac"Oinks)int strecke, B i# )4'os N strecke MJ 5-=, B 4'os NJ streckeK return 4'osK C C

Diese seltsame 9et"o(e +er8n(ert nic"t nur (as *ttribut 4'os son(ern lie#ert gleic"zeitig seinen )neuen, Lert zur$ck. @s "an(elt sic" also um eine ab#ragen(e un( +er8n(ern(e 9et"o(e. Se"r elegant ist so etwas nic"t un( ic" wer(e eine solc"e ?rogrammierweise

negati+ bewerten sollte ic" etwas V"nlic"es in einer O6sung ent(ecken.

73eorie

*(erloa&ing (on Met3o&en


1. *(erloa&ing (on Konstruktoren

1 *!ei Konstruktoren in einer Klasse Die *bbil(ung 1 zeigt (ie Klasse *uto mit zwei +ersc"ie(enen Konstruktoren. Der erste Konstruktor "at eine ?arameterliste mit zwei ?arametern w8"ren( (er zweite Konstruktor $ber keine ?arameter +er#$gt. Klickt man nun (ie Klasse *uto mit (er rec"ten 9austaste an so ersc"einen im Konte4tmen$ bei(e Konstruktoren. 9an kann sic" 0etzt einen (er bei(en ausw8"len. @ntsc"ei(et man sic" #$r (en ersten Konstruktor so muss man (en Benzinstan( un( (ie Kilometerza"l selbst eingeben. L8"lt man (agegen (en zweiten Konstruktor so wir( (as <b0ekt o"ne 1$ck#rage so#ort erzeugt. Der Benzinstan( wir( (ann au# -= Oiter (er Kilometerstan( au# :2.=== km #estgelegt. @ine Klasse kann beliebig +iele solc"er Konstruktoren "aben. *ber alle Konstruktoren m$ssen sic" in i"ren ?armeterlisten untersc"ei(en: Die Ia"l (er ?arameter muss untersc"ie(lic" sein o(er (er %&' (er ?arameter muss +ersc"ie(en sein.

@in Konstruktor kann zum Beis'iel


'ublic *uto )float benz int km,

"eiEen w8"ren( (er zweite Konstruktor


'ublic *uto )int benz int km,

"eiEt. <+erloa(ing o(er >berla(en: Damit bezeic"net man (ie %atsac"e (ass me"rere +ersc"ie(ene Farianten ein- un( (erselben 9et"o(e m6glic" sin(. Die 9et"o(enbezeic"nungen sin( i(entisc" 0e(oc" m$ssen sic" (ie 9et"o(en in i"ren ?arameterlisten ein(eutig untersc"ei(en. *nsonsten kann Ja+a zur Oau#zeit nic"t entsc"ei(en welc"e 9et"o(e au#geru#en wur(e.

#. *(erloa&ing normaler Met3o&en


*uc" normale 9et"o(en k6nnen $berla(en wer(en. *uc" "ier gilt (as was bereits bei (en Konstruktoren gesagt wur(e: Die ?arameterlisten (er $berla(enen 9et"o(en m$ssen sic" untersc"ei(en.

73eorie

atenkapselung
Lenn Sie in einem *uto #a"ren so wollen Sie sic" au# (en Ferke"r konzentrieren un( nic"t st8n(ig (ar$ber nac"(enken wie (ie Dangsc"altung o(er (as Das'e(al #unktionieren. Das w$r(e sie nur ablenken un( zu Ge"lern +er#$"ren. @s reic"t wenn Sie wissen !o (as Das'e(al ist un( !ie man es be(ient bzw. wie Sie (ie D8nge ric"tig einlegen. Die @inzel"eiten (er 9ec"anik se"en sie nic"t (enn sie sin( +or ."nen +erborgen. *nalog +er#8"rt man wenn man 'rogrammiert. Lenn Sie eine Oinie zeic"nen wollen so reic"t es +6llig aus wenn Sie wissen dass es (en (rawOine-Be#e"l gibt un( !ie er au#geru#en wir(. 9it welc"em mat"ematisc"en *lgorit"mus (er Be#e"l (ie Oinie zeic"net interessiert nic"t. Dieses seit langem bew8"rte ?rogrammier'rinzi' "eiEt Datenka'selung. Die inneren Details einer Klasse wer(en eingeka'selt un( (a(urc" +or (er *uEenwelt +erborgen. Dazu betrac"ten wir einmal #olgen(e 3uellte4te:

1 Datenka selung konkret Die *bbil(ung 1 zeigt (en 3uellte4t +on zwei Klassen Dangsc"altung un( *uto zwisc"en (enen eine /at-Bezie"ung beste"t: Je(es <b0ekt (er Klasse *uto "at eine Dangsc"altung gs (er Klasse Dangsc"altung. Die Klasse Dangsc"altung "at wie(erum ein *ttribut gang welc"es als 'ri+at (eklariert ist. Lelc"e Golgen (ies "at zeigt (ie Ge"lermel(ung im Genster (er Klasse *uto: Der Be#e"l
S&stem.out.'rintln)gs.gang,K

kann nic"t au# (as *ttribut gang (es <b0ektes gs zugrei#en. Das *ttribut gang ist eine "rein interne *ngelegen"eit" (er Klasse Dangsc"altung. Nieman( (er (ie Klasse +erwen(et muss wissen wie (ie D8nge o(er (ie Dangwec"sel inner"alb (ieser Klasse realisiert wur(en - solange (ie Klasse (as mac"t was sie mac"en soll. 9an s'ric"t "ier +on in#ormation "i(ing o(er Datenka'selung. L$r(e man (agegen sc"reiben
S&stem.out.'rintln)gs.getDang),,K

so w$r(e (as ?rogramm #e"ler#rei #unktionieren. Bei getDang), "an(elt es sic" n8mlic" um eine 9et"o(e (ie als 'ublic - 6##entlic" - (eklariert wur(e. *lternati+ "8tte man nat$rlic" (as *ttribut gang (er Klasse Dangsc"altung als 'ublic (eklarieren k6nnen. Dann w8re (ieses *ttribut aber nic"t me"r geka'selt. Das w8re (ann so als w$r(en Sie beim *uto#a"ren st8n(ig (ie 9ec"anik (er Dangsc"altung +or sic" se"en. Bei (er Datenka'selung +er#olgt man also (as Iiel (ie *ttribute einer Klasse +or unerlaubten Iugri##en +on auEen zu sc"$tzen. @in so gesc"$tztes *ttribut kann nic"t aus Ferse"en +er8n(ert wer(en was bei einem groEen ?rogramm sonst unweigerlic" #r$"er o(er s'8ter 'assieren w$r(e. .n (er %at ist (ie Datenka'selung entwickelt wor(en als (ie

*nwen(ungs'rogramme immer gr6Eer un( un$bersic"tlic"er wur(en. Die Datenka'selung stellt einen wirksamen Sc"utz gegen (ie eigenen ?rogrammier#e"ler (ar: Las man nic"t kennt o(er sie"t kann man auc" nic"t aus Ferse"en +er8n(ern.

Informatik-Lexikon
Met3o&en
!llgemeines
<b0ekte k6nnen Daten un( <'erationen besitzen. Die Daten wer(en auc" als "*ttribute" bezeic"net (ie <'erationen als "9et"o(en". 9it /il#e (er 9et"o(en kann man bestimmte *ttribute (er <b0ekte +er8n(ern z.B. (ie Garbe eines Kreis-<b0ektes. Solc"e 9et"o(en wer(en als "+er8n(ern(e" 9et"o(en o(er "mani'ulieren(e" 9et"o(en bezeic"net. *n(ere 9et"o(en (ienen aussc"lieElic" zum "Nac"sc"auen" welc"en Lert ein bestimtes *ttribut "at. Diese 9et"o(en bezeic"net man (ann als "son(ieren(e" 9et"o(en. Sie +er"alten sic" n8mlic" wie kleine Son(en (ie man in ein <b0ekt "ineinstic"t.

8on&ieren&e Met3o&en (*"ser(er-Met3o&en)


Das sin( 9et"o(en (ie eine .n#ormation $ber (en Iustan( eines <b0ektes lie#ern in(em sie bestimmte *ttributwerte zur$ckgeben. Beispiel Die #olgen(e 9et"o(e
'ublic int 4?os), B return 4K C

lie#ert (ie Q-?osition eines <b0ektes zur$ck zum Beis'iel eines Kreises (er sic" in einem Ja+a-*''let bewegt. Dies ist ein Beis'iel #$r eine 9et"o(e (ie ic" 'ers6nlic" gern als "9antelmet"o(e" bezeic"ne. Denn es wir( 0a eigentlic" nur (er Lert eines bestimmten *ttributes zur$ckgelie#ert. Legen (er Datenka'selung ist aber ein (irekter Iugri## au# einzelne *ttribute nic"t erlaubt un( (a"er muss man #$r 0e(es *ttribut (as e+entuell s'8ter mal ausgewertet wer(en soll eine solc"e 9et"o(e als "9antel" sc"reiben. Betrac"ten Sie nun #olgen(e 9et"o(e
'ublic boolean ausser"alb), B return ))4 M =, WW )4 X 2==,, C

Die 9et"o(e $ber'r$#t ob sic" (ie Q-Koor(inate (es <b0ektes auEer"alb (er Drenzen eines 2== ?i4el breiten *''lets be#in(et. Lenn 0a so wir( (er Lert %1H@ zur$ckgelie#ert. Diese 9et"o(e lie#ert nic"t (en Lert eines *ttributes zur$ck ist aber trotz(em eine son(ieren(e 9et"o(e weil (ie *ttributwerte +on (er 9et"o(e nic"t +er8n(ert wer(en un( weil (ie *ttributwerte ausgewertet wer(en.

%er4n&ern&e Met3o&en (Manipulieren&e Met3o&en, Mutator-Met3o&en)


/ierunter +erste"t man 9et"o(en (ie (ie *ttributwerte eines <b0ektes +er8n(ern. @s mac"t "ier wenig Sinn (ie +er8n(ern(en 9et"o(en noc" weiter zu unterteilen z.B. in 9et"o(en (ie genau einen *ttributwert +er8n(ern un( 9et"o(en (ie me"rere *ttributwerte +er8n(ern o(er in 9et"o(en (ie keine ?arameter ben6tigen un( 9et"o(en (ie einen o(er me"rere ?arameter ben6tigen. Betrac"ten wir ein#ac" noc" ein 'aar Beis'iele:
'ublic +oi( nac"1ec"ts), B i# )4'os M -2=, 4'os NJ 2=K C

Diese 9et"o(e +ersetzt ein <b0ekt um 2= ?i4el nac" rec"ts #alls noc" ?latz (a#$r ist. @inen ?arameter ben6tigt (iese +er8n(ern(e 9et"o(e nic"t.
'ublic +oi( nac"1ec"ts)int (ist, B i# )4'os M 2==-(ist, 4'os NJ (istK C

Diese 9et"o(e +ersetzt ein <b0ekt um eine bestimmte Ia"l +on ?i4eln nac" rec"ts (ie (ann als ?arameter $bergeben wer(en muss. Diese 9et"o(e ist wesentlic" #le4ibler als (ie +or"erige 9et"o(e aller(ings muss man beim *u#ru# (er 9et"o(e (ann auc" (ie ?i4elza"l $bergeben.

-emis'3te Met3o&en
Lozu ge"6rt #olgen(e 9et"o(e:
'ublic +oi( anzeigen), B S&stem.out.'rintln)"?osition J "N4N" P "N&,K C

Fer8n(ert wir( nic"ts un( son(iert wir( auc" nic"ts. Die 9et"o(e zeigt (ie Lerte +on zwei *ttributen in (er Konsole an. Da"er w$r(e man (iese 9et"o(e e"er bei (en son(ieren(en 9et"o(en einor(nen als bei (en +er8n(ern(en. .c" "abe es mir angew6"nt solc"e 9et"o(en als "anzeigen(e 9et"o(en" zu bezeic"nen. Die #olgen(e 9et"o(e
'ublic boolean nac"1ec"ts)int (ist, B i# )4'os M 2==-(ist, B 4'os NJ (istK return trueK C else return #alseK C

ist eine +er8n(ern(e 9et"o(e mit son(ieren(er Kontroll#unktion also eine ec"te 9isc"#orm. Das *ttribut 4'os wir( +er8n(ert un( gleic"zeitig wir( ein %1H@ zur$ckgelie#ert wenn 4'os +er8n(ert wur(e an(ern#alls ein G*OS@. Solc"e 9isc"#ormen sin( in (er ?rogrammierung bis"er (urc"aus $blic" gewesen +or allem in (er CNN -

?rogrammierung wo +iele Gunktionen (ie Lerte +er8n(ern zur Kontrolle ein %1H@ o(er G*OS@ zur$cklie#ern.

8ignatur
%&'isc" #$r eine 9et"o(e ist (ie sogenannte Signatur o(er Sc"nittstelle. Darunter +erste"t man (ie genaue *rt un( Leise mit (er (ie 9et"o(e au#geru#en wir(. Beispiel Betrac"ten wir uns (ie #olgen(e 9et"o(e:
'ublic (ouble i(ealgewic"t)int kg, B return )kg - 1==,Y=.;K C

Die Signatur (er 9et"o(e ist (ie oberste Ieile #r$"er sagte man auc" "(er Ko'# (er Gunktion" o(er (er "Gunktionsko'#". Fiele .n#ormatiker bezeic"nen (ie oberste Ieile auc" als ".nter#ace" o(er au# Deutsc" "<ber#l8c"e" o(er "Sc"nittstelle". Signatur Sc"nittstelle .nter#ace o(er Gunktionsko'# (er 9et"o(e i(ealgewic"t:
'ublic (ouble i(ealgewic"t)int,

Diese Signatur lie#ert uns #olgen(e .n#ormationen: 1.Diese 9et"o(e ist eine 6##entlic"e 9et"o(e )zu erkennen am Sc"l$sselwort "'ublic",. 2.Diese 9et"o(e lie#ert beim *u#ru# einen konkreten Lert zur$ck )zu erkennen am Datent&' "(ouble" +or (em 9et"o(enbezeic"ner,. !.Diese 9et"o(e "at (en Namen "i(ealgewic"t" -.Diese 9et"o(e erwartet beim *u#ru# einen ?arameter +om %&' int @in *u#ru# wie z.B.
i(eal J i(ealgewic"t)"green",K

w8re also #alsc" weil "ier ein String-?arameter $bergeben wir( un( kein int-?arameter. Der *u#ru#
i(eal J i(ealDewic"t)1:=,K

w8re eben#alls #alsc" weil (er 9et"o(enbezeic"ner "i(ealgewic"t" "eiEt un( nic"t "i(ealDewic"t". Hn( (er *u#ru#
i(ealgewic"t)1:=,K

w8re eben#alls #e"ler"a#t weil (ie 9et"o(e einen Lert zur$cklie#ert un( (ieser Lert muss nat$rlic" auc" irgen(wie ausgewertet wer(en. Der *u#ru#
i(eal J i(ealgewic"t)1:=,K

ist (agegen korrekt ebenso (er *u#ru#


i# )gewic"t X i(ealgewic"t)1:=,, S&stem.out.'rintln)"Sie sin( zu (ickS",K

okumentation (on Met3o&en


Bei (er Dokumentation einer 9et"o(e reic"t es +6llig aus (ie Signatur (er 9et"o(e anzugeben un( gg#. zu erl8utern. Die .m'lementation (er 9et"o(e )also (er %eil zwisc"en (en bei(en gesc"wei#ten Klammern, wir( bei (er Dokumentation nic"t ber$cksic"tigt. @r unterliegt (er Datenka'selung es ge"t also nieman(em was an wie man eine 9et"o(e im'lementiert "at solange sie wirklic" #e"ler#rei arbeitet un( genau (as leistet was in (er Dokumentation +ers'roc"en wur(e.

Informatik-Lexikon
,eigerstrukturen
Kurz&efinition
Hnter einem Ieiger )engl. 'ointer, +erste"t man ein *ttribut o(er eine Fariable in (er keine Daten im eigentlic"en Sinne ges'eic"ert sin( )zum Beis'iel eine int-Ia"l ein Name o(er eine *(resse, son(ern S'eic"era(ressen +on an(eren eigentlic"en Daten.

,eiger un& 1eferenzen


@inige Gac"b$c"er (er .n#ormatik untersc"ei(en streng zwisc"en Ieigern un( 1e#erenzenK meistens wir( (ann wie #olgt argumentiert: Ieiger sin( m8c"tiger als 1e#erenzen. @in Ieiger s'eic"ert nic"t nur (ie *(resse einer an(eren Datenstruktur son(ern man kann (iese *(resse auc" arit"metisc" +er8n(ern beis'ielsweise um - o(er : inkrementieren. 9an s'ric"t "ier +on einer Ieigerarit"metik. Be#in(en sic" zum Beis'iel +ier Fariablen a b c un( ( im *rbeitss'eic"er un( ist 0e(e Fariable 15 Bit breit un( "at man #erner einen Ieiger au# (ie Fariable a so w$r(e (ie <'eration aNN einen Ieiger lie#ern (er au# (ie Fariable b zeigt +orausgesetzt a w$r(e (urc" (en NN-<'erator um 2 B&te inkrementiert. 1e#erenzen (agegen s'eic"ern (ie *(resse einer Datenstruktur k6nnen aber nic"t +er8n(ert wer(en. 9an kann (ie S'eic"era(resse nur auslesen aber keine neue *(resse in (ie 1e#erenz "ineinsc"reiben. @ine Ieigerarit"metik ist mit 1e#erenzen also nic"t m6glic". .n Ja+a wir( 0e(es 9al wenn Sie einen *rra& o(er ein <b0ekt (eklarieren eine 1e#erenz au# (en eigenlic"ten S'eic"erbereic" erzeugt in (em sic" (er *rra& bzw. (as <b0ekt be#in(et. Lie unser #olgen(es Beis'iel 0e(oc" zeigt kann man in begrenzter Leise (urc"aus sc"reiben( au# 1e#erenzen zugrei#enS

Beispiel
Betrac"ten Sie (en 3uellte4t (er Klasse Stack aus (er Golge 17 )Ieigerstrukturen,:
'ublic class Stack B @lement %<SK 'ublic Stack),

B %<S J nullK C 'ublic +oi( 'us")int +, B @lement "K " J new @lement),K ".+alue J +K ".ne4t J %<SK %<S J "K C ... C

Leitere @inzel"eiten "ierzu sie"e Golge 17. Se"en wir uns #olgen(e Ieile einmal n8"er an:
%<S J nullK

Das *ttribut %<S ist eine 1e#erenz au# ein <b0ekt (er Klasse @lement ent"8lt also (ie S'eic"era(resse eines solc"en <b0ektes. Die obige Ieile ist aber eine Iuweisung. Das "eiEt (ass (er Lert (er 1e#erenz (ie ges'eic"erte *(resse also +er8n(ert wer(en kann. @gal welc"e *(resse zu+or in %<S ges'eic"ert war nac" *us#$"ren (er Iuweisung "at sie (en Lert null. *lso wur(e sc"reiben( au# (ie S'eic"era(resse zugegeri##enK wir "aben es (a"er mit einem ec"ten Ieiger )?ointer, zu tun. Nic"ts an(eres 'assiert bei (er *nweisung
%<S J "K

*uc" "ier wir( (er bis"erige Lert +on %<S $bersc"rieben (urc" einen neuen Lert ersetzt.

Informatik-Lexikon

!"strakter

atent)p

.m Degensatz zu Datent&'en un(l Datenstrukturen (ie e"er '"&sikalisc" (e#iniert wer(en gibt man bei einem *bstrakten Datent&' nur (ie <'erationen an (ie mit i"m ausge#$"rt wer(en k6nnen sollen. /ier ein bekanntes Beis'iel (er *D% Stack: er ! 7 8ta'k Der *bstrakte Datent&' 8ta'k wir( (urc" #olgen(e <'erationen (e#iniert: Init),: @rzeugt einen leeren Stack. $us3)4,: Das @lement 4 wir( "inzuge#$gt. $op),: Das zuletzt "inzuge#$gte @lement wir( ent#ernt. @in Lert wir( +on ?o'), nic"t zur$ckgelie#ert. 7op),: Der Lert (es zuletzt "inzuge#$gten @lementes wir( zur$ckgelie#ert. Dieses @lement wir( aber nic"t ent#erntS 9mpt)),: Galls (er Stack leer ist wir( %1H@ zur$ckgelie#ert sonst G*OS@.

>ber eine m6glic"e .m'lementierung sagt (iese De#inition nic"ts aus. Der *D% "Stack" k6nnte zum Beis'iel mit /il#e (er Datenstruktur "*rra&" im'lementiert wer(en o(er aber auc" mit /il#e (er Datenstruktur "@in#ac" +erkettete (&namisc"en Oiste". Leitere bekannte *bstrakte Datent&'en sin( "3ueue" "?riorit& 3ueue" "Dictionar&" "Oiste" un( "bin8rer Suc"baum".

Informatik-Lexikon

atenstrukturen
@ine atenstruktur ist aus ein#ac"en Datent&'en zusammengesetzt. *ls ein#ac"ste Datenstruktur wir( (er *rra& angese"en (er aus en(lic" +ielen @lementen (es gleic"en Datent&'s beste"t. *n(ere Datenstrukturen sin( ein#ac" o(er (o''elt +erkettete (&namisc"e Oisten (&namisc"e Bin8rb8ume etc. Bei einer Datenstruktur wir( genau angegeben wie sie zu im'lementieren ist. @ine &)namis'3e Liste beis'ielsweise beste"t aus Knoten mit 0e einer Lert-@igensc"a#t un( einem Nac"#olger au# (en n8c"sten Knoten. Bei einer &oppelt (erketteten &)namis'3e Liste "at (ar$ber "inaus 0e(er Knoten auc" noc" einen Ieiger au# (as Forg8ngerelement. Datenstrukturen ($r#en nic"t mit *bstrakten Datent&'en )*D%s, +erwec"selt wer(en. Bei einem Stack )einem *D%, wer(en zum Beis'iel $ber"au't keine *ngaben gemac"t aus welc"en Datent&'en o(er Datenstrukturen er zusammengesetzt ist o(er wie er genau im'lementiert wir(. @r wir( le(iglic" $ber (ie <'erationen (e#iniert (ie mit i"m m6glic" sein sollen.

Informatik-Lexikon

atent)pen
Die <b0ekte einer Klasse "aben bestimmte *ttribute (ie zum S'eic"ern +on .n#ormationen )Koor(inaten Garbe Dr6Ee Bezeic"nung etc., (ienen.
'ublic class ?erson B String name +ornameK int alterK C

Beis'ielklasse )o"ne 9et"o(en, mit (rei *ttributen zum S'eic"ern (es Namens (es Fornamens un( (es *lters (er ?erson. Nun ist es aber ein groEer Hntersc"ie( ob man eine sim'le Ia"l wie 12 eine lange reelle Ia"l wie !.1-12 o(er gar eine *(resse wie "Hlric" /elmic" Dro"neweg 12" s'eic"ern m6c"te. .n (er ?rogrammiers'rac"e Ja+a muss man Fariablen un( *ttributen zu (iesem Iwecke einen bestimmten Datent&' zuweisen. Die wic"tigsten Datent&'en (er ?rogrammiers'rac"e Ja+a sin(:

")te: Kleine ganze Ia"l ): bit, zwisc"en -12: un( N127 s3ort: Kleine ganze Ia"l )15 bit, zwisc"en -!275: un( N!2757 int: Danze Ia"l mit ein#ac"er Denauigkeit )!2 bit, z.B. 122 long: Danze Ia"l mit (o''elter Denauigkeit )5- bit, z. B. 1!-!2!-21!5-252!-2!1-float: 1eelle Ia"l mit ein#ac"er Denauigkeit )!2 bit, z. B. 2.71 &ou"le: 1eelle Ia"l mit (o''elter Denauigkeit )5- bit, z.B. !.1-12; '3ar: Ieic"en Buc"stabe z.B. Z*Z 8tring: Ieic"enkette z.B. "/allo LeltS" "oolean: La"r"eitswert true o(er #alse (oi&: leerer Datent&' wir( #$r +er8n(ern(e 9et"o(en benutzt (ie keinen Lert zur$cklie#ern.

.n unserer Beis'ielklasse ?erson "aben wir (ie Datent&'en 8tring un( int +erwen(et. Der Hntersc"ie( zwisc"en #loat un( (ouble ist (ie Denauigkeit. Datent&'en ($r#en nic"t mit *bstrakten Datent&'en )*D%s, +erwec"selt wer(en. Bei einem Stack )einem *D%, wer(en zum Beis'iel $ber"au't keine *ngaben gemac"t aus welc"en Datent&'en o(er Datenstrukturen er zusammengesetzt ist o(er wie er genau im'lementiert wir(. @r wir( le(iglic" $ber (ie <'erationen (e#iniert (ie mit i"m m6glic" sein sollen.

Informatik-Lexikon
if-else-!n:eisung
;allunters'3ei&ungen
Com'uter'rogramme beste"en aus einer Golge +on *nweisungen (ie nac"einan(er ausge#$"rt wer(en. Das ?rogramm aus Golge ! "Sie wer(en gewogen" l8u#t zum Beis'iel so ab: 1., Dewic"t ermitteln 2., K6r'ergr6Ee #eststellen !., .(ealgewic"t berec"nen -., Di##erenz Dewic"t - .(ealgewic"t berec"nen un( ausgeben /8u#ig m$ssen Com'uter'rogramme aber auc" @ntsc"ei(ungen tre##en. Dazu testen sie bestimmte Be(ingungen un( #$"ren - ab"8ngig +om @rgebnis (es %ests - bestimmte *ktionen (urc". .n einer (er >bungen aus Golge ! sollen Sie (as ?rogramm so +er#einern (ass in (em *usgabe#enster angezeigt wir( ob (ie ?erson >bergewic"t Hntergewic"t o(er .(ealgewic"t "at. Dazu ist eine (reiseitige Galluntersc"ei(ung o(er eine so genannte Drei#ac"auswa"l notwen(ig. @in 9ensc" "at keine ?robleme eine solc"e *uswa"l zu

tre##en ein Com'uter sc"on. Die g8ngigen ?rogrammiers'rac"en kennen n8mlic" nur (ie einseitige *uswa"l sowie (ie zweiseitige *uswa"l mit (enen wir uns im Golgen(en n8"er besc"8#tigen wollen. *nsc"lieEen( kommen wir au# (ie Grage zur$ck wie man mit (iesen ein#ac"en 9itteln eine (reiseitige *uswa"l realisieren kann.

ie einseitige !us:a3l o&er ie if-!n:eisung


@ine i#-*nweisung beste"t aus (em Sc"l$sselwort "i#" - klein gesc"rieben - einer logisc"en Be(ingung (ie in run(en Klammern ste"en muss un( einer einzelnen *nweisung o(er einer *nweisungsliste:

1 S&nta4(iagramm (er i#-*nweisung ie logis'3e Be&ingung @ine logisc"e Be(ingung ist immer entwe(er wa"r )true, o(er #alsc" )#alse,. .m Degensatz zur S'rac"e CNN akze'tiert Ja+a "ier keine numerisc"en *us(r$ckeK in (en Klammern muss also wirklic" ein boolean-*us(ruck ste"en. @s #olgen nun einige Beis'iele #$r korrekte boolean-*us(r$cke:
4 JJ ! &MzN! ra(ius N 2 MJ aussenra(ius - 2

@in#ac"e boolean-*us(r$cke beste"en also aus einer rec"ten Seite einem logisc"en <'erator )sie"e 1an(s'alte, un( einer linken Seite. Die rec"te un( (ie linke Seite wer(en miteinan(er +erglic"en. Jenac"(em wie (ieser Fergleic" aus#8llt nimmt (ann (er gesamte boolean-*us(ruck (en Lert true o(er #alse an. @ine korrekte i#-*nweisung k6nnte (emnac" so ausse"en:
i# )4 JJ !, S&stem.out.'rintln)"4 ist !",K

Fergessen Sie nie)S, (ass (ie logisc"e Be(ingung in run(en Klammern ste"en muss. Kompliziertere logis'3e Be&ingungen <#t reic"en ein#ac"e logisc"e Be(ingungen nic"t #$r unsere Iwecke aus. Soll zum Beis'iel $ber'r$#t wer(en ob eine Ia"l 4 im .nter+all [1=..2=\ liegt so muss man sc"reiben:

i# ))4 XJ 1=, ]] )4 MJ 2=,, *nweisungslisteK

/ier muss man au# (ie korrekte Klammerung ac"ten (a (er ]]-<'erator eine "6"ere ?riorit8t "at als (ie Fergleic"so'eratoren XJ bzw. MJ. ie !n:eisungsliste

# S&nta4(iagramm (er *nweisungsliste *u# (ie logisc"e Be(ingung #olgt bei einer i#-*nweisung eine *nweisungsliste. Hnter einer *nweisungsliste +erste"en wir entwe(er eine einzelne *nweisung ge#olgt +on einem Semikolon )obere Ieile (es Diagramms, o(er eine in gesc"wei#ten Klammern ste"en(e Oiste +on *nweisungen wobei am @n(e 0e(er *nweisung ein Semikolon ste"en muss Korrekte *nweisungslisten w8ren also z.B.:
S&stem.out.'rintln)"korrekt",K

o(er
i J i N 2K

o(er
B S&stem.out.'rintln)"korrekt",K & J 2=K z J -=N&K C

%er:en&ung &er einseitigen !us:a3l Die einseitige *uswa"l wir( +erwen(et wenn man eine *ktion nur (ann (urc"#$"ren m6c"te wenn eine bestimmte Be(ingung er#$llt ist un( wenn man #$r (en Gall (ass (ie Be(ingung nic"t er#$llt ist keine alternati+e *ktion ge'lant "at.

*ngenommen Sie wollen bereits w8"ren( (es Liegens eine 9el(ung ausgeben lassen #alls (ie ?erson ein(eutig zu sc"wer ist so k6nnten Sie sc"reiben:
'ublic +oi( wiegen)int messwert, B gewic"t J messwertK i# )messwert X 12=, S&stem.out.'rintln )"Bitte nur eine ?erson au# (ie Laage stellenS",K C

ie z:eiseitige !us:a3l o&er ie if-else-!n:eisung


9eistens "at man aber eine alternati+e *ktion ge'lant wenn (ie Be(ingung #$r (ie /au'taktion nic"t er#$llt ist. G$r eine solc"e zweiseitige *uswa"l +erwen(et man (ie i#else-*nweisung (ie im ?rinzi' genauso au#gebaut ist wie (ie i#-*nweisung.

0 ,-nta.diagra%% der if-else-An!eisung Das was bereits $ber logisc"e Be(ingungen un( *nweisungslisten gesagt wur(e bleibt weiter"in g$ltig. G$r ?ascal-?rogrammierer ungewo"nt ist +ielleic"t (ass am @n(e (es t"en-Iweigs )in Ja+a gibt es (as Sc"l$sselwort "t"en" nic"tS, ein Semikolon ste"en muss. Sc"auen wir uns eine korrekte i#-else-*nweisung an:
i# )gewic"t MJ i(ealN!, S&stem.out.'rintln)"Su'erS,K else B S&stem.out.'rintln)"Leniger essenS",K (i## J gewic"t-i(ealK S&stem.out.'rintln)(i## N " kg zu+ielS",K C

.n (er ersten *lternati+e )?ascal-?rogrammierer w$r(en sagen: "im t"en-Iweig", "aben wir eine ein#ac"e *nweisung +erwen(et in (er zweiten *lternati+e )"else-Iweig, eine aus (rei *nweisungen beste"en(e *nweisungsliste.

ie &reiseitige !us:a3l o&er -es'3a'3telte if-!n:eisungen


Die meisten ?rogrammiers'rac"en kennen nur ein- o(er zweiseitige *uswa"len. Ben6tigt man eine (reiseitige *uswa"l so sollte man sic" (ie S&nta4(iagramme (er ein- un(

zweiseitigen *uswa"l mal n8"er ansc"auen. Betrac"ten wir noc" einmal (as S&nta4(iagramm (er zweiseitigen *uswa"l.

0 ,-nta.diagra%% der if-else-An!eisung, &u% &!eiten .m else-Iweig #in(en wir eine *nweisungsliste. Diese *nweisungsliste kann aus einer einzelnen *nweisung o(er eine geklammerten Oiste +on *nweisungen beste"en. Lelc"e *nweisungen sin( "ier eigentlic" erlaubtU Neben Iuweisungen wie
& J ! Y 4K

Gunktionsau#ru#en wie
ausgabe)"Sie "aben Hntergewic"t",K

o(er
S&stem.out.'rinteln)"Gunktionsau#ru#",K

o(er
& J mittelwert)41 42 4!,K

sin( auc" Sc"lei#en wie


#or )iJ1KiMJ1==KiNN, s J sNiK

un( i#-else-*nweisungen wie


i# )gewic"t M i(eal, unter J trueK

erlaubt. Die %atsac"e (ass eine *nweisung auc" eine i#-else-*nweisung sein (ar# er6##net (ie 96glic"keit zur Konstruktion +ersc"ac"telter i#-else-*nweisungen. Stellen wir uns ein 1ates'iel +or. Der Com'uter "at eine Iu#allsza"l z ermittelt un( (er Benutzer "at eine 1ateza"l r eingegeben. Das ?rogramm soll nun eine (i##erenzierte *usgabe mac"en wobei +ier G8lle untersc"ie(en wer(en sollen:
i# )r M zP2, ausgabe)"+iel zu kleinS",K else i# )r M z, ausgabe)"zu kleinS",K

else i# )r JJ z, ausgabe)"geratenS",K else ausgabe)"zu groE,K

/ier ist unbe(ingt au# (ie korrekte 1ei"en#olge (er einzelnen *b#ragen zu ac"ten. /8tte man zum Beis'iel am *n#ang gesc"rieben:
i# )r M z, ausgabe)"zu kleinS",K else i# )r M zP2, ausgabe)"+iel zu kleinS",K

(ann w$r(e (as ?rogramm bei einer 1ateza"l r M zP2 eine #alsc"e 9el(ung ausgeben: Bereits (ie erste Be(ingung r M z w8re er#$llt un( somit w$r(e (as ?rogamm mel(en "zu kleinS" statt "+iel zu kleinS".

as

angling-9lse-$ro"lem

Dieser *bsc"nitt ($r#te #$r alle Sc"$ler)innen, interessant sein (ie (as Gac" .n#ormatik im *bitur belegen wollen. Betrac"ten Sie bitte #olgen(en 3uellte4t:
i# )4 M 1=, i# )& M 1=, ausgabe)"<.K.",K else ausgabe)"Galsc"S",K

Las wir( "ier ausgegebenU Oassen Sie sic" nic"t +on (er Stellung (es "else" +erwirrenS @s wir( "ier (er @in(ruck erweckt (ass (as "else" zum ersten "i#" ge"6rt. Das ist aber nic"t (er Gall ein "else" ge"6rt immer zum innersten "i#" in unserem Gall also zum zweiten "i#". Die 9el(ung "#alsc"" wir( also ausgegeben wenn & nic"t kleiner als 1= ist. Dieses "ier besc"riebene ?roblem ist als "(angling-else-'roblem" in (er Gac"literatur bekannt gewor(en. @s ist nic"t nur +on aka(emisc"em .nteresse son(ern "at auc" (urc"aus 'raktisc"e *uswirkungen au# (ie t8glic"e ?rogrammierarbeit.

1eferenz:

%erz:eigungen

;allunters'3ei&ungen
Com'uter'rogramme beste"en aus einer Golge +on *nweisungen (ie nac"einan(er ausge#$"rt wer(en. Das ?rogramm aus Golge ! "Sie wer(en gewogen" l8u#t zum Beis'iel so ab: 1., Dewic"t ermitteln 2., K6r'ergr6Ee #eststellen !., .(ealgewic"t berec"nen -., Di##erenz Dewic"t - .(ealgewic"t berec"nen un( ausgeben /8u#ig m$ssen Com'uter'rogramme aber auc" @ntsc"ei(ungen tre##en. Dazu testen sie bestimmte Be(ingungen un( #$"ren ab"8ngig +om @rgebnis (es %ests - bestimmte *ktionen (urc". .n (er >bung !.! sollen Sie (as ?rogramm so +er#einern (ass in (em *usgabe#enster angezeigt wir( ob (ie ?erson >bergewic"t Hntergewic"t o(er .(ealgewic"t "at. Dazu ist eine (reiseitige Galluntersc"ei(ung o(er eine so genannte Drei#ac"auswa"l notwen(ig. @in 9ensc" "at keine ?robleme eine solc"e *uswa"l zu tre##en ein Com'uter sc"on. Die g8ngigen ?rogrammiers'rac"en kennen n8mlic" nur (ie einseitige *uswa"l sowie (ie zweiseitige *uswa"l mit (enen wir uns im Golgen(en n8"er besc"8#tigen wollen. *nsc"lieEen( kommen wir au# (ie Grage zur$ck wie man mit (iesen ein#ac"en 9itteln eine (reiseitige *uswa"l realisieren kann. Das *rbeitsblatt !.=1 zum %"ema "Ferzweigungen" k6nnen Sie sic" "ier als ?DGDokument "e

ie einseitige !us:a3l o&er ie if-!n:eisung


@ine i#-*nweisung beste"t aus (em Sc"l$sselwort "i#" - klein gesc"rieben - einer logisc"en Be(ingung (ie in run(en Klammern ste"en muss un( einer *nweisungsliste: logisc"e Fergleic"s<'eratoren: JJ gleic" SJ ungleic" M kleiner MJ kleinergleic" X gr6Eer XJ gr6Eergleic" logisc"e Ferkn$'#ungs<'eratoren: ]] WW un( o(er

1 ,-nta.diagra%% der if-An!eisung ie logis'3e Be&ingung @ine logisc"e Be(ingung ist immer entwe(er wa"r )true, o(er #alsc" )#alse,. .m Degensatz zur S'rac"e CNN akze'tiert Ja+a "ier keine numerisc"en *us(r$ckeK in (en Klammern muss also wirklic" ein boolean-*us(ruck ste"en. @s #olgen nun einige

Beis'iele #$r korrekte boolean-*us(r$cke:


4 JJ ! &MzN! ra(ius N 2 MJ aussenra(ius - 2

@in#ac"e boolean-*us(r$cke beste"en also aus einer rec"ten Seite einem logisc"en <'erator )sie"e 1an(s'alte, un( einer linken Seite. Die rec"te un( (ie linke Seite wer(en miteinan(er +erglic"en. Jenac"(em wie (ieser Fergleic" aus#8llt nimmt (ann (er gesamte boolean-*us(ruck (en Lert true o(er #alse an. @ine korrekte i#-*nweisung k6nnte (emnac" so ausse"en:
i# )4 JJ !, S&stem.out.'rintln)"4 ist !",K

Fergessen Sie nie)S, (ass (ie logisc"e Be(ingung in run(en Klammern ste"en muss. Kompliziertere logis'3e Be&ingungen <#t reic"en ein#ac"e logisc"e Be(ingungen nic"t #$r unsere Iwecke aus. Soll zum Beis'iel $ber'r$#t wer(en ob eine Ia"l 4 im .nter+all [1=..2=\ liegt so muss man sc"reiben:
i# ))4 XJ 1=, ]] )4 MJ 2=,, *nweisungslisteK

/ier muss man au# (ie korrekte Klammerung ac"ten (a (er ]]<'erator eine "6"ere ?riorit8t "at als (ie Fergleic"so'eratoren XJ bzw. MJ. ie !n:eisungsliste Hnter einer *nweisungsliste +erste"en wir immer: 1.entwe(er eine einzelne *nweisung 2.o(er eine in gesc"wei#ten Klammern ste"en(e Oiste +on *nweisungen (ie (urc" 0e ein Semikolon getrennt sin(.

# S&nta4(iagramm (er *nweisungsliste Korrekte *nweisungslisten w8ren also:


S&stem.out.'rintln)"korrekt",K

o(er
B S&stem.out.'rintln)"korrekt",K & J 2=K C

%er:en&ung &er einseitigen !us:a3l Die einseitige *uswa"l wir( +erwen(et wenn man eine *ktion nur (ann (urc"#$"ren m6c"te wenn eine bestimmte Be(ingung er#$llt ist un( wenn man #$r (en Gall (ass (ie Be(ingung nic"t er#$llt ist keine alternati+e *ktion ge'lant "at. *ngenommen Sie wollen bereits w8"ren( (es Liegens eine 9el(ung ausgeben lassen #alls (ie ?erson ein(eutig zu sc"wer ist so k6nnten Sie sc"reiben:
'ublic +oi( wiegen)int messwert, B gewic"t J messwertK i# )messwert X 12=, S&stem.out.'rintln )"Bitte nur eine ?erson au# (ie Laage stellenS",K C

ie z:eiseitige !us:a3l o&er ie if-else-!n:eisung


9eistens "at man aber eine alternati+e *ktion ge'lant wenn (ie Be(ingung #$r (ie /au'taktion nic"t er#$llt ist. G$r eine solc"e zweiseitige *uswa"l +erwen(et man (ie i#-else-*nweisung (ie im ?rinzi' genauso au#gebaut ist wie (ie i#-*nweisung.

0 ,-nta.diagra%% der if-else-An!eisung

Das was bereits $ber logisc"e Be(ingungen un( *nweisungslisten gesagt wur(e bleibt weiter"in g$ltig. G$r ?ascal-?rogrammierer ungewo"nt ist +ielleic"t (ass am @n(e (es t"en-Iweigs )in Ja+a gibt es (as Sc"l$sselwort "t"en" nic"tS, ein Semikolon ste"en muss. Sc"auen wir uns eine korrekte i#else-*nweisung an:
i# )gewic"t MJ i(ealN!, S&stem.out.'rintln)"Su'erS,K else B S&stem.out.'rintln)"Leniger essenS",K (i## J gewic"t-i(ealK S&stem.out.'rintln)(i## N " kg zu+ielS",K C

.n (er ersten *lternati+e )?ascal-?rogrammierer w$r(en sagen: "im t"en-Iweig", "aben wir eine ein#ac"e *nweisung +erwen(et in (er zweiten *lternati+e )"else-Iweig, eine aus (rei *nweisungen beste"en(e *nweisungsliste.

ie &reiseitige !us:a3l o&er -es'3a'3telte if-!n:eisungen


Die meisten ?rogrammiers'rac"en kennen nur ein- o(er zweiseitige *uswa"len. Ben6tigt man eine (reiseitige *uswa"l so sollte man sic" (ie S&nta4(iagramme (er ein- un( zweiseitigen *uswa"l mal n8"er ansc"auen. .m else-Iweig #in(en wir eine *nweisungsliste. Diese *nweisungsliste kann aus einer einzelnen *nweisung o(er eine geklammerten Oiste +on *nweisungen %erminologie: beste"en. Lelc"e *nweisungen sin( "ier eigentlic" erlaubtU Neben Iuweisungen wie
& J ! Y 4K

Gunktionsau#ru#en wie
ausgabe)"Sie "aben Hntergewic"t",K

Neben (em *us(ruck "gesc"ac"telte" o(er "+ersc"ac"telte" i#-*nweisung wer(en in (er (eutsc"s'rac"igen Gac"literatur auc" noc" o#t #olgen(e Begri##e +erwen(et: ange"8u#te i#-*nweisungen i#-Kaska(en

o(er
S&stem.out.'rinteln)"Gunktionsau#ru#",K

o(er
& J mittelwert)41 42 4!,K

sin( auc" Sc"lei#en wie


#or )iJ1KiMJ1==KiNN, s J sNiK

un( i#-else-*nweisungen wie


i# )gewic"t M i(eal, unter J trueK

erlaubt. Die %atsac"e (ass eine *nweisung auc" eine i#-else-*nweisung sein (ar# er6##net (ie 96glic"keit zur Konstruktion +ersc"ac"telter i#-else-*nweisungen. Stellen wir uns ein 1ates'iel +or. Der Com'uter "at eine Iu#allsza"l z ermittelt un( (er Benutzer "at eine 1ateza"l r eingegeben. Das ?rogramm soll nun eine (i##erenzierte *usgabe mac"en wobei +ier G8lle untersc"ie(en wer(en sollen:
i# )r M zP2, ausgabe)"+iel zu kleinS",K else i# )r M z, ausgabe)"zu kleinS",K else i# )r JJ z, ausgabe)"geratenS",K else ausgabe)"zu groE,K

/ier ist unbe(ingt au# (ie korrekte 1ei"en#olge (er einzelnen *b#ragen zu ac"ten. /8tte man zum Beis'iel am *n#ang gesc"rieben:
i# )r M z, ausgabe)"zu kleinS",K else i# )r M zP2, ausgabe)"+iel zu kleinS",K

(ann w$r(e (as ?rogramm bei einer 1ateza"l r M zP2 eine #alsc"e 9el(ung ausgeben: Bereits (ie erste Be(ingung r M z w8re er#$llt un( somit w$r(e (as ?rogamm mel(en "zu kleinS" statt "+iel zu kleinS". Nac"(em Sie nun (iesen langen *bsc"nitt $ber ein- zwei- un( (reiseitige *uswa"len gelesen "aben m$ssten Sie au# 0e(en Gall in (er Oage sein (ie >bung !.- zu l6sen. Fielleic"t bekommen Sie 0a sogar (ie #$n#seitige *uswa"l (er >bung !.2 "inS

as

angling-9lse-$ro"lem

Dieser *bsc"nitt ($r#te #$r alle Sc"$ler)innen, interessant sein (ie (as Gac" .n#ormatik im *bitur belegen wollen. Betrac"ten Sie bitte #olgen(en 3uellte4t:
i# )4 M 1=, i# )& M 1=, ausgabe)"<.K.",K else

ausgabe)"Galsc"S",K

Las wir( "ier ausgegebenU Oassen Sie sic" nic"t +on (er Stellung (es "else" +erwirrenS @s wir( "ier (er @in(ruck erweckt (ass (as "else" zum ersten "i#" ge"6rt. Das ist aber nic"t (er Gall ein "else" ge"6rt immer zum innersten "i#" in unserem Gall also zum zweiten "i#". Die 9el(ung "#alsc"" wir( also ausgegeben wenn & nic"t kleiner als 1= ist. Dieses "ier besc"riebene ?roblem ist als "(angling-else-'roblem" in (er Gac"literatur bekannt gewor(en. @s ist nic"t nur +on aka(emisc"em .nteresse son(ern "at auc" (urc"aus 'raktisc"e *uswirkungen au# (ie t8glic"e ?rogrammierarbeit.

ie s:it'3-!n:eisung
Hnter bestimmten Hmst8n(en kann man gesc"ac"telte i#*nweisungen (urc" eine switc"-*nweisung ersetzen. /ier ein Beis'iel:
switc" )note, B case 1 : ausgabe)"se"r gut",K breakK case 2 : ausgabe)"gut",K breakK case ! : ausgabe)"be#rie(igen(",K breakK case - : ausgabe)"ausreic"en(",K breakK case 2 : ausgabe)"mangel"a#t",K breakK case 5 : ausgabe)"ungen$gen(",K breakK C

Das Lort "break" bewirkt einen so#ortigen *bbruc" (es Fergleic"s. Lenn also #estgestellt wur(e (ass (er Lert (er Fariable "note" zum Beis'iel ! ist so wer(en (ie G8lle - 2 un( 5 nic"t me"r $ber'r$#t. Lic"tig: switc"-*nweisungen #unktionieren nur mit <r(inalt&'en also mit ganzen Ia"len o(er Buc"staben nic"t aber mir reellen Ia"len o(er Strings. *uc" kom'le4ere >ber'r$#ungen wie sie zum Beis'iel in (er >bung !.2 +orgekommen sin( kann man nic"t so ein#ac" (urc" eine switc"-*nweisung realisierenK "ier m$ssen wir au# gesc"ac"telte i#-else-*nweisungen zur$ckgrei#en.

,ur<'k zu ;olge 0: 8ie :er&en ge:ogen=

73eorieteil 1 zu ;olge 5

for-8'3leifen
1. 9inf<3rung un& Begr<n&ung f<r for-8'3leifen
.n +ielen *lgorit"men m$ssen bestimmte Be#e"le o(er Be#e"ls#olgen (rei- +ier- ze"nmal o(er 6#ters (urc"lau#en wer(en. Lenn Sie (en /amster-Kurs bearbeitet "aben sollten Sie #or-Sc"lei#en 0a eigentlic" sc"on kennen. Hn( wenn Sie (en Kurs nic"t bearbeitet "aben weil ."r Oe"rer (as nic"t #$r n6tig "ielt 'assen Sie 0etzt beson(ers gut au#. Die "/amster-Oeute" k6nnen (iesen *bsc"nitt 0a $bers'ringen.

Der Ja+a-/amster ist eine rec"t um#angreic"e Klasse mit +ielen 9et"o(en. Dra'"isc" wir( (er /amster (urc" (ie Ieic"nung eines /amsters (argestellt (er in +ier +ersc"ie(ene 1ic"tungen gucken kann: Nor( S$( Lest un( <st. Der /amster bewegt sic" in einem so genannten %erritorium. Das ist eine Gl8c"e aus lauter Aua(ratisc"en Gel(ern. Die meisten Gel(er sin( leer au# einigen Gel(ern liegen .n (er Buc"+ersion ist (iese K6rner un( au# manc"en Gel(ern ste"en un(urc"(ringbare L8n(e. *u# %"eorieteil wesentlic" einem bestimmten Gel( ste"t (er /amster. aus#$"rlic"er (argestellt als (ieser Leb+ersion. Fon (en 9et"o(en (es /amsters wollen wir uns nun (ie +or),-9et"o(e "erausgrei#en. 9it /il#e (er +or),-9et"o(e bewegt sic" (er /amster um genau ein Gel( nac" +orne. Las (abei "+orne" ist "8ngt nat$rlic" +on (er 1ic"tung ab in (ie (er /amster gera(e sc"aut. Sie"t er nac" <sten )also nac" rec"ts, so bewirkt (er +or),-Be#e"l (ass sic" (er /amster au# (as benac"barte rec"te Gel( begibt #alls ein solc"es $ber"au't e4istiert un( #alls keine 9auer (en Leg +ers'errt. @in an(erer wic"tiger Be#e"l "eiEt linksHm),K er bewirkt (ass sic" (er /amster )eigentlic": (as /amster-<b0ekt, um ;=^ nac" links (re"t. @inen rec"tsHm),-Be#e"l gibt es nic"t. Lollen wir (ass sic" (er /amster rec"ts "erum (re"t so m$ssen wir sc"reiben:
linksHm),K linksHm),K linksHm),K

Leil ein solc"er rec"tsHm),-Be#e"l immer wie(er ben6tigt wir( sc"reiben wir uns au# Dauer nat$rlic" eine 9et"o(e rec"tsHm),:
'ublic +oi( rec"tsHm), B linksHm),K linksHm),K linksHm),K C

So ein#ac" ist (as. Nac"(em sic" (er /amster aus *bbil(ung 1 nac" rec"ts bewegt "at )also im H"rzeigersinn, soll er #$n# Gel(er +orw8rts ge"en (amit er (ie K6rner #ressen kann (ie au# (em Gel( unten links

liegen. *lso sc"reiben wir ein#ac":


+or),K +or),K +or),K +or),K +or),K

Das sie"t 0a ganz ein#ac" aus ist au# Dauer aber etwas l8stig. Sollen wir etwa ze"nmal +or), "insc"reiben wenn (er /amster ze"n Gel(er +orw8rts ge"en soll un( zwanzigmal +or), bei 2= Gel(ernU Betrac"ten Sie nun #olgen(e 9et"o(e
'ublic +oi( ge"eFor)int n, B #or )int iJ1K i MJ nK iNN, +or),K C

Da "aben Sie ."re erste #or-Sc"lei#eS Hn( "ier ist auc" sc"on (ie zweite:
'ublic +oi( +orHn(Nimm)int n, B #or )int iJ1K i MJ nK iNN, B +or),K i# )kornDa),, nimm),K C C

Diese 9et"o(e l8sst (en /amster nic"t nur n Gel(er +orw8rts ge"en son(ern (er /amster sc"aut au# 0e(em Gel( nac" ob ein Korn +or"an(en ist un( nimmt (ieses gegebenen#alls au#. /ier wer(en zwei Be#e"le 'ro Sc"lei#en(urc"gang ausge#$"rt n8mlic" (er +or),-Be#e"l un( (ie i#-*b#rage. Da"er m$ssen (iese bei(en Be#e"le in gesc"wei#ten Klammern zu einem Be#e"lsblock zusammenge#asst wer(en. *ber me"r (azu gleic" im *bsc"nitt "S&nta4 (er #or-Sc"lei#e".

#. !nal)se einer for-8'3leife

# @in Beis'iel #$r eine #or-Sc"lei#e .n *bbil(ung 2 se"en Sie ein weiteres Beis'iel #$r eine G<1-Sc"lei#e. @ine #or-Sc"lei#e beste"t aus (em Sc"lei#enko'# un( (em Sc"lei#enk6r'er. Der Sc"lei#enko'# steuert (ie #or-Sc"lei#e un( (er Sc"lei#enk6r'er ent"8lt (ie Be#e"le (ie wie(er"olt wer(en sollen. Betrac"ten wir zun8c"st (en Sc"lei#enko'#. Der Sc"lei#enko'# beste"t aus (em Sc"l$sselwort #or (ann kommt (ie .nitialisierung (er Oau#+ariable (ie >ber'r$#ung (er Sc"lei#enbe(ingung un( eine *nweisung (ie am @n(e eines 0e(en Sc"lei#en(urc"gangs ausge#$"rt wer(en sollen. Diese (rei *nweisungen bzw. %ests sin( (urc" run( Klammern zusammenge#asst un( (urc" Semikolons +oneinan(er getrennt.
1. Initialisierung &er Lauf(aria"le

Bei (er ersten *nweisung "an(elt es sic" um (ie .nitialisierung (er Oau#+ariable. Die Oau#+ariable - in *bbil(ung 2 "eiEt sie i - ist (er I8"ler #$r (ie bereits (urc"ge#$"rten Sc"lei#en(urc"g8nge. *m besten setzt man (iesen I8"ler au# 1.
#. >"erpr<fung &er 8'3leifen"e&ingung

Die Sc"lei#enbe(ingung wir( vor 0e(em Sc"lei#en(urc"lau# $ber'r$#t. .st (as @rgebnis (ieses %estes %1H@ so wir( (ie G<1-Sc"lei#e (urc"lau#en. .st (as @rgebnis aber G*OS@ so wir( (ie Sc"lei#e been(et - unter Hmst8n(en sogar noc" +or (em ersten Sc"lei#en(urc"lau#.

0. !n:eisung f<r &as 8'3leifenen&e

Diese *nweisung wir( am @n(e eines 0e(en Sc"lei#en(urc"lau#s ausge#$"rt. Bei (en meisten #or-Sc"lei#en er"6"t man "ier (ie Oau#+ariable um (en Lert 1:
#or )int i J 1K i MJ 1=K iNN, +or),K

Diese G<1-Sc"lei#e #$"rt genau 1= mal (en +or),-Be#e"l aus. Die #olgen(e G<1-Sc"lei#e zeigt uns einige neue ?unkte:
#or )int a J 2=K a MJ !=K a J a - !, B +or),K nimm), C

@rstens muss (ie Oau#+ariable nic"t unbe(ingt i "eiEen. Iweitens muss (ie Oau#+ariable am *n#ang nic"t (en Lert 1 "aben. Drittens kann (ie Oau#+ariable auc" dekre%entiert wer(en. Fiertens kann (ie Oau#+ariable um beliebige Lerte inkrementiert o(er (ekrementiert wer(en. G$n#tens kann man bei solc"en Sc"lei#en leic"t Ge"ler mac"en. Die Be(ingung a MJ != ist n8mlic" stets er#$llt un( (a"er er"alten wir eine so genannte @n(lossc"lei#e. 9an kann G<1-Sc"lei#en auc" sc"ac"teln. Das sie"t (ann so aus:
#or )int k J 2=K k XJ2K k J k-2, B #or )int 0 J 1K 0 MJkK 0NN, +or),K linksHm),K C

Der /amster w$r(e in (er inneren G<1-Sc"lei#e eine bestimmte Ia"l k +on Gel(er +orw8rts ge"en. Lie groE k 0eweils ist wir( (urc" (ie 8uEere G<1-Sc"lei#e +orgegeben. Lenn (er /amster k Gel(er nac" +orn gegangen ist (re"t er sic" nac" links. Dann l8u#t (ie 8uEere G<1Sc"lei#e erneut ab aller(ings ist k 0etzt um 2 kleiner als +or"er so (ass (er /amster einen k$rzeren Leg zur$cklegt. Lenn (as %erritorium groE genug ist un( (er Start'latz (es /amsters ric"tig gew8"lt wur(e m$sste er au# (iese Leise einen s'iral#6rmigen Leg zur$cklegen.

0. 8'3luss"emerkungen un& !ufga"e


Jetzt sollte ."nen klar gewor(en sein wie #or-Sc"lei#en au#gebaut sin( un( welc"en groEen Forteil (ie #or-Sc"lei#en bieten. Hn( (amit sic" (ieser %"eorieteil #$r Sie auc" 'unktem8Eig lo"nt kommt gleic" noc" eine leic"te *u#gabe

>"ung 5.2 (0 $unkte) ,ei'3nen 8ie &as 8)ntax&iagramm f<r eine for-8'3leife= Lenn Sie nic"t wissen was ein S&nta4(iagramm ist sc"auen Sie (oc" bitte bei (en i#-else-Be(ingungen nac". /ier wur(e (er Begri## S&nta4(iagramm erkl8rt.

,ur<'k zu ;olge 5: !utofa3ren

73eorieteil # zu ;olge 5:

1. !uf"au einer Klasse


Bereits im %"eorieteil zu Golge 1 )sie"e ?DG-Fersion, wur(e Drun(s8tzlic"es $ber (en *u#bau einer Klasse gesagt so (ass wir uns "ier rec"t kurz #assen k6nnen. @ine Ja+a-Klasse ent"8lt 1.*ttribute 2.Konstruktoren !.9et"o(en

1.1 !ttri"ute
Fon Barnes un( K6lling wer(en (ie *ttribute auc" Daten#el(er genannt. .c" "alte (iese Bezeic"nung nic"t #$r beson(ers gl$cklic" - erinnert sie (oc" zu se"r an Gel(er im Sinne +on *rra&s. .n unserem Kurs bleiben wir also bei (em Begri## *ttribut. 9an kann zwei %&'en +on *ttributen untersc"ei(en 'rimiti+e *ttribute un( 1e#erenz-*ttribute. 1.1.1 $rimiti(e !ttri"ute ?rimiti+e *ttribute s'eic"ern ein#ac"e Daten z.B. ganze o(er reelle Ia"len Buc"staben Ieic"enketten o(er La"r"eitswerte. 1e#erenzattribute (agegen sin( Iun8c"st einmal gibt es *ttribute in (enen ein#ac" Daten ges'eic"ert wer(en. *ls Beis'iel betrac"ten wir wie(er (ie Klasse *uto:
'ublic class *uto B (ouble tank+olumen benzinstan(K (ouble +erbrauc" kmstan(K 'ublic *uto), B C C

.n (er Buc"+ersion is %"eorieteil wesentlic aus#$"rlic"er (arges (ieser Leb+ersion.

G$r ein#ac"e *ttribute 'asst auc" (ie BarnesPK6lling-De#inition gut: "Daten#el(er sin( kleine Bereic"e inner"alb eines <b0ektes in (enen Lerte ges'eic"ert wer(en k6nnen." Solc"e Lerte "aben wir bis"er als *ttributwerte bezeic"net. *ttribute m$sse nic"t +om %&' int sein son(ern k6nnen auc" String- #loat- boolean- o(er (ouble-*ttribute sein )um mal (ie wic"tigsten Datent&'en zu nennen,. 1.1.# 1eferenz-!ttri"ute - *"+ekte an&erer Klassen.

1 Diese Klasse hat &!ei einfache Attribute so!ie vier /eferen&-Attribute Die in *bbil(ung 1 (argestellte Klasse Ieic"enbrett "at zum Beis'iel zwei 'rimiti+e *ttribute )za"l<b0ekte (urc"sc"nitt, un( zus8tzlic" +ier 1e#erenzattribute )sonne mon( "aus un( (ac",.

1.# Konstruktoren
Je(e Klasse muss min(estens einen Konstruktor "aben. @s sin( auc" me"rere Konstruktoren m6glic" (ie sic" (ann aber in i"ren ?arameterlisten untersc"ei(en m$ssen )<+erloa(ing,. Der Konstruktor muss genau so "eiEen wie (ie KlasseK auc" au# DroE- un( Kleinsc"reibung ist (abei zu ac"ten. Der Konstruktor ist eine beson(ere 9et"o(e (ie zum @rzeugen +on <b0ekten (ient. 96c"te (er Benutzer (er Klasse "ier irgen(wie steuern( eingrei#en also zum Beis'iel bestimmte Lerte selbst bestimmen so gesc"ie"t (as mit /il#e +on ?arametern.

1.0 Met3o&en
Das ?rinzi' (er Datenka'selung kennen Sie bereits aus (en %"eorieteilen (er ersten Golgen. *u# (ieses ?rinzi' grei#en auc" (ie 9et"o(en einer

Klasse zur$ck. Die *ttribute ($r#en nur mit /il#e +on 9et"o(en ausgelesen o(er gar +er8n(ert wer(en. Dements'rec"en( untersc"ei(et man zwisc"en son(ieren(en 9et"o(en un( +er8n(ern(en 9et"o(en )sie"e auc" %"eorieteil zu Golge 1,. Die meisten Klassen +er#$gen noc" $ber eine (ritte Sorte +on 9et"o(en n8mlic" (ie *usgabemet"o(en. Dieser %&' +on 9et"o(en (ient (azu Daten in (ie Konsole auszugeben o(er in bestimmten Kom'onenten eines Ja+a-*''lets (arzustellen. *uc" (ie gra'"isc"e Darstellung +on Daten in einem *''let ge"6rt (azu.

#. Klassen&iagramme
Klassen(iagramme kennen Sie bereits obwo"l wir noc" nie (irekt (ar$ber ges'roc"en "aben. Sc"auen Sie sic" (oc" ."r BlueJ einmal genauer an. .n (em /au'tarbeitsbereic" se"en Sie nic"t nur (ie Klassen mit (enen Sie arbeiten son(ern auc" (ie Bezie"ungen zwisc"en (en Klassen sin( gra'"isc" in Gorm +on ?#eilen (argestellt. @ine solc"e gra'"isc"e Darstellung (ie auc" (ie Bezie"ungen zwisc"en (en Klassen zeigt "eiEt Klassen(iagramm.

@in Klassen(iagramm Iusammen"ang zwis Klassen eines Ja+a-? $bersic"tlic" un( +er (ar. Den Status +on kann man aus einem Klassen(iagramm ab entne"men.

# Das Klassendiagra%% @in Klassen(iagramm wie in *bbil(ung 2 gibt *uskun#t (ar$ber wie (ie einzelnen Klassen Ieic"nung Kreis 3ua(rat Dreieck un( Oeinwan( zusammen"8ngen. 9an kann erkennen (ass (ie Klasse Ieic"nung <b0ekte (er Klasse Kreis als *ttribute "at. Lie (iese *ttribute "eiEen un( wie +iele Kreis-<b0ekte ein Ieic"nungs-<b0ekt "at ge"t aus (em Klassen(iagramm aller(ings nic"t "er+or. Lill man (ies +eransc"aulic"en

so zeic"net man ein <b0ekt(iagramm )sie"e weiter unten, .

Klassen&iagramme in ?ML
(ieser %eil ist nur in (er Buc"+ersion +er#$gbarS

0. *"+ekt&iagramme

0 Objektdigra%% des Objektes bild der Klasse *eichenbrett Das <b0ekt(iagramm in *bbil(ung ! zeigt wesentlic" me"r .n#ormationen. Dargestellt ist (as <b0ekt bil( (as (er Klasse Ieic"enbrett ange"6rt. Dem Kasten links (er #$r (as <b0ekt bil( ste"t k6nnen nic"t nur (ie *ttribute son(ern auc" (ie *ttributwerte entnommen wer(en (ie (en Status (es <b0ektes bil( zum Ieit'unkt t besc"reiben. Die bei(en ein#ac"en *ttribute za"l<b0ekte un( (urc"sc"nitt "aben auc" ein#ac"e *ttributwerte (ie (irekt

*us einem <b0ekt(ia kann man (en genau eines <b0ektes ables ge"6ren auc" (ie Iu *ttributen (ie selbst

in (en weiEen K8stc"en ste"en. Diese Lerte wer(en (irekt in (em <b0ekt ges'eic"ert. .n (en weiEen K8stc"en (er *ttribute sonne mon( "aus un( (ac" ste"en keine Lerte son(ern ?#eile. Lie Sie bereits gelernt "aben "an(elt es sic" bei (iesen +ier *ttributen nic"t um ein#ac"e Daten#el(er son(ern um <b0ekte einer an(eren Klasse. Diese <b0ekte be#in(en sic" aber nic"t in (em <b0ekt bil( son(ern auEer"alb. Dies sollen (ie leeren K8stc"en un( (ie ?#eile +er(eutlic"en. Betrac"ten wir (as *ttribut sonne einmal n8"er. Der leere Kasten un( (er ?#eil zeigen uns (ass es sic" (abei um ein <b0ekt einer an(eren Klasse "an(elt. Golgen wir nun (em ?#eil so #$"rt er uns zu einem neuen Kasten mit (er >bersc"ri#t : Kreis. Dies ist so zu lesen: "Das *ttribut sonne ist ein <b0ekt (er Klasse Kreis." *ls <b0ekt einer Klasse "at (as *ttribut sonne selbst *ttribute: 4'os &'os ra(ius un( #arbe. Da es sic" bei (iesen +ier *ttributen um ein#ac"e *ttribute "an(elt un( nic"t um <b0ekte einer an(eren Klasse k6nnen (ie *ttributwerte (irekt in (ie weiEen K8stc"en gesc"rieben wer(en. .c" (enke au# (ie an(eren K8stc"en (es <b0ekt(iagramms m$ssen wir nic"t weiter einge"enK (ie Sac"e sollte 0etzt eigentlic" klar sein. .n (er Buc"+ersion #in(en Sie ein weiteres Beis'iel #$r ein <b0ekt(iagramm.

<b0ekte +on Klassen

5. Klassenfel&er
(ieser %eil ist nur in (er Buc"+ersion +er#$gbarS

1eferenz:

-rap3ik-Befe3le
&ra:Line
Die Deklaration +on (rawOine), sie"t so aus: 'ublic +oi( (rawOine)int 41 int &1 int 42 int &2, Die ?roze(ur zeic"net eine Oinie. Beim *u#ru# +on (rawOine), m$ssen (er Start'unkt )41 &1, un( (er @n('unkt )42 &2, angegeben wer(en. *ls aktuelle ?arameter wer(en Ia"lenkonstanten o(er integer-Fariablen erwartet. @in *u#ru# +on (rawOine), k6nnte z.B. so ausse"en:
g.(rawOine)1== 1== 2== -==,K

Die +on Ja+a gezeic"neten Oinien sin( immer 1 ?i4el breitK (as Ieic"nen (ickerer Oinien ist zwar m6glic" aber se"r umst8n(lic". @benso ist (as Ieic"nen +on gestric"elten o(er ge'unkteten Oinien rec"t umst8n(lic" (a"er wollen wir "ier nic"t weiter (arau# einge"en.

&ra:1e't @ fill1e't
'ublic +oi( (raw1ect)int 4 int & int wi(t" int "eig"t, 'ublic +oi( #ill1ect)int 4 int & int wi(t" int "eig"t, So sie"t (ie Deklaration (er 9et"o(e (raw1ect), bzw. #ill1ect), aus. .n Ja+a (e#iniert man ein 1ec"teck $ber (ie Koor(inaten seiner linken oberen @cke )4 &, sowie seine Breite un( /6"e )wi(t" "eig"t,:

1 Ein /echteck @in *u#ru# +on (raw1ect), k6nnte so ausse"en:


g.(raw1ect)1== 1== !== 2==,K

&ra:1oun&1e't @ fill1oun&1e't
'ublic +oi( (raw1oun(1ect)int 4 int & int wi(t" int "eig"t int arcLi(t" int arc/eig"t, So sie"t (ie Deklaration (er 9et"o(e (raw1oun(1ect), aus. Lie Sie sic"erlic" sc"on a"nen kann man mit (ieser 9et"o(e 1ec"tecke erzeugen (ie abgerun(ete @cken "aben. Die bei(en letzten ?arameter bestimmen (ie 1a(ien (ieser 1un(ungen.

&ra:*(al @ fill*(al
'ublic +oi( (raw<+al)int 4 int & int wi(t" int "eig"t, Dies ist (ie S&nta4 (er 9et"o(e (raw<+al), mit (er man <+ale )wi(t" MX "eig"t, o(er Kreise )wi(t" J "eig"t, zeic"nen kann.

# Ein Oval Lie man sie"t wer(en nic"t etwa (ie Koor(inaten (es Kreisbzw. <+almittel'unktes sowie (er 1a(ius angegeben son(ern (er Kreis bzw. (as <+al wir( $ber (as umgeben(e 1ec"teck (e#iniert wie es (ie *bbil(ung oben zeigt.

&ra:!r' @ fill!r'
'ublic +oi( (raw<+al)int 4 int & int wi(t" int "eig"t int start*ngle int arc*ngle, Dies ist (ie S&nta4 (er 9et"o(e (raw*rc), mit (er man Kreisb6gen )wi(t" J "eig"t, zeic"nen kann )o(er nat$rlic" auc" <+alb6gen,. Der ?arameter start*ngle (e#iniert (en Startwinkel (es Bogens w8"ren( arc*ngle (ie O8nge (es Bogens in Dra( #estlegt.

0 Ein Bogen *c"tung: Beim Startwinkel ist (arau# zu ac"ten (ass ein Lert +on =^ nac" rec"ts weist wie au# (er *bbil(ung oben (argestellt. Fon (a aus wir( (ann in entgegengesetzter 1ic"tung zum H"rzeigersinn gez8"lt. *ls @in"eit wir( tats8c"lic" Dra( +erwen(et un( nic"t wie sonst $blic" in ?rogrammiers'rac"en BogenmaE. Das +erein#ac"t (as Ieic"nen +on B6gen er"eblic".

setAolor
'ublic +oi( setColor)Color c,K *ls aktuellen ?arameter #$r (ie 9et"o(e setColor), m$ssen Sie ein <b0ekt (er Klasse Color +erwen(en. @in solc"es Color<b0ekt k6nnen Sie entwe(er +or (em *u#ru# +on setColor), (eklarieren un( initialisieren:
Color #arbe J new Color)222 = 127,K g.setColor)#arbe,K

*lternati+ k6nnen Sie (as Color-<b0ekt auc" (irekt als aktuellen ?arameter erzeugen:
g.SetColor)new Color)222 = 127,,K

...me3r <"er Ja(a-!pplets


.n (er neuen Fersion meines Oe"rgangs )2==5, besc"8#tigt sic" (ie Golge 2

mit (em %"ema Ja+a-*''lets. Die Seite (ie Sie 0etzt se"en war (ie urs'r$nglic"e Gassung (ieser Golge aller(ings nic"t als regul8re Golge konzi'iert son(ern als @4kurs #$r beson(ers interessierte Sc"$ler)innen,. Sie "aben 0etzt (ie Golge 2 (urc"gearbeitet un( wenn Sie wollen k6nnen Sie auc" noc" (iese @rg8nzung (urc"arbeiten um zus8tzlic"e ?unkte zu mac"en.

8'3ritt 1
Bitte starten Sie BlueJ un( legen Sie ein neues ?ro0ekt an (as zum Beis'iel "9alen" "eiEen k6nnte. @rzeugen Sie (ann eine neue Klasse mit (em Namen Ieic"enbrett. Do''elklicken Sie (ann au# (ie Klasse un( ent#ernen Sie in (em 3uellte4t alle Kommentare un( 9et"o(en auEer (er 'aint),-9et"o(e. Das Danze sollte "inter"er so ausse"en wie au# *bb. 1.

1 Der &urechtgestut&te 0uellte.t der Klasse *eichenbrett enth1lt nur die aint23-4ethode Lenn Sie ein au#merksamer Betrac"ter sin( ($r#te ."nen etwas au#ge#allen sein: Die Klasse Ieic"enbrett "at keinen KonstruktorS Das liegt (aran (ass Ieic"enbrett keine normale Klasse ist son(ern ein so genanntes *''let. Lenn Sie wollen ist ein *''let eine Ja+a-Klasse (eren <b0ekte in einem Lebbrower lau#en un( (ie auc" +on (iesem erzeugt un( initialisiert wer(en. @in s'ezieller Konstruktor ist (a#$r nic"t notwen(ig.

8'3ritt #
>bersetzen Sie (en abges'eckten 3uellte4t un( klicken Sie (ann mit (er rec"ten 9austaste au# (ie Klasse Ieic"enbrett.

@in *''let ist eine (eren <b0ekte in e Lebbrowser ausge wer(en. @in Konstr ein *''let nic"t no

# Der Befehl A

let ausf5hren &eigt das A

let in eine% neuen 6enster an

Lenn Sie 0etzt (en Be#e"l "*''let aus#$"ren" anw8"len wir( (as *''let in einem neuen Genster angezeigt. For"er ersc"eint noc" ein Dialog#enster )*bb. !, in (em Sie ein 'aar *ngaben aus#$llen m$ssen +or allem welc"e Dr6Ee (as *''let "aben soll. Stan(ar(m8Eig ist "ier 2== ?i4el /6"e un( 2== ?i4el Breite eingestellt. Diese Lerte k6nnen Sie so lassen klicken Sie ein#ac" au# (en <k-Button.

0 Das Dialogfenster f5r das A

let

Fiel ist in (em neuen Genster aller(ings noc" nic"t zu se"en (a wir (ie 9et"o(e 'aint), noc" nic"t weiter +er8n(ert "aben.

5 Das A

let-6enster enth1lt noch nicht viel

8'3ritt 0
Sie wer(en nun ein 'aar Ja+a-Be#e"le kennenlernen mit (enen Sie ein#ac"e Ieic"enau#gaben erle(igen k6nnen. Dazu "abe ic" eine >bersic"ts-Seite angelegt (ie Sie sic" 0etzt bitte ansc"auen. Lie(er (aU DutS .c" "o##e Sie kennen sic" noc" mit G<1-Sc"lei#en aus sc"lieElic" "aben wir sie im /amster-Kurs intensi+ be"an(elt. Dra'"ik-Be#e"le

>"ung !pp1.1 (# $unkte)


O6sc"en Sie (en 3uellte4t (er 'aint),-9et"o(e un( erzeugen Sie mit /il#e +on zwei G<1-Sc"lei#en un( (em (rawOine),-Be#e"l ein Dittermuster so wie in *bb. 2 (argestellt. Die erste G<1-Sc"lei#e ist #$r (ie senkrec"ten Oinien +erantwortlic"K (ie zweite G<1-Sc"lei#e zeic"net ansc"lieEen( (ie waagerec"ten Oinien )o(er umgeke"rt wenn Sie wollen,.

#or-Sc"lei#en

2 4it 7ilfe von &!ei 6O/-,chleifen und des dra!8ine23-Befehls kann %an sch"ne )itter%uster &eichnen

8'3ritt 5
@rzeugen Sie eine neue Klasse un( nennen Sie sie 1ec"teck. Deben Sie (ann #olgen(en 3uelte4t ein:

B Der 0uellte.t der Klasse /echteck /ier gibt es etwas Neues zu lernen: Die +ier *ttribute (er Klasse 1ec"teck "eiEen 4 & breite un( "oe"e. Die +ier ?arameter (es Konstruktors "aben genau (ie gleic"en Bezeic"nungenK auc" (ie DroE- un( Kleinsc"reibung ist i(entisc". Lie kann nun untersc"ie(en wer(en zwisc"en (em *ttribut breite un( (em ?arameter breiteU Lenn Sie genau "inse"en erkennen Sie (as Lort "t"is" (as - (urc" einen ?unkt getrennt - +or (em *ttribut ste"t. Dieses Lort mac"t genau (as wie sein Name besagt: "t"is.breite" ist (as *ttribut breite (ieser Klasse. Da"er ist es kein ?roblem eine Iuweisung zu #ormulieren wie

9it (em Lort "t"is" betont (ass eine F *ttribut (ieser Klas

*uc" <b0ekte k6nn ?arameter an eine $bergeben wer(en 'rimiti+en ?aramet also auc" <b0ekt'a

t"is.breite J breiteK

Die zweite 9et"o(e (er Klasse 1ec"teck ist we(er eine son(ieren(e noc" eine +er8n(ern(e 9et"o(e son(ern zeic"net (as 1ec"teck ein#ac" au# (ie Ieic"en#l8c"e g. Bei g "an(elt es sic" um ein <b0ekt (er Klasse Dra'"ics. /ier gibt es sc"on wie(er etwas Neues zu lernen: Bei (en *ttributen gibt es 'rimiti+e *ttribute un( <b0ektattribute. Die 1ec"teck-*ttribute 4 & breite un( "oe"e sin( zum Beis'iel 'rimiti+e *ttribute. <b0ektattribute (agegen sin( <b0ekte an(erer Klassen. Bei ?arametern kann man genau (as gleic"e beobac"ten. @s gibt 'rimiti+e ?arameter wie int 4 int & un( so weiter un( es gibt <b0ekt'arameter wie zum Beis'iel Dra'"ics g. Lie wir( (iese neue Klasse 0etzt +on (em *''let eingebun(enU Damit kommen wir zu Sc"ritt 2 (ieser Golge.

8'3ritt 2

C ,o !ird die Klasse in das A

let eingebunden

@rg8nzen Sie (en 3uellte4t ."res *''lets so wie in *bbil(ung 7. Den 3uellte4t

(er bei(en G<1-Sc"lei#en "abe ic" mit (em Leic"zeic"ner unkenntlic" gemac"t (amit Sie (ie >bung *'' 1.2 nic"t zu sc"nell #ertig "aben. Das *''let Ieic"enbrett wir( zun8c"st um ein <b0ektattribut kasten (er Klasse 1ec"teck erg8nzt. .n einer 9et"o(e namens init), wir( (as <b0ektattribut (ann initialisiert. Dabei wer(en (ie +ier Lerte $bergeben au# (ie (er Konstruktor (es 1ec"tecks beste"t. Dezeic"net wir( in init), noc" nic"t (ie bleibt (er 'aint),-9et"o(e $berlassen. Nac"(em (as 1aster gezeic"net wur(e wir( (ie 'aint),-9et"o(e (es <b0ektattributs kasten au#geru#en. Dabei wir( (as <b0ektattribut g als ?arameter $bergeben so (ass kasten.'aint), au# (ie gleic"e Ieic"en#l8c"e malt wie (ie an(eren Be#e"le +on Ieic"enbrett.'aint),.

>"ung !pp1.# (# $unkte)


@rg8nzen Sie (ie Klasse 1ec"teck um eine 9et"o(e (ie ein rotes 1ec"teck mit einem sc"warzen 1a"men (er Breite - ?i4el zeic"nen kann. <(er ein blaues 1ec"teck mit einem gelben 1a"men (er Breite 7. Hn( so weiter. Der Ko'# (ieser 9et"o(e k6nnte so ausse"en:
'ublic male)Dra'"ics g Color innen Color aussen int ra"menBreite,

D Ein Beis iel f5r 9bung :#;

>"ung !pp1.0 (# $unkte)


a, Gin(en Sie "eraus was (as #olgen(e Ja+a-*''let leistet. b, @rkl8ren Sie (ie neuen ?rogrammelemente. c, Lan(eln Sie (as *''let so ab (ass noc" interessantere Kur+en gezeic"net wer(en.

1E Anal-se eines 0uellte.tes

Ke3ren 8ie nun "itte zu &er 8eite zur<'k, (on &er sie gekommen sin& (i.&.1. also zu ;olge 2).

Informatik-Lexikon
'lass Button
!ttri"ute
Nac" (em Drun(satz (er Datenka'selung interessieren uns (ie *ttribute (er Klasse "ier nic"tS

Konstruktor
Iur @rzeugung +on Buttons gibt es zwei Konstruktoren.

Button),

Dieser Konstruktor erzeugt einen nic"t besc"ri#teten rec"t kleinen Button.

Button)String te4t,

/ier wir( ein breiterer Button mit Besc"ri#tung erzeugt

Beispielquelltext
Der #olgen(e 3uellte4t erzeugt (as *''let (as in *bbil(ung 2 (argestellt ist:

Ieile 1P2: .m'ort wic"tiger Ja+aBibliot"eken Ieile -: Ko'# (er Klasse Button%est welc"e ein *''let ist. Ieile 5: Deklaration +on zwei Buttons b1 un( b2. Ieile :: Ko'# (er init),-9et"o(e (es *''lets. Ieile 1=P11: .nitialisierung (er bei(en Buttons mit +ersc"ie(enen Konstruktoren. Ieile 1!P1-: /inzu#$gen (er bei(en Buttons zum *''let. Ieile 17-1;: Oeere 'aint),-9et"o(e Ieile 21: @n(e (er Klasse Button%est. 1 Beis'iel-3uellte4t

2 @in *''let mit zwei Buttons

6i'3tige Met3o&en
@ine son(ieren(e 9et"o(e lie#ern (ie Besc"ri#tung (es Buttons:
String getOabel),

@ine +er8n(ern(e 9et"o(e kann (en %e4t (es Buttons +er8n(ern.


+oi( setOabel)String te4t,

6eitere n<tzli'3e Met3o&en (!us:a3l)


+oi( setBoun(s)int 4 int & int breite int "oe"e,

Damit kann (ie ?osition Breite un( /6"e eines Buttons genau bestimmen. *ller(ings muss (ann (er Be#e"l setOa&out)null, in (ie .nit),-9et"o(e (es *''lets eingebaut wer(en.
+oi( setGont)Gont #,

/iermit kann eine bestimmte Sc"ri#tart gesetzt wer(en. .m #olgen(en Beis'iel-3uellte4t wir( gezeigt wie man einen neuen Gont erzeugt. Der erste ?arameter ist (ie Bezeic"nung (es Gonts z.B. "%imes New 1oman". Der zweite ?arameter ste"t #$r (en Stil )= J normal 1 J #ett 2 J kursi+, un( (er (ritte ?arameter (e#iniert (ie Dr6Ee (es Gonts.

Beispiel-Fuelltext
Ieile 1=: Ko'# (er init),-9et"o(e. Ieile 12P1!: .nitialisierung (er bei(en Buttons. Ieile 12: Oa&out-9o(us so w8"len (ass 'i4elgenaues ?ositionieren +on Kom'onenten m6glic" ist. Ieile 17P1:: ?i4elgenaues ?ositionieren (er bei(en Buttons Ieile 1;P2=: /inzu#$gen (er Buttons zum *''let ! Beis'iel-3uellte4t

Button-!ktionen

Informatik-Lexikon
Button a"fragen
.n (iesem Beitrag soll es (arum ge"en wie man a, #eststellen kann welc"er +on zwei Buttons geklickt wur(e un(

b, (ann eine ents'rec"en(e *ktion aus#$"ren kann. Kurz gesagt es ge"t um @reignisbe"an(lung angewan(t au# Buttons. Sc"auen wir uns zun8c"st einen kurzen Beis'iel-3uellte4t an:

Beispielquelltext
Ieile 1-!: .m'ort wic"tiger Ja+a-Bibliot"eken. Ieile 2: Ko'# (er Klasse Button%est welc"e ein *''let ist. Ieile 5: Das *''let soll einen *ctionOistener besitzen (amit au# *ktionen (es Benutzers reagiert wer(en kann. Ieile :: Deklaration +on zwei Buttons b1 un( b2. Ieile ;: Deklaration einer %e4tausgabe label. Ieile 11: Ko'# (er init),9et"o(e (es *''lets. Ieile 1!P1-: .nitialisierung (er bei(en Buttons. Ieile 15: Oa&out soll 'i4elgenaues ?ositionieren +on Kom'onenten erm6glic"en. Ieile 1:P1;: ?i4elgenaues ?ositionieren (er bei(en Buttons Ieile 2=P21: /inzu#$gen (er bei(en Buttons zum *''let. Ieile 2!P2-: Je(er Button bekommt einen *ctionOistener kann also #ortan au# *ktionen reagieren. Ieile 27: Ko'# (er 9et"o(e action?er#orme( welc"e sic" um (ie Benutzer-*ktionen

k$mmert. Ieile 2;P!1: Galls (er erste P zweite Button +erantworlic" #$r eine *ktion war Ieile !=P!2: er"8lt label (en ric"tigen %e4t. Ieile !!: Neuzeic"nen (es *''lets er#or(erlic" (amit (er %e4t ric"tig ausgegeben wir( Ieile !5: Ko'# (er 'aint),9et"o(e Ieile !:: Deklaration un( .nitialisierung eines Gont<b0ektes # Ieile !;: Der *usgabe-Gont (es *''lets wir( au# # gesetzt. Ieile -=: *usgabe (es Strings label. 1 Beis'iel-3uellte4t

2 @in *''let mit zwei Buttons reagiert au# 9ausklicks mit einer 9el(ung

9rl4uterung
@igentlic" ste"t (ie @rl8uterung sc"on neben (em 3uellte4t. Iun8c"st wer(en ganz normal (ie bei(en Buttons initialisiert un( (ann (em *''let mittels a((), $bergeben. Dann er#olgt #$r 0e(en Button (er *u#ru# (er Button-9et"o(e a((*ctionOistener),. Diese 9et"o(e "at (ie Klasse Button +on (er $bergeor(neten Klasse geerbt. *uc" an(ere gra'"isc"e Kom'onenten besitzen (iese 9et"o(e. 9it (em Sc"l$sselwort t"is +erkn$'#en wir (en *ctionOistener (es 0eweiligen Buttons mit (em *''let. Lenn also (er Button geklickt wir( so wir( (iese .n#ormation an (as *''let weitergeleitet. Darau#"in reagiert (ieses mit (em *u#ru# (er 9et"o(e action?er#orme()*ction@+ent e+ent,. Dies ist sozusagen (ie Stan(ar(*ntwort au# 0eglic"e *ktionen (ie (em *''let mitgeteilt wer(en. Lenn wir (iese 9et"o(e leer lassen also keinen 3uellte4t "ineinsc"reiben 'assiert nic"ts weiter. Lollen wir aber (ass etwas gesc"ie"t wenn (er eine o(er an(ere Button geklickt wur(e so m$ssen wir (ie 9et"o(e action?er#orme(), mit sinn+ollen Be#e"len #$llen. Iun8c"st einmal muss #estgestellt wer(en welc"er (er bei(en Buttons geklickt wur(e. Dies gesc"ie"t mit /il#e (er 9et"o(e getSource), $ber (ie 0e(es <b0ekt (er Klasse *ction@+ent +er#$gt. Lenn #estste"t (ass b1 geklickt wur(e so wir( (as *ttribut label au# "*n#ang" gesetzt. Lur(e (agegen b2 geklickt wir( label au# "@n(e" gesetzt. *nsc"lieEen( wir( (ie 9et"o(e re'aint), (es *''lets au#geru#en welc"es (azu #$"rt (ass (ie 'aint),9et"o(e ausge#$"rt wir(.

Informatik-Lexikon
'lass 1an&om
!ttri"ute
Nac" (em Drun(satz (er Datenka'selung interessieren uns (ie *ttribute (er Klasse "ier nic"tS

Konstruktor
Iur @rzeugung +on Iu#allsgeneratoren (er Klasse 1an(om gibt es zwei Konstruktoren.

1an(om),

Dieser Konstruktor erzeugt einen neuen Iu#allsgenerator.

1an(om)long see(,

@in Com'uter kann keine "ec"ten" Iu#allsza"len generieren. Die Iu#allsza"len wer(en

nac" einem kom'lizierten mat"ematisc"en *lgorit"mus erzeugt. Solc"e *lgorit"men ge"en meisten +on einer bestimmten +orgegebenen Ia"l aus zum Beis'iel (em aktuellen Datum (er Hrzeit o(er irgen(einem an(eren Lert (en (er Com'uter leic"t ermitteln kann. *usge"en( +on (iesem Startwert wer(en 0etzt nac" un( nac" weitere Lerte berec"net. Nac" einer bestimmten *nza"l +on 1ec"ensc"ritten ste"t (ann ein "Iu#allswert" #est. 9it (ieser Fersion (es Konstruktors ist es (em Benutzer m6glic" selbst eine solc"e Startza"l #estzulegen. Lic"tig: Der gleic"e Startwert #$"rt auc" immer zur gleic"en Golge +on Iu#alllsza"len. >brigens: Der erste Konstruktor ru#t (en zweiten au# wobei er (ie aktuelle S&stemzeit als ?arameter $bergibt.

6i'3tige Met3o&en
Der Iu#allsgenerator erzeugt Iu#allsza"len #$r +ier +ersc"ie(ene Datent&'en ents'rec"en( gibt es auc" +ier 9et"o(en welc"e eine Iu#allsza"l zur$cklie#ern:
int ne4t.nt), long ne4tOong), #loat ne4tGloat), (ouble ne4tDouble),

Diese +ier 9et"o(en lie#ern Iu#allsza"len (ie im Bereic" (er $ber"au't erlaubten Ia"len liegenK also z.B. zwisc"en .nteger.9.N_F*OH@ un( .nteger.9*Q_F*OH@ bei (er ersten 9et"o(e. Lill man int-Ia"len in einem bestimmten Bereic" "aben so +erwen(et man #olgen(e 9et"o(e:
int ne4t.nt)int Bereic",

So lie#ert (ie Iuweisung


zu#all J generator.ne4t.nt)1==,K

eine Iu#allsza"l zwisc"en = un( ;;. Lill man eine Ia"l zwisc"en 1 un( 1== "aben so muss man sc"reiben:
zu#all J generator.ne4t.nt)1==,N1K

Dabei ist generator ein <b0ekt (er Klasse 1an(om. G$r +iele Iwecke ben6tigt man Iu#allsza"len (ie einer D*HSSsc"en Normal+erteilung )Dlockenkur+e, ents'rec"en. Lill man z.B. %ausen( ?ersonen-<b0ekte mit zu#8lligen K6r'ergr6Een ausstatten so w8re es unsinnig eine Iu#allsza"l im Bereic" zwisc"en 12= un( 2== zu generieren. @s "8tten (ann genauso+iele <b0ekte eine Dr6Ee +on 12= wie es <b0ekte mit einer Dr6Ee +on 172 g8be. /ier "il#t (ie 9et"o(e

(ouble ne4tDaussian),

welc"e eine Iu#allsza"l aus einer Normal+erteilung mit (er 9itte = un( (er Stan(ar(abweic"ung 1 lie#ert. @s wer(en also +iele Ia"len im Bereic" zwisc"en -1 un( N1 generiert sc"on (eutlic" weniger Ia"len zwisc"en -2 un( -1 bzw. N1 un( N2 un( noc" weniger Ia"len zwisc"en -! un( -2 bzw. N2 un( N!.

73eorieteil zu ;olge C

!rra)s

@in *rra& ist eine Oiste +on gleic"en Fariablen. Je(e 1. !llgemeines <"er !rra)s (ieser Fariablen kann $ber @in#ac"e Datenstrukturen sin( ."nen bereits bekannt: @s gibt Fariablen einen bestimmten .n(e4 (ir +om %&' int (ie ganze Ia"len s'eic"ern k6nnen Fariablen +om %&' anges'roc"en wer(en. Das #loat o(er (ouble (ie reelle Ia"len s'eic"ern un( Fariablen +om %&' erste *rra&element "at (en boolean (ie La"r"eitswerte s'eic"ern k6nnen. .n(e4 =. 9it /il#e +on #orSc"lei#en kann man alle @in *rra& kann me"r: @r kann 1= 2= 1== 1=== o(er me"r Fariablen *rra&elemente +er8n(ern s'eic"ern (ie aller(ings alle vo% gleichen Datent- sein m$ssen. Die o(er auslesen. Fariablen wer(en (ann als *rra&-@lemente bezeic"net. .m Degensatz zu (en ein#ac"en Datenstrukturen bezeic"net man *rra&s als @in#ac"e Datenstrukturen s zusammengesetzte Datenstrukturen. int #loat (ouble boolean u an(ere. Je(es (ieser *rra&-@lemente kann einzeln anges'roc"en wer(en - wie eine ric"tige Fariable. Dazu gibt man erst (en Namen (es *rra&s un( Iusammengesetzte (ann in eckigen Klammern (en .n(e4 (es *rra&-@lementes an. Datenstrukturen beste"en a *ngenommen (er *rra& +on int-Ia"len "eiEt "za"l" un( wir wollen me"reren gleic"en o(er testen ob (as *rra&-@lement mit (em .n(e4 1 (en Lert = "at so +ersc"ie(enen ein#ac"en k6nnen wir sc"reiben: Datenstrukturen. Der *rra& eine solc"e i# )za"l[1\ JJ =,... zusammengesetzte Lenn wir (em *rra&-@lement mit (em .n(e4 7 einen bestimmten Lert Datenstruktur. zuweisen wollen so sc"reiben wir
za"l[7\ J 1==K

Die #olgen(e Ieic"nung zeigt wie ein *rra& im *rbeitss'eic"er (es 1ec"ners +erwaltet wir(:

1 Der Arra- i% Arbeitss eicher des /echners /ier sie"t man (ass (ie @lemente eines *rra&s im *rbeitss'eic"er

"intereinan(er angeor(net sin(. Das erste *rra&-@lement "at (en .n(e4 =. Dies ist wic"tig zu wissenK +iele ?rogrammieran#8nger ne"men irrt$mlic" an (as erste *rra&-@lement "abe (en .n(e4 1. 9an muss auc" immer zwisc"en (em Lert eines *rra&-@lementes un( (em .n(e4 (es *rra&-@lementes untersc"ei(en. .n (em *rra& in *bb. 1 "at z.B. (as *rra&-@lement mit (em .n(e4 2 (en Lert 12. Nac"(em wir uns 0etzt etwas +or(ergr$n(ig mit *rra&s besc"8#tigt "aben wollen wir (as Danze noc" mal etwas intensi+er bes'rec"en.

#. !rra)s - eine intensi(ere Betra'3tung


#.1 eklaration eines !rra)s

Lenn man eine einzelne int-Fariable (eklarieren will so sc"reibt man:


int za"lK

Lill man einen *rra& +on int-Fariablen (eklarieren so muss man (agegen #olgen(es sc"reiben:
int[ \ za"lK

9it (ieser Deklaration ist noc" nic"t #estgelegt wor(en !ie gro< (er *rra& sein sollK wie+iele @lemente (er *rra& also ent"alten soll. Das kommt 0etzt in (er #.# Initialisierung eines !rra)s Die Gestlegung (er *rra&-Dr6Ee er#olgt in (er .nitialisierung (es *rra&s. Lir sc"reiben:
za"l J new int[1==\K

wenn (er *rra& 1== Ia"len um#assen soll. Die #olgen(e Ieile
za"l J new #loat[22=\K

erzeugt (agegen S'eic"er'latz in (em 22= #loat-Fariablen untergebrac"t wer(en k6nnen. #.0 !rra)s, &ie *"+ekte spei'3ern *u# (ie gleic"e Leise wie 'rimiti+e Datent&'en kann man auc" <b0ekte in einem *rra& s'eic"ern. Sie"e "ierzu (ie Fertie#ung zum %"eorieteil. Diese Fertie#ung ent"8lt auc" (ie bei(en >bungen 7.2 )- ?unkte, un( 7.! )- ?unkte,. #.5 ,ugriff auf einzelne !rra)-9lemente

*rra&s (ie <b0ekte s'eic"e

Beispiele f<r lesen&e ,ugriffe & J za"l[2\K

@ine ein#ac"e IuweisungK (as sec"ste *rra&element ).n(e4 J 2, wir( ausgelesen un( in (er Fariablen & ges'eic"ert.
S&stem.out.'rinteln)za"l[!\,K

Der .n"alt (es +ierten *rra&elements wir( in (er Konsole ausgegeben.


i# )za"l[i\ X 1==, 0 J za"l[iN1\K

Lenn (er Lert (es *rra&elementes mit (em .n(e4 i gr6Eer ist als 1== so wir( (er Fariable 0 (er Lert (es n8c"sten *rra&elements zugewiesen.
i# )za"l[0\ X za"l[0N1\, swa'),K

Lenn ein *rra&element gr6Eer ist als sein rec"ter Nac"bar so wir( (ie 9et"o(e swa'), au#geru#en.
berec"ne9ittelwert)za"l[0N1\ za"l[0N2\,K

*rra&-@lemente k6nnen auc" als ?arameter #$r eingesetzt wer(en. /ier wer(en zwei benac"barte *rra&-@lemente an eine 9et"o(e berec"ne9ittelwert), $bergeben.
Beispiele f<r s'3rei"en&en ,ugriff za"l[5\ J &K za"l[:\ J za"l[;\K

Diese Beis'iele sin( nic"t se"r kom'liziert. .n (er ersten Ieile er"8lt (as *rra&-@lement Nummer 5 (en Lert zugewiesen (er in (er Fariable & ges'eic"ert ist. .n (er zweiten Ieile wir( ein Lert +on einem *rra&@lement au# ein an(eres *rra&-@lement $bertragen. #.2 ,ugriff auf &en gesamten !rra) Lill man au# alle @lemente eines *rra&s zugrei#en so +erwen(et man (azu am besten eine #or-Sc"lei#e. Lill man zum Beis'iel alle @lemente eines *rra&s aus 1== Ia"len ausgeben so sie"t (ies so aus:
#or )int i J =K i M 1==K iNN, S&stem.out.'rintln )"Ia"l "NiN" J " N za"l[i\,K

Lill man $ber'r$#en ob (ie Hngl$cksza"l 1! in einem *rra& aus 1== Ia"len +orkommt so k6nnte man sc"reiben:

'ublic boolean ent"aelt1!), B #or )int k J =K i M 1==K kNN, i# )za"l[k\ JJ 1!, return trueK return #alseK C

Der *rra& wir( +on +orn (urc"suc"t. Lenn (ie Ia"l 1! ge#un(en wur(e wir( (er return-Be#e"l mit (em Lert true ausge#$"rtK (ie #or-Sc"lei#e wir( abgebroc"en un( (ie 9et"o(e +erlassen. .st (er Lert 1! nic"t im *rra& ent"alten so wir( (ie #or-Sc"lei#e kom'lett (urc"lau#en un( (anac" wir( (er return-Be#e"l mit (em Lert #alse ausge#$"rt. #.B >"ungen >"ung C.5 (0 $unkte) Sc"reiben Sie #$r (ie Klasse Oiste eine son(ieren(e 9et"o(e
'ublic boolean ent"aelt)int a int b,

welc"e (en Lert true zur$cklie#ert wenn sowo"l (ie Ia"l a wie auc" (ie Ia"l b in (em *rra& ent"alten ist. Bitte keine Konsolenausgabe inner"alb (er 9et"o(eS

>"ung C.2 (# $unkte) Sc"reiben Sie #$r (ie Klasse Oiste eine son(ieren(e 9et"o(e
'ublic int minimum),

welc"e (ie kleinste Ia"l in (em mit Iu#allsza"len ge#$llten *rra& #in(et un( als Lert zur$cklie#ert. Bitte keine Konsolenausgabe inner"alb (er 9et"o(eS

,ur<'k zur ;olge C

%ertiefung &es 73eorieteils zu ;olge C

#.0 !rra)s, &ie *"+ekte spei'3ern


Bis"er "aben unsere *rra&s ein#ac"e int-Ia"len ges'eic"ert. 9an kann aber auc" <b0ekte in einem *rra& s'eic"ern. Nat$rlic" ge"t (as nur (ann wenn alle <b0ekte (er gleic"en Klasse ange"6ren. eklaration eines *"+ekt-!rra)s Lenn man ein einzelnes <b0ekt z.B. ein *uto )Golge -, (eklarieren will so sc"reibt man bekanntlic":
*uto mein?orsc"eK

Lill man einen *rra& solc"er <b0ekte (eklarieren sc"reibt man ents'rec"en(:
*uto[\ autosK

Die Ia"l (er *rra&elemente ist mit (ieser Deklaration noc" nic"t #estgelegt. Die Fariable autos ist eine 1e#erenz )ein Ferweis Ieiger o(er ?ointer, au# (en eigentlic"en *rra& (er aber noc" gar nic"t e4istiert. Initialisierung eines *"+ekt-!rra)s Hm ein einzelnes <b0ekt zu initialisieren sc"reiben wir:
mein?orsc"e J new *uto)77===,K

Damit wir( ein neues <b0ekt (er Klasse *uto erzeugtK beim @rzeugen wir( (er Konstruktor au#geru#en un( (iesem Konstruktor k6nnen ?arameter $bergeben wer(en wie "ier z.B. (er Kilometerstan( (es Ga"rzeugs. Hm einen *rra& aus <b0ekten zu initialisieren sin( zwei Sc"ritte notwen(ig. Iun8c"st wir( (er *rra& selbst erzeugt:
autos J new *uto[1=\K

Damit wir( ein Ga"rzeug'ark aus genau 1= *utos erzeugt - ein *rra& (er 1= *uto-<b0ekte um#asst n8mlic" autos[=\ bis autos[;\. Bei (ieser .nitialisierung wur(en aber noc" nic"t (ie Konstruktoren (er Klasse *uto au#geru#en. Der *rra& e4istiert zwar aber noc" nic"t (er .n"alt (es *rra&s n8mlic" (ie ze"n <b0ekte (er Klasse *uto. Dazu ist eine #or-Sc"lei#e gut geeignet:
#or )int iJ=K iM1=K iNN, autos[i\ J new *uto)1====,K

So wer(en ze"n *uto-<b0ekte erzeugt aller(ings alle *utos mit (em gleic"en Kilometerstan(. Sollen (ie ze"n *uto-<b0ekte einen untersc"ie(lic"en Kilometerstan( "aben so muss 0e(es <b0ekt einzeln

erzeugt wer(en:
autos[=\ J new *uto)77===,K autos[1\ J new *uto)55===,K autos[2\ J new *uto)2====,K ... autos[;\ J new *uto)12====,K

*n(ers ge"t es lei(er nic"t. ,ugriff auf *"+ekte eines *"+ekt-!rra)s Lir wollen uns 0etzt noc" anse"en wie man alle ze"n *utos in (er Konsole anzeigen lassen kann:
#or )int iJ=K iM1=K iNN, autos[i\.anzeigen),K

So ein#ac" ge"t (as - +orausgesetzt (ie Klasse *uto stellt i"ren <b0ekten eine anzeigen),-9et"o(e zur Fer#$gung.

%ertiefung
Das Danze mit (en *utos wollen wir uns noc" einmal in einem <b0ekt(iagramm ansc"auen. Dazu brauc"en wir aber erst mal eine $bergeor(nete Klasse Ga"rzeug'ark:
'ublic class Ga"rzeug'ark B *uto[\ autosK 'ublic Ga"rzeug'ark), B autos J new *uto[1=\K #or )int i J 1K i M 1=K iNN, autos[i\ J new *uto)1====,K C C

Betrac"ten wir uns (ann ein <b0ekt 'ark (ieser Klasse Ga"rzeug'ark. Der oberste rote Kasten ste"t #$r (ieses eine <b0ekt. Da (ie Klasse Ga"rzeug'ark nur ein einziges *ttribut "at n8mlic" (en *rra& autos ent"8lt (er rote Kasten auc" nur ein einziges *ttribut. .n (em weiEen Kasten ste"t aller(ings kein Lert son(ern ein ?#eil (er au# einen weiteren roten Kasten zeigt. Lie bereits im %e4t gesagt wir( nac" (er Deklaration eines *rra&s noc" kein *rra& erzeugt son(ern (ie @rzeugung eines *rra&s wir( le(iglic" +orbereitet. Iun8c"st wir( nur ein Ieiger )?ointer 1e#erenz, au# (en zu erzeugen(en *rra& bereitgestellt. Nac" (er .nitialisierung (es *rra&s ist - bil(lic" +orgestellt - (er zweite rote Kasten +or"an(en. Dies ist (er eigentlic"e *rra& (er "ier genau

ze"n @lemente um#asst. Diese @lemente sin( aber auc" noc" nic"t (ie <b0ekte son(ern wie(erum nur Ieiger au# <b0ekte. Die <b0ekte selbst e4istieren noc" nic"t. Dazu muss erst 0e(es <b0ekt einzeln erzeugt wer(en. .m Konstruktor (er Klasse Ga"rzeug'ark gesc"ie"t (ies in einer #or-Sc"lei#e. Nac" (em Durc"lau#en (er #or-Sc"lei#e e4istieren (ann ze"n <b0ekte (er Klasse *uto +on (enen in (em <b0ekt(iagramm aber aus ?latzgr$n(en nur (rei ber$cksic"tigt sin(.

Durc" (ie .nitialisierung in (er #or-Sc"lei#e "aben alle ze"n <b0ekte am *n#ang nat$rlic" (ie gleic"en *ttributwerte un( (amit (en gleic"en Status. 9it (em BlueJ-<b0ektins'ektor kann man nac"'r$#en (ass (ie im <b0ekt(iagramm gezeigten Bezie"ungen tats8c"lic" so e4istierenS

>"ungen
>"ung C.# (5 $unkte) .n (er alten Fersion (es BlueJ-Kurses mussten meine Sc"$ler)innen, ein *benteuer-S'iel 'rogrammieren. .n (er 0etzigen Fersion ist (as *benteuer-S'iel nur noc" ein @4kurs #$r beson(ers sc"nelle Sc"$ler)innen,. .c" wer(e mir erlauben #$r (iese *u#gabe einmal (as S'iel zu "'l$n(ern" )(abei aber auc" zu +erein#ac"en,.

.n (em S'iel soll es #olgen(e Klassen geben: Klasse Degenstan( mit (en *ttributen bezeic"nung angri##swert +ertei(igungswert un( gol(wert. Das erste *ttribut ist +om %&' String (ie an(eren sin( +om %&' int. Klasse .n+entar mit (en *ttributen anza"l un( liste. Das *ttribut anza"l ist +om %&' int (as *ttribut liste +om %&' Degenstan([ \ es "an(elt sic" also um einen *rra& +on Degenst8n(en. 9a4imal soll (as .n+entar ze"n Degenst8n(e #assen k6nnen. Klasse /el( mit (en *ttributen name leben un( rucksack. Das *ttribut name ist +om %&' String (as *ttribut leben +om %&' int un( (as *ttribut rucksack ist ein <b0ekt (er Klasse .n+entar. Kommen wir nun zu ."rer *u#gabe. ,ei'3nen 8ie ein *"+ekt&iagramm, &as folgen&e 8ituation &arstellt: er Gel&, sein Hame ist <"rigens I!ntonI, 3at 1E Le"enspunkte un& einen 1u'ksa'k, &er &rei -egenst4n&e ent34lt. ie Hamen un& !ttri"ut:erte &er &rei -egenst4n&e &<rfen 8ie si'3 sel"st aus&enken. Lassen 8ie si'3 ,eit mit &em ,ei'3nen, au'3 &ie 4uJere ;orm :ir& "e:ertet (Lineal (er:en&en, ;ar"en einsetzen).

>"ung C.0 (5 $unkte) .n (er Golge 2 "aben Sie sic" mit Ja+a-*''lets be#asst in (er Golge 5 sogar mit (er ?rogrammierung eines kleinen 1oboters (er (urc" Buttons gesteuert wir(. Sc"reiben Sie ein Ja+a-*''let mit 22 Buttons )*nor(nung 2 4 2, (ie mit (en Ia"len +on "1" bis "22" besc"ri#tet sin(. Nat$rlic" sollen Sie nic"t 22 einzelne Buttons (eklarieren un( initialisieren son(ern einen *rra& aus 22 Button-<b0ekten. Je k$rzer ."r 3uellte4t (esto besser.

So k6nnte ."r *''let z.B. ausse"en. >"ung C.0 - 9rg4nzung (# $unkte) @rweitern Sie (as *''let aus >bung 7.! so (ass (ie Buttons angeklickt wer(en k6nnen. *nsc"lieEen( soll (ie 'aint),-9et"o(e mit g.(rawString), anzeigen welc"er (er 22 Buttons angeklickt wur(e.

,ur<'k zum 73eorieteil

73eorieteil zu ;olge D

Bu""lesort

8ortieren &ur'3 !ustaus'3en


as %erfa3ren 9an beginnt am *n#ang (es *rra&s. Iun8c"st wir( za"l[=\ mit za"l[1\ +erglic"en (ann za"l[1\ mit za"l[2\ un( so weiter bis (as @n(e (es *rra&s erreic"t ist. .st eine Ia"l gr6Eer als i"r rec"ter Nac"bar so wer(en (ie bei(en Ia"len +ertausc"t. Durc" (iesen ?rozess (es Fergleic"ens un( %ausc"ens wan(ert (as gr6Ete @lement an (as @n(e (es *rra&s. Nac" (em ersten Durc"gang beste"t (as Gel( somit aus einem sortierten %eil (er O8nge 1 )am rec"ten @n(e (es Gel(es, un( einem unsortierten %eil (er Dr6Ee N-1 wobei N #$r (ie Ia"l (er @lemente ste"t. Der *rra& ist noc" nic"t sortiert le(iglic" (as gr6Ete @lement (es gesamten *rra&s wur(e korrekt in (en sortierten %eil eingeor(net. @s sin( also weitere Durc"g8nge notwen(ig. Nac" (em zweiten Durc"gang ist (as zweitgr6Ete @lement korrekt einsortiert nac" (em (ritten Durc"gang (as (rittgr6Ete un( so weiter. .nsgesamt sin( also N-1 Durc"g8nge er#or(erlic" um (en *rra& zu sortieren. Beispiel @in *rra& soll aus sec"s int-Ia"len beste"en:

= 1 2 ! 2 .n (er oberen Ieile sie"t man (ie Lerte (er *rra&-@lemente in (er unteren Ieile (ie .n(ices (er @lemente. Das erste @lement "at (en .n(e4 = (as sec"ste @lement (en .n(e4 2.
ur'3gang 1

Iu Beginn wer(en (ie bei(en ersten Ia"len miteinan(er +erglic"en - : un( 2. Da (ie : gr6Eer ist als i"r rec"ter Nac"bar muss getausc"t wer(en. Lir er"alten:

= 1 2 ! 2 L8"ren( eben noc" (ie *rra&-@lemente mit (en .n(ices = un( 1 miteinan(er +erglic"en wur(en m$ssen als N8c"stes (ie @lemente Nr. 1 un( 2 $ber'r$#t un( gg#. +ertausc"t wer(en. Da (ie : aber kleiner ist als (ie ; 'assiert nic"ts un( (ie n8c"sten bei(en @lemente wer(en $ber'r$#t (ie ; un( (ie 2. /ier muss wie(er getausc"t wer(en:

= 1 2 ! 2 Nun wer(en (ie ; un( (ie 1 +erglic"en un( getausc"t:

= 1 2 ! 2 Jetzt wer(en (ie bei(en letzten @lemente +erglic"en un( wie(er getausc"t:

2
=

D
1

#
2

1
!

0
-

K
2

Sie se"en selbst (ass (er *rra& noc" keineswegs sortiert ist. Der ganze besc"riebene Forgang war 0a nur (er erste Durc"gang +on m6glic"erweise +ielen Durc"g8ngen. *m @n(e (ieses ersten Durc"gangs ist eines aller(ings sic"er: Die gr6Ete Ia"l (es *rra&s ste"t ganz "inten. .nso#ern ist (er "intere )rec"te, %eil (es *rra&s bereits sortiert:

= 1 2 ! 2 Dieser sortierte %eil kann beim n8c"sten Durc"gang ignoriert wer(en. S'ielen wir auc" (iesen zweiten Durc"gang noc" einmal Sc"ritt #$r Sc"ritt (urc".
ur'3gang #

Die bei(en ersten @lemente (es unsortierten %eils wer(en +erglic"en. Da 2 M : ist 'assiert nic"ts un( (ie bei(en n8c"sten @lemente : un( 2 wer(en +erglic"en un( getausc"t:

= 1 2 ! 2 Nun wer(en (ie bei(en n8c"sten @lemente +erglic"en un( +ertausc"t:

K
2

= 1 2 ! Dann (ie bei(en n8c"sten @lemente:

= 1 2 ! 2 Die : un( (ie ; m$ssen nic"t me"r +erglic"en wer(en (a (as @rgebnis 0a bereits bekannt ist. *m @n(e (ieses zweiten Durc"gangs be#in(en sic" (ie bei(en gr6Eten Ia"len am @n(e (es *rra&s (er sortierte %eil (es *rra&s ist um ein @lement gewac"sen:

2
=

#
1

1
2

0
!

D
-

K
2

6eitere ur'3g4nge

Lie +iele Durc"g8nge brauc"en wir 0etzt um (en *rra& kom'lett zu sortierenU @ine <bergrenze #in(en wir wenn wir uns (ie letzte *bbil(ung ansc"auen. .m (ritten Durc"gang kommt (ie 2 an (ie ?osition !:

= 1 2 ! 2 .m +ierten Durc"gang kommt (ie ! an ?osition 2 wo sie sic" aber auc" sc"on nac" (em (ritten Durc"gang be#un(en "at. Nac" (em (ritten Durc"gang war (er *rra& aber noc" nic"t sortiert (ie 2 un( (ie 1 m$ssen noc" +ertausc"t wer(en also ist au# 0e(en Gall ein +ierter Durc"gang notwen(ig:

= 1 2 ! 2 Nac" (em +ierten Durc"gang be#in(et sic" (ie ! )immer noc", an (er korrekten ?osition. Der unsortierte %eil beste"t nur noc" aus zwei @lementen. .n unserem

Beis'iel sin( (iese bereits sortiert. 1ein t"eoretisc" w8re aber auc" eine Konstellation (enkbar in (er (ie bei(en +or(eren @lemente noc" +ertausc"t wer(en m$ssen. *lso ist ein #$n#ter Durc"gang unter Hmst8n(en n6tig. Hm "erauszu#in(en ob ein #$n#ter Durc"gang notwen(ig ist wir( 1ec"enzeit ben6tigt. Da ist es #ast ein#ac"er un( sc"neller (en #$n#ten Durc"gang ein#ac" o"ne 1$ck#rage (urc"zu#$"ren selbst wenn er nic"ts me"r bringt.

= 1 2 ! 2 So sie"t (er *rra& nac" (em #$n#ten Durc"gang aus. @in sec"ster Durc"gang ist aber nun nic"t me"r notwen(ig (enn (er unsortierte %eil beste"t aus nur noc" einem @lement. Lenn wir 0etzt +erallgemeinern so k6nnen wir be"au'ten: Lenn ein *rra& aus N @lementen beste"t so sin( ma4imal N-1 Durc"g8nge notwen(ig um i"n zu sortieren. Implementations3in:eise Normalerweise setzt man zwei ineinan(er +ersc"ac"telte #or-Sc"lei#en ein wenn man einen Bubblesort im'lementieren m6c"te. Die innere #or-Sc"lei#e (urc"l8u#t (en *rra& +on +orne nac" "inten un( korrigiert e+entuelle Ge"lstellungen (urc" so#ortiges *ustausc"en. Die 8uEere #or-Sc"lei#e ist (a#$r +erantwortlic" (ass (ieser Forgang so o#t au#geru#en wir( bis (er gesamte *rra& sortiert ist.

,ur<'k zu ;olge D

73eorieteil zu ;olge D

8ele'tionsort
8ortieren &ur'3 !us:43len
erster 8ortiers'3ritt Der sortierte %eil ist leer (er unsortierte ent"8lt alle @lemente. .m unsortierten %eil wir( (as kleinste @lement gesuc"t un( mit (em ersten @lement (es unsortierten %eils +ertausc"t. Nac" (em 1. Sc"ritt beste"t (as Gel( somit aus einem sortierten %eil (er O8nge 1 )am linken @n(e (es Gel(es, un( einem unsortierten %eil (er O8nge 4-1. na'3folgen&e 8ortiers'3ritte Das Gel( beste"t aus einem sortierten un( einem nic"tleeren unsortierten %eil. Leiter"in ist 0e(es @lement im sortierten %eil kleiner als 0e(es @lement im unsortierten %eil.

Lie im ersten Sortiersc"ritt wir( (as kleinste Ele%ent des unsortierten =eils mit (em ersten Ele%ent des unsortierten =eils +ertausc"t. Da (as gesuc"te 9inimum gr6Eer ist als alle @lemente (es bereits sortierten %eils be#in(et es sic" nac" (em %ausc" an (er ric"tigen Stelle somit er"6"t sic" (ie Ia"l (er sortierten @lemente um 1 w8"ren( sic" (ie Ia"l (er unsortierten @lemente um eins +erringert. Beispiel Betrac"ten wie (azu mal ein Beis'iel. @in *rra& soll aus sec"s int-Ia"len beste"en:

= 1 2 ! 2 Der gesamte *rra& ist noc" unsortiert.


8'3ritt 1

Lir suc"en nun (ie kleinste Ia"l im unsortierten %eil - (ie 1 - un( +ertausc"en sie mit (er ersten Ia"l (es unsortierten %eils:

= 1 2 ! 2 Der sortierte %eil (es *rra& beste"t 0etzt aus (em ersten @lement (er unsortierte %eil ist ents'rec"en( um ein @lement kleiner gewor(en:

1
=
8'3ritt #

2
1

K
2

#
!

D
-

0
2

Lir suc"en wie(er (ie kleinste Ia"l im unsortierten %eil - (ie 2 - un( +ertausc"en sie mit (er ersten Ia"l (es unsortierten %eils (er 2:

= 1 2 ! 2 Damit ist (er sortierte %eil wie(er um 1 gewac"sen (er unsortierte %eil um 1 gesc"rum'#t:

1
=

#
1

K
2

2
!

D
-

0
2

6eitere 8'3ritte

Die n8c"sten Sc"ritte sollen im Sc"nell(urc"gang (argestellt wer(enK (as Fer#a"ren an sic" sollte 0etzt klar sein. Situation nac" (em !. Sortiersc"ritt:

1
=

#
1

0
2

2
!

D
-

K
2

Der *rra& ist 0etzt sc"on sortiertK aller(ings erkennt (er *lgorit"mus (ies noc" nic"t - wie soll er auc"U Da"er wir( ein +ierter Sortiersc"ritt angesc"lossen. Nac" (em -. Sortiersc"ritt:

= 1 2 ! 2 %"eoretisc" k6nnte (er *rra& immer noc" unsortiert sein also #olgt ein #$n#ter Sortiersc"ritt. Nac" (em 2. Sortiersc"ritt:

= 1 2 ! 2 Da (er unsortierte %eil nur noc" aus einem @lement beste"t ist (er *rra& sortiert. Implementations3in:eise /ier ist nur eine ein#ac"e #or-Sc"lei#e notwen(ig. .n 0e(em Sc"lei#en(urc"gang wir( (ie erste Ia"l (es unsortierten %eils mit (er kleinsten Ia"l (es unsortierten %eils +ertausc"t. Ler beim Bubblesort (as %ausc"en in eine eigene 9et"o(e ausgelagert "at kann (iese 9et"o(e nun wie(er +erwen(en. Die /au'tsc"wierigkeit beim Selectionsort wir( es sein eine 9et"o(e zu sc"reiben welc"e (ie 'osition (er kleinsten Ia"l im unsortierten =eil des Arra-s lie#ert. @s (ar# also nic"t (er gesamte *rra& (urc"suc"t wer(en son(ern nur (er unsortierte %eil.

,ur<'k zu ;olge D

73eorieteil zu ;olge D

Insertionsort
8ortieren &ur'3 &irektes 9inf<gen
erster 8ortiers'3ritt Der sortierte %eil beste"t aus (em ersten @lement (es *rra&s (er unsortierte %eil aus (em 1est-*rra&. 9ac"en wir uns (as wie(er an einem Beis'iel klar:

0
2

= 1 2 ! Der sortierte %eil ist grau markiert.

.m ersten Sortiersc"ritt wir( nun (ie erste Ia"l (es unsortierten %eils genommen un( in (en sortierten %eil

einge#$gt - un( zwar an (er ric"tigen ?osition. Die erste Ia"l (es unsortierten %eils ist (ie 2. Da gilt: 2 M : muss (ie 2 +or (er : einge#$gt wer(en:

= 1 2 ! 2 Der sortierte %eil ist 0etzt um 1 gewac"sen. na'3folgen&e 8ortiers'3ritte .m Drun(e ge"t es genau so weiter wie beim ersten Sortiersc"ritt besc"rieben. *ls n8c"stes muss (ie ; in (en bereits sortierten %eil einge#$gt wer(en. Da (ie ; gr6Eer ist als (ie gr6Ete Ia"l (es sortierten %eils 'assiert gar nic"ts. Oe(iglic" (ie Drenze zwisc"en sortiertem un( unsortiertem %eil wir( um 1 nac" rec"ts +ersc"oben:

= 1 2 ! 2 Nun wir( (ie 2 in (en sortierten %eil einge#$gt. Da sie kleiner ist als (ie kleinste Ia"l (es sortierten %eils wir( (ie 2 noc" +or (er 2 einge#$gt:

1
-

0
2

= 1 2 ! V"nlic"es 'assiert mit (er 1:

2
2

D
!

K
-

0
2

= 1 Hn( mit (er !:

= 1 2 ! 2 welc"e zwisc"en (er 2 un( (er 2 einge#$gt wer(en muss.

Implementierungs3in:eise
Hi'3t-optimaler !lgorit3mus @in erster - nic"t gut $berlegter - @ntwur# zur .m'lementierung (es .nsertionsort k6nnte so ausse"en: Lir ent#ernen (ie erste Ia"l (es unsortierten %eils aus (er Oiste:

2
= wir( zu

D
1

K
2

#
!

1
-

0
2

= 1 2 ! un( (ann #$gen wir (ie Ia"l an (er ric"tigen ?osition im

sortierten %eil wie(er ein:

= 1 2 ! 2 Dieser *lgorit"mus "6rt sic" au# (en erste Blick ganz gut an au# (en zweiten Blick 0e(oc" ist er unn6tig kom'liziert. Das @nt#ernen +on @lementen eines *rra&s ist gar nic"t so ein#ac" (enn es ($r#en 0a keine O$cken im *rra& entste"en. Lir( (as @lement mit (em .n(e4 ' ent#ernt so r$ckt (as @lement 'N1 eine ?osition nac" links wir( also zu @lement '. @nts'rec"en( wir( @lement 'N2 zu 'N1 un( so weiter bis (as @n(e (es *rra&s erreic"t ist. *uc" (as @in#$gen in einen *rra& "at mit 8"nlic"en Sc"wierigkeiten zu k8m'#en. Soll ein @lement an (er ?osition ' in einen *rra& einge#$gt wer(en so m$ssen alle @lemente (ie rec"ts neben ' ste"en um eine ?osition nac" rec"ts au#r$cken. *us @lement ' wir( @lement 'N1 aus @lement 'N1 wir( @lement 'N2 un( so weiter. Besserer !lgorit3mus Lir wollen nun einen besseren *lgorit"mus betrac"ten. Sc"auen wir uns (azu mal #olgen(en *rra& an:

= 1 2 ! 2 Die ! soll in (en sortierten %eil einge#$gt wer(en. Sie wir( zun8c"st mit (em letzten @lement (es sortierten %eils +erglic"en. Nun ist (ie ! kleiner als (ie ; muss also au# 0e(en Gall links +on (er ; einge#$gt wer(en. Da"er tausc"en wir 0etzt (ie ! mit (er ;:

= 1 2 ! 2 Das gleic"e mac"en wir mit (er :. Da (ie ! kleiner ist als (ie : muss (ie ! links +on (er : einge#$gt wer(en. *lso wie(er eine %ausc"o'eration:

= 1 2 ! 2 Hn( 0etzt +ergleic"en wir (ie ! mit (er 2: Lie(er muss getausc"t wer(en:

= 1 2 ! 2 @in letzter Fergleic" - ! mit 2 - kommt zu (em Sc"luss (ass (ie @in#$ge'osition ge#un(en wur(e (enn (ie ! ist nic"t kleiner als (ie 2. Damit ist (ie ! korrekt einsortiert un( (er sortierte %eil kann um 1 wac"sen:

= 1 2 ! 2 Nac" (iesen aus#$"rlic"en *us#$"rungen sollten Sie 0etzt in (er Oage sein eine ents'rec"en(e 9et"o(e zu sc"reiben.

$raxisteil zu ;olge D

,eit(er3alten &er 8ortieralgorit3men


!llgemeines zum Messen (on ,eit(er3alten
Lir wollen nun (as Ieit+er"alten (er (rei Sortieralgorit"men au# ganz ein#ac"e Leise miteinan(er +ergleic"en. @4'erimente mit (er "inneren H"r" (es 1ec"ners "aben sic" in (er Fergangen"eit als nic"t se"r zu+erl8ssig erwiesen (a bei einem 9ultitaskingBetriebss&stem wie Lin(ows 2=== o(er 9ac<S 1= sic" (auern( alle m6glic"en ?rozesse in (ie 3uere kommen (ie (as Ieit+er"alten eines Sortieralgorit"mus beein#lussen. /ier se"en sie einen *uszug aus (er *kti+it8tsanzeige meines 'ri+aten 1ec"ners:

Die Oiste ist noc" +iel l8nger aber mein 9onitor bil(et nur 12:= Ieilen ab...

?nsere Met3o&e ist einfa'3er


Da"er +er#olgen wir "ier einen ra(ikal an(eren *nsatz (er auc" rec"t ein#ac" zu +erste"en un( +or allem zu im'lementieren ist: Lir bauen ein#ac" I8"ler #$r Fergleic"e un( Iuweisungen in (en 3uellte4t (er Klasse Oiste ein un( "aben (ann ein

rec"nerunab"8ngiges 9aE #$r (ie Ieit (ie (er *lgorit"mus #$r (as Sortieren +on Ia"len ben6tigt. Betrac"ten Sie (azu #olgen(en 3uellte4t-*uszug aus (er Klasse Oiste:

Die Klasse Oiste wur(e um zwei *ttribute +ergleic"e un( zuweisungen erg8nzt. Je(es mal wenn im Oau#e (es Bubblesort zwei Ia"len miteinan(er +erglic"en wer(en wir( (as *ttribut +ergleic"e inkrementiert un( bei (er Iuweisung wir( (as *ttribut zuweisungen um @ins er"6"t. Das kann man zum Beis'iel gut bei (er 9et"o(e tausc"en), se"en. @in %ausc"'rozess beste"t aus (rei Iuweisungen (a"er wur(e (er 3uellte4t (er 9et"o(e tausc"en), um (ie *nweisung
zuweisungen NJ !K

erg8nzt welc"e (as *ttribut zuweisungen um ! inkrementiert. @in beson(ers interessanter Gall sin( (ie #or-Sc"lei#en. Betrac"ten wir (en Ko'# einer #or-

Sc"lei#e n8"er:
#or )int i J =K i M 1;K iNN,

Die Oau#+ariable i muss nur am Beginn (er #or-Sc"lei#e (eklariert un( initialisiert wer(en. Da"er muss (as *ttribut zuweisungen um 1 er"6"t wer(en )Ieile -2,. Die Sc"lei#enbe(ingung i M 1; wir( +or 0e(em Sc"lei#en(urc"lau# $ber'r$#t. Da"er muss (as *ttribut +ergleic"e am *n#ang eines 0e(en Sc"lei#en(urc"lau#s um 1 er"6"t wer(en )Ieile -2,. *m @n(e eines 0e(en Sc"lei#en(urc"lau#s wir( (ie Oau#+ariable um 1 er"6"t also wirkt sic" (as au# (ie *nza"l (er Iuweisungen aus )Ieile -5,. .n Ieile -: wir( (as *ttribut +ergleic"e inkrementiert weil 0a als n8c"ste *nweisung eine i#*b#rage kommt. Streng genommen m$ssten auc" 9et"o(en-*u#ru#e 'rotokolliert wer(en weil (iese 0a eben#alls 1ec"enzeit kosten. *us >bersic"tsgr$n(en "abe ic" in meinem 3uellte4t aber (arau# +erzic"tet. >"ung D.2 (5 $unkte) S'eic"ern Sie ."r ?ro0ekt unter einem neuen Namen un( erg8nzen Sie (ann (ie (rei Sortieralgorit"men ents'rec"en(S

%isualisierung &es 8ortierens


Jetzt stellt sic" (ie Grage wie (ie Fisualisierung (er Sortierzeiten er#olgen soll. Dazu +erwen(en wir ein kleines Ja+a-*''let (as ic" ."nen zun8c"st einmal im Bil( zeigen m6c"te:

/ier sie"t man 2= zu#8llig erzeugte Ia"len. @in Sortieralgorit"mus wur(e noc" nic"t au#geru#en. Dieses *''let wur(e aus (er Balken(iagramm-*u#gabe 7.5 weiterentwickelt.

/ier sie"t man (as *''let nac"(em au# (en Button "Bubblesort" geklickt wur(e. Die Ia"len sin( sc"6n au#steigen( sortiert un( oben wer(en (ie Ia"l (er Fergleic"e (ie Ia"l (er Iuweisungen un( (ie Summe bei(er Fariablen angezeigt. G$r 2= Ia"len ben6tigt (er Bubblesort also insgesamt ::; 1ec"eno'erationen )zumin(est ::; 'rotokollierte 1ec"eno'erationen,.

as !pplet
Betrac"ten wir ein#ac" mal (en 3uellte4t (es Ja+a-*''lets:

Die se"r aus#$"rlic"e Bes'rec"ung (es 3uellte4tes wur(e in einge eigene Datei ausgelagert. >"ung D.B (5 $unkte) Bringen Sie (as Ja+a-*''let zum Oau#en. Sie m$ssen auc" (ie 9et"o(e balken(iagramm), (er Klasse Oiste noc" etwas +ersc"6nern. Ium Beis'iel m$ssen (ie Fergleic"e un( Iuweisungen

ausgegeben wer(en. *uEer(em muss (as Diagramm nac" 0e(em Buttonklick neu gezeic"net un( +or"er gel6sc"t wer(en. Das k6nnen Sie auc" in balken(iagramm), einbauen.

>"ung D.C (0 $unkte) @r#assen Sie (as Ieit+er"alten (er (rei Sortieralgorit"men s&stematisc" un( 'rotokollieren Sie es. @s reic"t nic"t aus sic" (ie @rgebnisse +on einem einzigen Bubblesort anzusc"auen. Die Ia"l (er 1ec"eno'erationen "8ngt nat$rlic" +on (er Ferteilung (er Iu#allsza"len ab. @s sin( also me"rere Fersuc"e notwen(ig )min(estens 1=, un( erst (ann kann man 9ittelwerte #$r 0e(en *lgorit"mus bil(en.

>"ung D.D (B $unkte) Bis"er "aben wir nur (as Fer"alten (er (rei *lgorit"men #$r genau 2= Ia"len untersuc"t. .nteressant wir( es aber wenn wir untersc"ie(lic" groEe *rra&s anal&sieren. Lie "8ngt (ie (urc"sc"nittlic"e )S, Sortierzeit +on (er Dr6Ee (es *rra&s abU >berlegen Sie sic" selbst wie Sie 'raktisc" +orge"en wollen un( erstellen Sie (ann eine #un(ierte Dra'"ik: Q-*c"se J Dr6Ee (es *rra&s )1= 2= 2= 1== 2== 2== 1===, R-*c"se J (urc"sc"nittlic"e Sortierzeit )*nza"l (er Iuweisungen N *nza"l (er Fergleic"e 9ittelwert aus me"reren 9essungen,. Sie k6nnen auc" gern ein +6llig neues *''let sc"reiben welc"es all (iese *u#gaben #$r Sie automatisc" erle(igt.

,ur<'k zur ;olge D

73eorieteil zu ;olge D

!nal)se &es ,eit(er3altens &er 8ortieralgorit3men


Bu""lesort
Best-Aase .m g$nstigsten Gall sin( (ie Ia"len bereits sortiert - (er Bubblesort weiE (as aller(ings noc" nic"t )wo"er auc"U,. Da (er Bubblesort-*lgorit"mus keine *"nung (a+on "at (ass (ie

Ia"len bereits sortiert sin( #$"rt er im ersten Durc"lau# N-1 Fergleic"e (urc". Bei einem *rra& (er aus sec"s Ia"len beste"t wir( er also #$n# Fergleic"e (urc"#$"ren. *ustausc"o'erationen m$ssen nic"t (urc"ge#$"rt wer(en (a es bei einem sortieren *rra& nic"ts auszutausc"en gibt. *lso beste"t (er 1ec"enau#wan( nur aus (en 2 N - N ! N 2 N 1 J 12 Fergleic"en. 6orst-Aase .m (enkbar ung$nstigsten Gall sin( (ie Ia"len eben#alls sortiert aller(ings ste"t (ie gr6Ete Ia"l +orne ge#olgt +on (er zweitgr6Eten un( so weiter. *uc" "ier kommt (er Bubblesort bei sec"s Ia"len mit 12 Fergleic"en aus genauso wie im Best-Case-Gall. *ller(ings m$ssen (ie Ia"len nac" 0e(em Fergleic" +ertausc"t wer(en also kommen 12 %ausc"o'erationen bzw. -2 1ec"eno'erationen "inzu )0e(er %ausc" beste"t 0a aus (rei Sc"ritten,. .nsgesamt sin( wir #$r sec"s Ia"len also bei 5= 1ec"eno'erationen. Hormal-Aase .m Normal#all ist (er *rra& we(er au#steigen( noc" absteigen( sortiert son(ern (ie Ia"len sin( nac" (em Iu#alls'rinzi' organisiert. Lie o#t 0etzt getausc"t wer(en muss kann man nur grob absc"8tzen. Fielleic"t im Sc"nitt bei 0e(em zweiten Fergleic"U .n (iesem Gall "8tten wir bei sec"s Ia"len 12 Fergleic"e un( 7 o(er : %ausc"o'erationen also !5 o(er !; 1ec"eno'erationen. Gerleitung einer ;ormel Lie k6nnte man nun eine Gormel #$r (ie Berec"nung (er 1ec"eno'erationen beim Bubblesort "erleitenU Betrac"ten Sie (azu (ie #olgen(e *bbil(ung:

Die Ia"l (er Fergleic"e ergibt sic" nac" (er )"o##entlic", aus (er 9at"ematik bekannten Gormel #$r Summen (er *rt 1 N 2 N ! N ... N N. G$r N J 5 ergibt sic" (araus (er Lert 12 was wir 0a auc" sc"on bei unseren Beis'ielen weiter oben #estgestellt "atten. Lenn wir (en Best-Case un( (en Lorst-Case-Gall einmal +ernac"l8ssigen ne"men wir an (ass bei 0e(em zweiten Fergleic" getausc"t wer(en muss. Die Ia"l (er %ausc"+org8nge (er "*ustausc"e" liegt (ann bei (er /8l#te (er Ia"l (er Fergleic"e. G$r (ie Ia"l (er 1ec"eno'erationen muss aller(ings (ie Ia"l (er *ustausc"e mit (rei multi'liziert wer(en )(rei Iuweisungen 'ro *ustausc",. So erkl8rt sic" (ann (ie Gormel #$r (ie Ia"l (er 1ec"eno'erationen unten im Bil(. G$r N J 5 k8men wir (amit au# !7 2 1ec"ensc"ritte. Das ist genau (er 9ittelwert zwisc"em (em Best-Case- un( (em LorstCase-Gall. .c" 'ers6nlic" bin lei(er ein Ske'tiker un( Naturwissensc"a#tler weniger 9at"ematiker. .c" muss solc"e Gormeln immer e4'erimentell'raktisc" $ber'r$#en un( (a"er "abe ic" mir mal (ie *rbeit gemac"t

#$r sec"s Ia"len (ie 1ec"eno'erationen Sc"ritt #$r Sc"ritt zu ermitteln. /ier (er erste Fersuc":

Die ermittelte Ia"l (er <'erationen liegt (eutlic" $ber (em @rgebnis (er GormelS Na 0a kann mal 'assieren. *lso "abe ic" einen zweiten Fersuc" mit etwas an(eren Ia"len lau#en lassen:

/ier liegt (ie Ia"l (er <'erationen etwas unter (er berec"neten Ia"l. Dies ist 0etzt nat$rlic" noc" kein Beweis (a#$r (ass (ie oben au#gestellte Gormel stimmt aber mir 'ers6nlic" reic"t es als Best8tigung aus. *ber man soll 0a immer kritisc" sein also (ac"te ic" mir rec"erc"ierZ (oc" mal im .nternet zum %"ema "Ieit+er"alten (es Bubblesort" wobei mir gleic" +on Doogle +orgesc"lagen wur(e ob ic" nic"t lieber nac" "Bubbelsort" suc"en wolle. So +iel (azu. Dann "abe ic" mic" (oc" etwas ersc"reckt als ic" (ie Suc"ergebnisse sa":

@igentlic" wollte ic" au# an(eren Seiten suc"en un( nic"t (auern( au# meinen eigenen... %ollS *u# (er ersten Seite )www."ib-wien.at, ste"t $ber"au't keine Gormel meine eigenen Seiten kenne ic" sc"on )zumin(est ober#l8c"lic", (ie n8c"ste Gun(stelle ge"6rt zu einem Gorum wo (em Gragesteller auc" nic"t weiterge"ol#en wer(en konnte (ie n8c"ste Gun(stelle ist eine geklaute Ko'ie meiner eigenen /ome'ageS Fielleic"t sollte ic" (en Oeuten mal eine *bma"nung sc"icken an(ererseits #$"lt man sic" nat$rlic" gesc"meic"elt wenn (ie eigenen Seiten so gut sin( (ass sie geklaut wer(en. *u# (er n8c"sten Seite ge"t es auc" nic"t um (as Ieit+er"alten un( so weiter. .c" "abe 0etzt keine Oust me"r im .nternet zu suc"en. Lozu gibt es gute Gac"b$c"erU Dann will ic" mal gleic" in (ie Follen ge"en un( in (ie "Bibel" (er *lgorit"mik gucken: "%"e *rt o# Com'uter ?rogramming" +on Donal( @.

KNH%/ Folume ! "Sorting un( Searc"ing" Secon( @(ition. *u# Seite 1=; #in(et man #$r (ie Ia"l (er Fergleic"e (ie Gormel 1P2 )N2 - N,. Denau (ie gleic"e Gormel also wie unser "9ustersc"$ler" weiter oben entwickelt "at. *lso Oeute ganz e"rlic" - ic" "abe +or"er nic"t in (en KNH%/ geguckt son(ern (ie Gormel selbst "ergeleitet - was 0a auc" nic"t so beson(ers sc"wer ist. G$r (ie Ia"l (er *ustausc"o'erationen #in(et KNH%/ (ie Gormel min J = a+e J 1P- )N2 - N, ma4 J 1P2 )N2 - N, Das ents'ric"t +6llig (en bereits oben angestellten >berlegungen. >"ung D.K (0 $unkte) Stellen Sie au# +ergleic"bare Leise (ie Gormel #$r (as Ieit+er"alten (es Selectionsort-*lgorit"mus au#S

>"ung D.1E (0 $unkte) Stellen Sie au# +ergleic"bare Leise (ie Gormel #$r (as Ieit+er"alten (es .nsertionsort-*lgorit"mus au#S

>"ung D.11 (5 $unkte) Berec"nen Sie (ie Ia"l (er (urc"sc"nittlic"en 1ec"eno'erationen (ie #$r (as Sortieren +on 1== Ia"len nac" (en (rei genannten *lgorit"men notwen(ig sin(. Fer8n(ern Sie (ann ."r Ja+a-*''let (as Sie zum ?ro0ekt Ieit+er"alten +on Sortieralgorit"men 'rogrammiert "aben. @rweitern Sie (as ?ro0ekt au# 1== Ia"len un( $ber'r$#en Sie (ann (ie (rei au#gestellten Gormeln e4'erimentell. Gassen Sie ."re @rgebnisse zusammen un( geben Sie Dr$n(e #$r ein e+entuelles Nic"t$bereinstimmen an.

,ur<'k zur ;olge D