Einige Methoden der Klasse ArrayList
Transcription
Einige Methoden der Klasse ArrayList
Einige Methoden der Klasse ArrayList<Typ> MethoParameter Ergebnis Beschreibung denname add Typ fügt übergebenes Element hinten an add int, Typ fügt übergebenes Element an angegebener Position ein get int Typ gibt Element an gefragter Position zurück remove int Typ entfernt Element an gegebener Position (ist auch Ergebnis) set int, Typ Typ ersetzt Objekt an angegebener Position, gibt altes Objekt zurück size int gibt Anzahl der Elemente Grundlagen der Programmierung Stephan Kleuker 267 elementare Datentypen und Klassen • Bei ArrayList<Typ> muss Typ eine Klasse sein • Trick: zu jedem elementaren Datentyp gibt es Klasse • einfache Umwandlung Grundlagen der Programmierung Stephan Kleuker 268 Spielerei mit ArrayList import java.util.ArrayList; java.util.ArrayList; public class ListenSpielerei { public void spielen(){ ArrayList<Integer ArrayList<Integer> <Integer> zahlen = new ArrayList<Integer>(); ArrayList<Integer>(); EinUndAusgabe io = new EinUndAusgabe(); EinUndAusgabe(); io.ausgeben("1: io.ausgeben("1: "+zahlen+"\ "+zahlen+"\n"); zahlen.add(42 zahlen.add(42); (42); zahlen.add(41 zahlen.add(41); (41); io.ausgeben("2: io.ausgeben("2: "+zahlen+"\ "+zahlen+"\n"); 1: [] zahlen.add(1,23 zahlen.add(1,23); (1,23); 2: [42, 41] io.ausgeben("3: io.ausgeben("3: "+zahlen+"\ "+zahlen+"\n"); 3: [42, 23, 41] 4: 41 io.ausgeben("4: io.ausgeben("4: "+zahlen.get "+zahlen.get(2)+" zahlen.get(2)+"\ (2)+"\n"); 5: [67, 23, 41] zahlen.set(0 zahlen.set(0, (0, 67); 6: [23, 41] io.ausgeben("5: io.ausgeben("5: "+zahlen+"\ "+zahlen+"\n"); 7: 2 zahlen.remove(0 zahlen.remove(0); (0); io.ausgeben("6: io.ausgeben("6: "+zahlen+"\ "+zahlen+"\n"); io.ausgeben("7: io.ausgeben("7: "+zahlen.size "+zahlen.size()+" zahlen.size()+"\ ()+"\n"); Grundlagen der Programmierung Stephan Kleuker } } 269 ArrayList genauer ArrayList<Integer ArrayList<Integer> <Integer> zahlen = new ArrayList<Integer>(); ArrayList<Integer>(); zahlen.add(42 zahlen.add(42); (42); zahlen.add(41 zahlen.add(41); (41); Position: 0 1 zahlen.add(1,23); zahlen.add(1,23); Inhalt: 42 41 Position: 0 42 1 23 2 41 0 67 1 23 2 41 0 23 1 41 Inhalt: zahlen.set(0 zahlen.set(0, (0, 67); 67); Position: Inhalt: zahlen.remove(0 zahlen.remove(0); (0); Position: Inhalt: Grundlagen der Programmierung Stephan Kleuker 270 ArrayList mit Referenzen (wie üblich) (1/2) import java.util.ArrayList; java.util.ArrayList; public class DatumsListe{ DatumsListe{ public void analyse(){ analyse(){ EinUndAusgabe io = new EinUndAusgabe(); EinUndAusgabe(); ArrayList<Datum> ArrayList<Datum> daten = new ArrayList<Datum>(); ArrayList<Datum>(); Datum d1 = new Datum(1,1,2013); Datum d2 = new Datum(1,1,2014); daten.add(d1); daten.add(d1); daten.add(d2); daten.add(d2); daten.add(d1); daten.add(d1); Datum tmp = daten.get(0); daten.get(0); io.ausgeben( io.ausgeben(tmp.toString()+" tmp.toString()+"\ ()+"\n"); Datum tmp2 = daten.get(1); daten.get(1); io.ausgeben(tmp2+" io.ausgeben(tmp2+"\ (tmp2+"\n"); io.ausgeben( io.ausgeben(daten.get(2)+" daten.get(2)+"\ (2)+"\n"); d1.setTag(9); tmp.setMonat(9); tmp.setMonat(9); daten.get(0). daten.get(0).setJahr (0).setJahr(99); setJahr(99); io.ausgeben( io.ausgeben(daten.get(2)+" daten.get(2)+"\ (2)+"\n"); Stephan Kleuker Grundlagen } der Programmierung } 271 ArrayList mit Referenzen (wie üblich) (2/2) ArrayList<Datum> ArrayList<Datum> daten = new ArrayList<Datum>(); ArrayList<Datum>(); Datum d1 = new Datum(1,1,2013); Datum d2 = new Datum(1,1,2014); daten.add(d1 daten.add(d1); (d1); daten.add(d2 daten.add(d2); (d2); daten.add(d1 daten.add(d1); (d1); tag 1 d1 monat 1 0 jahr 2013 daten 1 tag 1 monat 1 jahr 2014 2 d2 Grundlagen der Programmierung Stephan Kleuker 272 Zahlensammlung zurückgeben • Aufgabe: Alle Zahlen von 0 bis einschließlich einem Grenzwert zurück geben • in der Klasse ErsteSchleifen public ArrayList<Integer> zahlenBisZurueckgeben( ( ArrayList<Integer> zahlenBisZurueckgeben Integer grenze){ ArrayList<Integer ArrayList<Integer> <Integer> ergebnis = new ArrayList<Integer>(); ArrayList<Integer>(); Integer zaehler = 0; while( while(zaehler <= grenze){ ergebnis.add( ergebnis.add(zaehler); zaehler); zaehler = zaehler + 1; } return ergebnis; ergebnis; } Grundlagen der Programmierung Stephan Kleuker 273 Ausführung (z. B. in Code Pad) Grundlagen der Programmierung Stephan Kleuker 274 Polygonzug – durch Linien verbundene Punkte 1/5 public class Punkt { private int x; private int y; public Punkt(int Punkt(int x, int y){ this.x = x; this.y = y; } public public public public int getX() getX() {return this.x;} this.x;} void setX( setX(int x) {this.x = x;} x;} int getY() getY() {return this.y;} this.y;} void setY( setY(int y) {this.y = y;} public void verschieben(int verschieben(int dx, int dy){ dy){ this.x = this.x + dx; this.y = this.y + dy; dy; } // neu! } Grundlagen der Programmierung Stephan Kleuker 275 Polygonzug – durch Linien verbundene Punkte 2/5 import java.util.ArrayList; java.util.ArrayList; public class Polygonzug{ private ArrayList<Punkt ArrayList<Punkt> punkte; <Punkt> punkte; private boolean geschlossen = false; false; public Polygonzug(){ this.punkte = new ArrayList<Punkt>(); ArrayList<Punkt>(); } public void setGeschlossen( setGeschlossen(boolean neu){ this.geschlossen = neu; } public void hinzufuegen(Punkt hinzufuegen(Punkt p){ this.punkte.add(p); this.punkte.add(p); } Grundlagen der Programmierung Stephan Kleuker 276 Polygonzug – durch Linien verbundene Punkte 3/5 public void anzeigen(Interaktionsbrett ib){ ib){ int anzahl = this.punkte.size(); this.punkte.size(); int zaehler = 0; while( while(zaehler < anzahlanzahl-1){ Punkt start = this.punkte.get( this.punkte.get(zaehler); zaehler); Punkt ende = this.punkte.get(zaehler+1); this.punkte.get(zaehler+1); ib.neueLinie( ib.neueLinie(start.getX(), start.getX(),start.getY (),start.getY() start.getY() ,ende.getX(), ende.getX(),ende.getY (),ende.getY()); ende.getY()); zaehler = zaehler + 1; } if(geschlossen if(geschlossen == true && anzahl > 0){ Punkt anfang = this.punkte.get(0); this.punkte.get(0); Punkt ende = this.punkte.get( this.punkte.get(this.punkte.size() this.punkte.size()()-1); ib.neueLinie( ib.neueLinie(anfang.getX(), anfang.getX(),anfang.getY (),anfang.getY() anfang.getY() ,ende.getX(), ende.getX(),ende.getY (),ende.getY()); ende.getY()); } } der Programmierung Stephan Kleuker 277 Grundlagen Polygonzug – durch Linien verbundene Punkte 4/5 public void loeschenAnPosition( loeschenAnPosition(int pos){ pos){ this.punkte.remove( this.punkte.remove(pos); pos); } public void verschieben(int verschieben(int deltaX, deltaX, int deltaY){ deltaY){ int zaehler = 0; while( while(zaehler < this.punkte.size()){ this.punkte.size()){ Punkt p = this.punkte.get( this.punkte.get(zaehler); zaehler); p.verschieben( p.verschieben(deltaX,deltaY); deltaX,deltaY); zaehler = zaehler + 1; } } } Grundlagen der Programmierung Stephan Kleuker 278 Polygonzug – durch Linien verbundene Punkte 5/5 public class Polygonzugnutzung{ public void beispiel(){ beispiel(){ Interaktionsbrett ib = new Interaktionsbrett(); Polygonzug pg = new Polygonzug(); pg.hinzufuegen( pg.hinzufuegen(new Punkt(10,10)); pg.hinzufuegen( pg.hinzufuegen(new Punkt(20,30)); pg.hinzufuegen( pg.hinzufuegen(new Punkt(30,10)); pg.anzeigen( pg.anzeigen(ib); ib); pg.verschieben(5,40); pg.verschieben(5,40); pg.anzeigen( pg.anzeigen(ib); ib); pg.loeschenAnPosition(1); pg.loeschenAnPosition(1); pg.anzeigen( pg.anzeigen(ib); ib); } } Grundlagen der Programmierung Stephan Kleuker 279 Erweiterung: Polygonzug erstellen (1/2) • in Polygonzugnutzung: public Polygonzug zickzack(int zickzack(int anzahl){ anzahl){ Polygonzug ergebnis = new Polygonzug(); int zaehler = 0; boolean zick = true; true; while (zaehler < anzahl){ anzahl){ if(zick if(zick == true){ true){ ergebnis.hinzufuegen( ergebnis.hinzufuegen(new Punkt(10+zaehler*10,5)); } else { ergebnis.hinzufuegen( ergebnis.hinzufuegen(new Punkt(10+zaehler*10,25)); } zick = !zick; zaehler = zaehler+1; } return ergebnis; ergebnis; } Grundlagen der Programmierung Stephan Kleuker 280 Erweiterung: Polygonzug erstellen (2/2) public void beispiel2(){ Interaktionsbrett ib = new Interaktionsbrett(); Polygonzug pg = zickzack(31); pg.anzeigen( pg.anzeigen(ib); ib); pg.verschieben(0,40); pg.verschieben(0,40); pg.setGeschlossen( pg.setGeschlossen(true); true); pg.anzeigen( pg.anzeigen(ib); ib); } Grundlagen der Programmierung Stephan Kleuker 281 Erweiterung: Punkte auswählen (1/2) • in Polygonzug: neuer Polygonzug mit Punkten an 0-ter, n-ter, 2*n-ter, … Position public Polygonzug nurNtePunkte( nurNtePunkte(int n){ Polygonzug ergebnis = new Polygonzug(); int zaehler = 0; while( while(zaehler < this.punkte.size()){ this.punkte.size()){ Punkt p = this.punkte.get( this.punkte.get(zaehler); zaehler); ergebnis.hinzufuegen(p); ergebnis.hinzufuegen(p); zaehler = zaehler + n; } return ergebnis; ergebnis; } Grundlagen der Programmierung Stephan Kleuker 282 Erweiterung: Punkte auswählen (2/2) • in Polygonzugnutzung: public void beispiel3(){ Interaktionsbrett ib = new Interaktionsbrett(); Polygonzug pg = zickzack(31); pg.anzeigen( pg.anzeigen(ib); ib); Polygonzug pg2 = pg.nurNtePunkte(3); pg.nurNtePunkte(3); pg2.verschieben(0,30); pg2.anzeigen(ib pg2.anzeigen(ib); ib); pg.verschieben(0,60); pg.verschieben(0,60); pg.anzeigen( pg.anzeigen(ib); ib); } Grundlagen der Programmierung Stephan Kleuker 283