Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Einführung in die Programmierung Datensammlung

Ähnliche Präsentationen


Präsentation zum Thema: "Einführung in die Programmierung Datensammlung"—  Präsentation transkript:

1 Einführung in die Programmierung Datensammlung
Fakultät für Wirtschaftswissenschaften Einführung in die Programmierung Datensammlung Uwe Lämmel

2 Inhalt Verwalten mehrerer Objekte: Sammlungen (Collections) ArrayList
Arbeiten mit Sammlungen: Wiederholung (Iteration) Iteratoren Schleifen ( for–each, while–do, for)

3 Sammlungen Typische Aufgabe der Wirtschaftsinformatik:
Verwalten mehrerer (beliebig vieler) Objekte : Personal Termine Aufträge Rechnungen Aktionen: Elemente hinzufügen Elemente entfernen Element suchen

4  Machen Sie sich mit dem Notizbuch-Projekten vertraut!!
Beispiel: Notizbuch Anforderungen / Erwartungen: Notizen speichern keine Begrenzung für die Anzahl Anzahl gespeicherter Notizen angeben Einzelne Notizen anzeigen Alle Notizen anzeigen  Machen Sie sich mit dem Notizbuch-Projekten vertraut!!

5 Klassen-Bibliotheken
nicht alles muss neu programmiert werden: es gibt nützliche, bereits "fertige" Klassen: Java – API: Application Programming Interface Bibliothek in Java: package java.util package bietet Klassen für Objekt-Sammlungen Wir nutzen Klasse ArrayList  Machen Sie die Java – API für sich verfügbar! Schauen Sie sich die Klasse ArrayList an!

6 Klasse Notizbuch import java.util.ArrayList; /** * ... */
public class Notizbuch { // Speicher für beliebige Anzahl von Notizen private ArrayList <String> notizen; * Initialisierung für ein Notizbuch public Notizbuch( ) { notizen = new ArrayList<String>(); } // Konstruktor ... } // Notizbuch erst ab Java 1.5

7 Klasse ArrayList es wird definiert: Typ der Sammlung: ArrayList
Typ der Elemente: <String> Name der Sammlung: notizen private ArrayList <String> notizen; ArrayList<String> – "Array-Liste von Zeichenketten"

8  Was passiert beim Einfügen einer weiteren Notiz?
Objekt-Struktur  Was passiert beim Einfügen einer weiteren Notiz?

9 Benutzen der Sammlung class Notizbuch {
private ArrayList <String> notizen; ... public void speichereNotiz(String notiz) { notizen.add(notiz); } // speichereNotiz public int anzahlNotizen() { return notizen.size(); } // anzahlNotizen } // Notizbuch Hinzufügen einer Notiz Gibt Anzahl der Elemente in der ArrayList zurück add, size : Methoden der Klasse ArrayList, siehe API

10 Gültigkeit des Index prüfen!
Ermitteln einer Notiz public void zeigeNotiz(int notiznummer){ if ( notiznummer >= 0 && notiznummer < anzahlNotizen() ) { System.out.println(notizen.get(notiznummer)); } // if } // zeigeNotiz Gültigkeit des Index prüfen! vordefinierte Methode! Parameter: Aufruf einer Methode!

11 Zusammenfassung Elemente können hinzugefügt /entfernt werden
Jedes Element hat eine Nummer / Index: 0, 1 … Wichtige Methoden der Klasse ArrayList sind: add, get, remove, size ArrayList ist ein parametrisierter/generischer Datentyp ArrayList-Objekte speichern beliebig viele Objekte Java - API enthält packages mit vordefinierten Klassen: java.util.ArrayList, java.lang.String, java.lang.System

12 Wiederholung = Iteration
oft sind Aktionen mehrfach auszuführen: z.B. Ausgabe aller Notizen des Notizbuchs die meisten Programmiersprachen bieten: Schleifen–Anweisungen (loop statements) mehrere Schleifen-Formen in Java. beginnen mit for–each–Schleife.

13 Anweisungen, die wiederholt werden
for–each–Schleife Schlüsselwort for Schleifen-Kopf for ( ElementTyp element : Sammlung) { Schleifen-Körper } // for-each Anweisungen, die wiederholt werden Bedeutung: Für jedes element aus der Sammlung, führe die Anweisungen im Schleifen-Körper aus.

14 for each note in notes, print out note
for–each–Beispiel /** * Gib alle Notizen eines Notizbuchs aus */ public void notizenAusgeben() { for(String notiz : notizen) { // Schleifen-Kopf System.out.println(notiz); // Schleifen-Körper } // for } //notizenAusgeben for each note in notes, print out note

15 while–Schleife while(bedingung) { Schleifen-Körper }//while
Schlüsselwort while Schleifenkopf: Bedingung while(bedingung) { Schleifen-Körper }//while Anweisungen, die wiederholt werden Bedeutung: Solange die bedingung wahr (true) ist, führe die Anweisungen im Schleifen-Körper aus.

16 while-Schleife: Beispiel
/** * Gib alle Notizen eines Notizbuchs aus */ public void notizenAusgeben() { int index = 0; while(index < notizen.size()) { System.out.println(notizen.get(index)); index++; } //while }//notizenAusgeben um 1 erhöhen Bedeutung: while the value of index is less than the size of the collection, print the next note, and then increment index

17 while (Bedingung) { Anweisungen }
while–Schleife while (Bedingung) { Anweisungen } while-Schleife ist anfangsgesteuert: Bedingung wird zuerst geprüft  mind. einmal! wird benutzt, falls: die Zahl der Durchläufe unbestimmt und Test der Bedingung vor dem Bearbeiten des Körpers erforderlich: z.B. in Sammlungen: Gibt es überhaupt ein Element? Anweisungen im Schleifen–Körper müssen Bedingung beeinflussen, z.B. i++;

18 for–each versus while for–each: einfacher aufzuschreiben
sicher: stoppt garantiert! stets für alle Elemente der Sammlung while: nicht notwendig, die gesamte Sammlung zu bearbeiten kann auch ohne Sammlung benutzt werden Gefahr unendlicher Wiederholungen!

19 while – ohne eine Objektsammlung
Gib alle geraden Zahlen zwischen 0 und 30 aus. Berechne alle Teiler einer Zahl. Bestimme die Quersumme einer Zahl. Bestimme den größten gemeinsamen Teiler zweier Zahlen.

20 Suche in einer Sammlung von Objekten
int index = 0; // Nr. des aktuellen Elements boolean gefunden = false; // schon gefunden? // index < Größe der Sammlung UND noch nicht gefunden while(index < notizen.size() && !gefunden) { String notiz = notizen.get(index); // aktuelles Element if(notiz.contains(suchString)) { // siehe API: lang.String gefunden = true; // gefunden: Zeichenkette ist enthalten } //if else { index++; // nächster Index=>nächstes Element } //else } //while // Entweder gefunden oder gesamte Sammlung durchsucht if(!gefunden) index = –1; // index für nicht gefunden /** * Kopf der Methode (Signatur) sucheText suchString Zeichenkette nach der gesucht wird Index der Notiz, die text enthält, oder –1 */ public int sucheNotiz( String suchString ) { return index; } // sucheNotiz

21 Schleife mittels Iterator-Objekt
Iterator<Elementtyp> it = meineSammlung.iterator(); while(it.hasNext()) { ElementTyp el = it.next(); // nächstes Element Anweisungen "machen etwas" mit Element el } //while Beispiel: public void notizenAusgaben() { Iterator<String> it = notizen.iterator(); while ( it.hasNext() ) { String el = it.next(); System.out.println(el); } //while } //notizenAusgeben

22 Schleifen und Objektsammlungen
for–each: wenn alle Elemente bearbeitet werden while–Schleife: falls nur einige Elemente bearbeitet werden wird durch Bedingung gesteuert für Wiederholungen ohne Sammlungen Iterator–Objekt: falls nur einige Elemente zu bearbeiten insbesondere für Sammlungen ohne Index alle Sammlungen (collections) der API stellen Iterator bereit Iteration / Schleife ist wichtiges Programmier-Muster (pattern)

23 Array: Sammlungen fester Größe
häufig Obergröße für Objekt-Sammlungen bekannt Programmiersprachen bieten: spezielle Konstruktion: array spezielle Schreibweise (Syntax): typ[ ] bzw. element[index] Arrays in Java speichern Objekte oder Werte einfacher Datentypen .

24 feste Anzahl von Elementen eines Typs
Array feste Anzahl von Elementen eines Typs Arrays sind Objekte: mit new-Methode erzeugen Elemente eines Array beliebig aber fest: Attribut length gibt Anzahl der Elemente an: System.out.writeln(feld.length); // ausgegeben wird 6 Zugriff: int[ ] feld = new int[6]; 1 2 3 4 5 feld[0] = 17; feld[1] = 35; for(int i=0; i<feld.length; i++) feld[i]=2*i+1;

25 Array: Arbeitsweise Deklaration: int[ ] folge; int zfolge; // Zeiger Füllstand Erzeugung: folge = new int[100]; Initialisierung: for(int i=0;i<max;i++) folge[i]=0; Zugriff nur zwischen 0…max Index möglich! Lesen: a = folge[z]; System.out.println(folge[2]); for(int i=1; i<zfolge; i++) summe +=folge[i]; Schreiben: folge[z] = b;

26 Weblog–Analyse Auswertung der Zugriffe je Stunde vereinfacht
Zugriffe = Eingabe der Stunde durch Nutzer: Eingabe 14 = ein Zugriff in 14:00 – 14:59 notwendig: Sammlung für 24 Werte (int) Methode zum Einlesen von Werten

27 Array zugriffeInStunde

28 Klasse Weblog class Weblog { // Instanz-Variabeln
private int[ ] zugriffInStunde; private int maxSt; public Weblog () { maxSt = 24; zugriffInStunde = new int[maxSt]; for(int i=0; i<maxSt; i++) zugriffInStunde[i] = 0; } //Weblog public int getZugriffInStunde(int st) { return zugriffInStunde[st];} public int summeZugriffe(){ … }

29 Methode Einlesen public void liesZugriffe() { wiederhole:
Sag Nutzer, dass Stunde einzugeben ist. Lies Stunde ein. Wenn gültige Stunde, dann erhöhe Anzahl Zugriffe in der Stunde um eins. bis Ende (Nutzer hat –1 eingegeben) } //liesZugriffe

30 Ein–, Ausgabe: Klasse LineIO
Sammlung von Methoden für Ein-, Ausgabe: write, writeln für String, int, double, … io.writeln("zahl= "+z); formatierte Ausgabe: io.write(betrag,7,2); Eingabe für Sring, double, int, char: zahl = io.readInt("Bitte Zahl eingeben: "); KEIN Bestandteil der API! Datei LineIO.class muss im Verzeichnis stehen

31  Schauen Sie sich LineIO.java an, welche Methoden es gibt!
Nutzung von LineIO LineIO.java kopieren in BlueJ: Edit > Add class from file E/A-Objekt in Methode erzeugen: LineIO io = new LineIO(); Methoden nutzen: st = io.readInt(" Zahl eingeben"); werden Eingaben programmiert, dann: public void einlesen() throws Exception …  Schauen Sie sich LineIO.java an, welche Methoden es gibt!

32 Methode Einlesen public void liesZugriffe() throws Exception {
IntIO io = new IntIO(); // Ein- Ausgabe-Objekt int st = -1; // einzulesende Stunde io.writeln(" Weblog: Eingabe der Stunden. Ende mit –1 "); do { st=io.readInt("Zugriff in Stunde: "); if(st>=0 && st<=maxSt) { // Test auf gueltige Stunde zugriffInStunde[st]++; // Anzahl Zugriffe erhöhen } else if(st!= -1){ // falls keine Stunde (s.o.) und kein Ende io.writeln("Ungueltige Stundenangabe!"); } //if while(st!=-1); // wiederhole solange nicht Ende } //liesZugriffe

33 Iteration: do–while–Schleife
do { Anweisungen } while (Bedingung); do { zahl = io.readInt("Zahl: "); if (zahl >0) summe = summe +zahl; } while (zahl != -1); endgesteuert eingesetzt, falls: Zahl der Durchläufe unbestimmt ist, und Körper mindestens einmal durchlaufen werden muss. typisch: Nutzerdialog Interpretation: Führe die Anweisungen wiederholt aus, solange die Bedingung wahr ist.

34 Iteration: for–Schleife
for (Initialisierung; Bedingung; EndeAnweisung) { Anweisungen } //for int fak = 1; for (int i=1;i<=zahl; i++) { fak = fak * i; } //for anfangsgesteuert eingesetzt, falls: Zahl der Schleifendurchläufe bekannt ist und durch eine Zählvariable gezählt werden kann Interpretation: Führe die Initialisierung aus, führe dann die Anweisungen des Körpers wiederholt aus, solange die Bedingung gilt. Nach jeder Ausführung des Schleifenkörpers wird die EndeAnweisung einmal ausgeführt.

35 Beispiel for(int index = 0; index < zugriffeInStunden.length; index++) { io.writeln(index + ": " + zugriffeInStunden[index]); } //for Wirkung identisch! int index = 0; while(index < zugriffeInStunden.length) { io.writeln(index + ": " + zugriffeInStunden [index]); index++; } //while

36 Zusammenfassung Sammlung
Arraylist Sammlung: Elemente (Objekte) mit Index 0,1,… import java.util.Arraylist; API enthält die Infos über Methoden wichtige Methoden: add, delete, get, size Arrays für Sammlungen mit fester Obergrenze Sammlung: Elemente mit Index 0,1,… Elemente sind Objekte oder einfache Datentypen Arrays sind Objekte  mit new erzeugen haben spezielle Syntax: eckige Klammern [ ]

37 Zusammenfassung – Schleifen
while(!gefunden) { … } do { … } while(!ende); for(Notiz n:notizen) … //for-each for(int i= 0,i<zfolge, i++) { folge[i] … } // iterator: Iterator<Notiz> it = notizen.iterator(); while (it.hasNext()) …

38 Aufgabe - Sieb des Eratosthenes
Zahl n einlesen Array mit Elementen von 0..n erzeugen; Alle Komponenten auf true setzen Mit 2 beginnen bis n: alle Vielfachen im Array „streichen“, d.h. auf false setzen Ausgabe der Primzahlen zwischen 0..n  Programmieren Sie den Algorithmus in einer ausführbaren Klasse (main-Methode)

39 Aufgabe Studenten–Team
Felder/Array kann beliebigen Typ enthalten! Student[ ] team; int zst; 1 2 3 4 5 team = new Student[anzahl]; team[zst] = new Student(name, matrikel); zst++;  Entwickeln Sie eine Klasse Team, in der ein Studenten–Team verwaltet werden kann. Benutzen Sie eine Klasse Student und verwalten Sie die Team-Mitglieder in einem Array! Die maximale Teamgröße wird beim Erzeugen eines Teams festgelegt.

40 Ende


Herunterladen ppt "Einführung in die Programmierung Datensammlung"

Ähnliche Präsentationen


Google-Anzeigen