informatik - thm · 2012. 1. 14. · informatik datenstrukturen und dateien th letschert. seite 2...
TRANSCRIPT
![Page 1: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/1.jpg)
Seite 1
Informatik
Datenstrukturen und Dateien
Th Letschert
![Page 2: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/2.jpg)
Seite 2
Datenstrukturen
Datenstrukturen Sprachelemente zur Speicherung von vielen Daten
Datentyp vs DatenstrukturDatentyp
Format + Operationen für ein Datum z.B. ganze Zahl im 32 Bit 2er Komplement Format, Zeichen in einem Byte in ASCII-Codierung
DatenstrukturKollektion von Speicherstellen die zusammen eine (komplexe) Information ausmachen
Vorgegebene Strukturen (Beispiele)Feld (Array) Daten unter einem Index gespeichert Liste Daten als Folge von Werten gespeichert Abbildung Daten unter einem „Schlüssel“ abgelegt
Selbst definierte Strukturen erfordern meist spezielle Sprachmittel
0110 0010
char c = 'a';
c
2 31
Das Zeichen a
Die Liste [1,2,3]
int[] a = {1,2,3};
![Page 3: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/3.jpg)
Seite 3
Datenstrukturen: Felder (Arrays)
Felder (Arrays)Daten unter einem Index speichern
älteste Datenstruktur in Programmiersprachen
Vorbild: Vektoren und Matrizen in der Mathematik
Wird von allen klassischen Programmiersprachen unterstützt (C, C++, C#, Java, ...)
Felder bestehen aus Feldelementen, die über einen Index angesprochen werden können
Beispiel: Feld mit 10 Elementen
int[] x = new int[10];for (int i=0; i < 10; i++) {
x[i] = i;}
x wird als ein Feld mit 10 Komponenten angelegt und mit 0, 1, .. 9 gefüllt.
![Page 4: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/4.jpg)
Seite 4
Felder (Arrays)
Felder (Arrays)
Geordnet: ein Element nach dem anderen, jedes Element hat einen Index
Homogen: alle Elemente haben den gleichen Typ
Struktur: VariableSpeicher für Elemente
Speicher
Feld-Variableenthält Zeiger (Adresse) auf den Speicherbereich für die Elemente
Speicherplatz für die Feldelemente
![Page 5: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/5.jpg)
Seite 5
Felder (Arrays)
Felder (Arrays) definierenVariante 1 / Erzeugung eines Felds
int [] a = new int[10];
a
1. Eine Feld-Variable a wird angelegt.2. Zusammenhängender Speicherplatz für die Feldelemente wird angelegt und mit 0-en gefüllt. 3. Die Feld-Variable wird mit der Adresse des Speicherplatzes gefüllt.
Feld-Variable
Feldelement-Typ
Feld-Größe
Speicher
0 0 0 0 0 0 0 0 0 0
![Page 6: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/6.jpg)
Seite 6
Felder (Arrays)
Felder (Arrays) definierenVariante 2 / Erzeugung eines Felds
a
1. Eine Feld-Variable a wird angelegt.2. Zusammenhängender Speicherplatz für die Feldelemente wird angelegt und mit den Werten gefüllt.3. Die Feld-Variable wird mit der Adresse des Speicherplatzes gefüllt.
Feld-Variable
Feldelement-Typ
Feld-Elemente
Speicher
int [] a = {1,2,3,4,5,7,8,9,0};
1 2 3 4 5 6 7 8 9 0
![Page 7: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/7.jpg)
Seite 7
Felder (Arrays) : Beispiele
For-Schleife: Felder (Arrays) durchlaufen
Feld durchlaufen mit klassische Schleifefor ( int i = 0; i < feld.length; i++ )
... verarbeite feld[i] ....
Feld durchlaufen mit „for-each“ Schleife
for ( Typ elem: feld )... verarbeite elem ....
Nur lesender Zugriff möglich
Für jedes elem in feld mache Folgendes
Für jeden Index i zwischen 0 und der Feldlänge feld.length mache Folgendes
![Page 8: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/8.jpg)
Seite 8
Felder (Arrays) : Beispiele
Beispiel: Quadratzahlen von 0 bis 19
0. 1. 4. 9. 16. 25. 36. 49. 64. 81. 100. 121. 144. 169. 196. 225. 256. 289. 324. 361.
„For-each“-Schleife über den Inhalt des Feldes
Zähl-Schleife: 0 .. 19
Feld mit 20 Elementen, Index 0 .. Index 19
int[] quadZahl = new int[20];
for (int i=0; i < quadZahl.length; i++) { quadZahl[i] = i*i;}
for (int v : quadZahl) { System.out.print(v + ". ");}System.out.println();
![Page 9: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/9.jpg)
Seite 9
Felder (Arrays) : Beispiele
Beispiel: Fakultäten f[i] = i! berechnen und ausgeben (1)
1 1 2 6 24 120 720 5040 40320 362880
Funktion: nimmt Feld an und verändert es
static void compFak(int[] a) { a[0] = 1; for (int i = 1; i<a.length; i++) {
a[i] = a[i-1]*i; }}
public static void main(String args[]) { int[] f = new int[10]; compFak(f); for (int v : f) { System.out.print(v + " "); } System.out.println();}
![Page 10: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/10.jpg)
Seite 10
Felder (Arrays) : Beispiele
Beispiel: Fakultäten f[i] = i! berechnen und ausgeben (2)
1 1 2 6 24 120 720 5040 40320 362880
Funktion: erzeugt Feld und gibt es zurück
static int[] compFak() { int[] a = new int[10]; a[0] = 1; for (int i = 1; i<a.length; i++) { a[i] = a[i-1]*i; } return a;}
public static void main(String args[]) { int[] f = compFak(); for (int v : f) { System.out.print(v + " "); } System.out.println();}
![Page 11: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/11.jpg)
Seite 11
Felder (Arrays) : Beispiele
Beispiel: Suche nach dem Maximum in einem Feld
static int max(int[] a) { int max = a[0]; for (int i = 1; i<a.length; i++) { if (a[i] > max) { max = a[i]; } } return max;}
public static void main(String args[]) { int[] f = new int[]{4,3,0,1,2,3,7,4,5,2,4,7}; System.out.println(max(f));}
7
![Page 12: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/12.jpg)
Seite 12
Felder (Arrays) : Zuweisung und Vergleich
Felder zuweisen'=' kopiert bei Feldern nicht den Inhaltsondern nur die Zeiger
int [] a1 = { 1, 2, 3 };int [] a2 = { 9, 8, 7 };a2 = a1;
a1
a2 = a1;
1 2 3
a2 9 8 7
a1 1 2 3
a2
vorher
nachher
Zuweisung
9 8 7
![Page 13: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/13.jpg)
Seite 13
Felder (Arrays) : Zuweisung und Vergleich
Felder vergleichen'==' testet bei Feldern nicht auf gleichen Inhaltsondern auf Identität
int [] a1 = { 1, 2, 3 };int [] a2 = { 1, 2, 3 }; a1==a2 ist falsch!
a1
int [] a1 = { 1, 2, 3 };int [] a2 = a1; a1==a2 ist wahr!
1 2 3
a2 1 2 3
a1 1 2 3
a2
unterschiedliche Zeiger in a1 und a2
gleiche Zeiger in a1 und a2
![Page 14: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/14.jpg)
Seite 14
Felder (Arrays) und Funktionen
Felder als Funktionsargumente– Zahlwerte als Argumente werden in die Parameter-Variablen der Funktion
kopiert
– Felder als Argumente werden nicht kopiert.Lediglich der Verweis auf den Elementspeicher wird zu Funktion kopiert.
int x = 5;int [] a = new int[10];f(a,x);
static void f(int[] a, int v) { for (int i = 1; i<a.length; i++) {
a[i] = a[i]+v; }}
5x
a
f(a,x); 5
5va
Übertragung der Argumente
Aufruf der Funktion
Parameter-Variablen der Funktion
Variablen in main
![Page 15: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/15.jpg)
Seite 15
Felder (Arrays) voller Felder
Mehrdimensionale Felder– Felder können Felder enthalten– Dies kann zur Modellierung mehrdimensionaler Felder genutzt
werden.
matrixint[][] matrix = { { 10, 20, 30 },
{ 21, 22, 23 },
{ 31, 32, 33 } };
for (int[] zeile : matrix) {
for (int elem : zeile) {
System.out.print(elem + " ");
}
System.out.println();
}
10 20 30 21 22 23 31 32 33
31 32 33
10 20 30
21 22 23
![Page 16: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/16.jpg)
Seite 16
Felder (Arrays) voller Felder
Mehrdimensionale Felder– Beispiel Matrix-Multiplikation (1)
/** * Matrixmultiplikation. * @param matrix1 MxK Matrix * @param matrix2 KxN Matrix * @return MxN Matrix als Produkt von matrix1 und matrix2; * null falls die Dimensionen der Matrizen nicht passen */static double[][] matmult(double[][] matrix1, double[][] matrix2) { int M = matrix1.length; // Zeilen matrix1 int K = matrix2.length; // Zeilen matrix2 int N = matrix2[0].length; // Spalten matrix2
if (K != matrix1[0].length) { // Spalten matrix1 != Zeilen matrix2return null;
}
double[][] resultat = new double [N][M];
for(int i = 0; i < N; i++) {for(int j = 0; j < M; j++) {
double s = 0.0;for(int k = 0; k < K; k++) {
s = s+ matrix1[i][k] * matrix2[k][j];}resultat[i][j] = s;
} } return resultat;}
![Page 17: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/17.jpg)
Seite 17
Felder (Arrays) voller Felder
Mehrdimensionale Felder– Beispiel Matrix-Multiplikation / (2) Aufruf der Funktion
public static void main(String args[]) { double[][] matrix1 = {{ 1, 2, 3 }, { 4, 5, 6 }};
double[][] matrix2 = {{ 1, 3 }, { 2, 2 }, { 3, 1 }};
double[][] matrix3 = matmult(matrix1, matrix2);
for (double[] zeile : matrix3) { for (double elem : zeile) System.out.print(elem + " "); System.out.println(); } }}
![Page 18: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/18.jpg)
Seite 18
Felder (Arrays) : Zusammenfassung
Vorteile der Felder– einfache– effiziente
Verwaltung von Mengen gleichartiger Daten
Nachteile der Felder– feste Größe
– Änderung der Größe nicht direkt möglich
muss bei Bedarf simuliert werden(Neues Feld anlegen, Elemente umkopieren)
– Einfügen und Entfernen von Elementen nicht direkt möglich
muss bei Bedarf simuliert werden(umkopieren und verschieben)
![Page 19: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/19.jpg)
Seite 19
Datenstrukturen : Listen
Listen
Definition
def Listen-Variable = Listen-Wert
Beispiel
Zugriff auf Listen-Elementelesend
Listen-Variable.get( Index )
schreibendListen-Variable.add( Index, Wert )
Listen-Variable.add( Wert )
List<Integer> liste = new ArrayList<Integer>();
An einer bestimmten Position einfügen
Am Ende anhängen
![Page 20: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/20.jpg)
Seite 20
Listen
Beispiel: Zahlen einlesen und sortiert ausgeben
Th Letschert
package hallo;
import javax.swing.JOptionPane;import java.util.ArrayList;import java.util.Collections;import java.util.List;
public class Listenbeispiel {
public static void main(String args[]) { List<Integer> liste = new ArrayList<Integer>();
while (true) {String zahlStr = JOptionPane.showInputDialog("Bitte Zahl eingeben");if (zahlStr == null) { break;}int zahl = Integer.parseInt(zahlString);liste.add(zahl);
}
Collections.sort(liste); System.out.println(liste); }
}
![Page 21: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/21.jpg)
Seite 21
Abbildungen
Abbildung (Zuordnung, engl. Map)
Abbildung
Wert-Zuordnung
Beispiel Telefonbuch: Name ~> Nummer
beliebige endliche Tabellen mit 2 Spalten
Schlüssel ~> Wert (Key ~> Value) Beziehung
Notationeng verwandt mit Listen
Definition Map<String, Integer> telefonverz = new HashMap<String, Integer>();
telefonverz ~ { "Hugo" ~> 4711, "Karla" ~> 4712, "Egon" ~> 4713 }
SchlüsselWert
Abb.-Variable
Abb.-Wert
Ideell, kann so (leider) in Java nicht
hingeschrieben werden.
![Page 22: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/22.jpg)
Seite 22
Abbildungen
Abbildung (Zuordnung, engl. Map)
Zugriff auf Map-Elemente lesend
Map-Variable.get( Schlüssel )
schreibendListen-Variable.put( Schlüssel, Wert )
![Page 23: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/23.jpg)
Seite 23
Abbildungen
Th Letschert
Abbildung Beispiel
package hallo;
import java.util.HashMap;import java.util.Map;import javax.swing.JOptionPane;
public class MapBeispiel {
public static void main(String args[]) { Map<String, Integer> telefonverz = new HashMap<String, Integer>();
while(true) {String name = JOptionPane.showInputDialog("Eintrag: Bitte Name eingeben");if (name == null) { break; }String nrString = JOptionPane.showInputDialog("Eintrag: Bitte TelefonNr eingeben");if (nrString == null) { break; }telefonverz.put(name, Integer.parseInt(nrString));
}
System.out.println(telefonverz);
while(true) {String name = JOptionPane.showInputDialog("Suche: Bitte Name eingeben");if (name == null) { break; }JOptionPane.showMessageDialog(null, "Die gesuchte Nr "
+ (telefonverz.get(name) != null ? "ist " + telefonverz.get(name) : "gibt es nicht") );
} }}
![Page 24: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/24.jpg)
Seite 24
Datenmodellierung mit Listen und Abbildungen
Th Letschert
These:(Fast) Alle Informationsstrukturen der realen Welt lassen sich als Mengen, Listen und Abbildungen über Zahlen und Zeichenketten darstellen.
In Programmiersprachen bilde dies nach mit
int / double (für Zahlen)
String (für Zeichen und Zeichenketten)
array (für Listen und Abbildungen mit Schlüssel vom Typ int)
List (für Listen und Mengen)
Map (für Abbildungen)
![Page 25: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/25.jpg)
Seite 25
Datenmodellierung
Th Letschert
Daten-Modellierung
Zentrales Anliegen der Informatik: Informationsstrukturen der realen (Anwendungs-) Welt darstellen.
vielfältige Anwendungen der Datenmodellierung in der Programmierung im System-Entwurf
vielfältige Methoden und Notationenin diversen Programmiersprachenin der Systementwicklung zwischen denen u.U. gewechselt werden muss
![Page 26: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/26.jpg)
Seite 26
Datenstrukturen / Datenmodellierung : Beispiel
Stücklisten-Verwaltung– Stammdaten:
wichtige statische Informationen eines Betriebs über Lieferanden, Kunden, Erzeugnisse etc.
– Stücklisten:Stammdaten zu Erzeugnissen:
„Eine Stückliste beschreibt die mengenmäßige Zusammensetzung eines Erzeugnisses aus seinen Einzelteilen. Die Stückliste gibt dabei an, wie viele Mengeneinheiten eines bestimmten Teils oder einer bestimmten Baugruppe auf untergeordneter Erzeugnisstrukturebene benötigt werden, um eine Einheit des Erzeugnisses auf übergeordneter Erzeugnisstrukturebene herzustellen.“http://wirtschaftslexikon.gabler.de/Archiv/72926/stueckliste-v4.html
– Baukasten-Stückliste:Stücklisten können in unterschiedlicher Form gespeichert werden. Eine davon ist die Baukasten-Stückliste.
„Baukastenstücklisten (englisch: „unit list“) zeichnen sich dadurch aus, dass jeweils nur eine Ebene der Produktstruktur betrachtet wird: Baugruppen erhalten eigene Stücklisten, die in den Stücklisten der übergeordneten Gruppen verwendet werden.“http://de.wikipedia.org/wiki/Stückliste
![Page 27: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/27.jpg)
Seite 27
Datenstruktur : Beispiel
Beispiel Baukasten-Stückliste– Produkt P
besteht aus einem Einzelteil E1 und einer Baugruppe B– Baugruppe B
besteht aus aus zwei Einzelteilen E1 und und einem Einzelteil E2
E1 E1 E1 E2
P BStückliste = Produkt ~> Menge( (Anzahl x (Baugruppe | Teil)) )
Baugruppe = Menge( (Anzahl x (Baugruppe | Teil)) )
Eine Stückliste ist eine Zuordnung - von Produkten (-nummern) - zu Mengen von Paaren - von Anzahl und Baugruppe (-nummern) oder Teil (-nummern).Eine Baugruppe ist eine Menge Paaren bestehend aus Anzahl und Baugruppe oder Teil.
Wie können Stücklisten mit Hilfe von Arrays, Listen und / oder Abbildungen gespeichert werden?
![Page 28: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/28.jpg)
Seite 28
Dateien
Umgang mit Dateien - Beispiele
Der Umgang mit Dateien ist komplex, wir beschränken uns auf einige Beispiele
Datei auswählen
Dateien können durch Eingabe ihres „Pfads“ oder mit einem speziellen Dialog-Fenster ausgewählt werden.
Dateiauswahl durch Angabe eines Pfads
public static void main(String[] args) throws FileNotFoundException {
String fileNane = JOptionPane.showInputDialog("Bitte Datei-Pfad eingeben"); File f = new File(fileNane);
Scanner scan = new Scanner(f);
while (scan.hasNext()) { System.out.println(scan.next()); }}
Der Benutzer wird in einem Dialog um die Angabe einer Datei gebeten. Diese wird – falls gefunden – dann wortweise ausgegeben.
![Page 29: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/29.jpg)
Seite 29
Dateien
Dateiauswahl mit Datei-Auswahl-Dialog
Der Benutzer wird in einem Dialog um die Auswahl einer Datei gebeten. Diese wird dann wortweise ausgegeben.
public static void main(String[] args) throws FileNotFoundException {
File f = null; JFileChooser fc = new JFileChooser(); int chooseResult = fc.showDialog(null, "Bitte Datei auswählen"); if (chooseResult == JFileChooser.APPROVE_OPTION) {
f = fc.getSelectedFile(); }
if (f != null) {Scanner scan = new Scanner(f);while (scan.hasNext()) {
System.out.println(scan.next());}scan.close();
}}
![Page 30: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/30.jpg)
Seite 30
Dateien
Datei analysierend lesen
Text-Dateien können auf verschiedene Art „analysierend“ gelesen werden.– Zeilenweise lesen– Wortweise lesen– Zahlenweise lesen– ...
File f = ...;Scanner scan = new Scanner(f);while (scan.hasNextLine()) {
System.out.println(scan.nextLine());}scan.close();
File f = ...;Scanner scan = new Scanner(f);while (scan.hasNextInt()) {
System.out.println(scan.nextInt());}scan.close();
File f = ...;Scanner scan = new Scanner(f);while (scan.hasNext()) {
System.out.println(scan.next());}scan.close();
![Page 31: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/31.jpg)
Seite 31
Dateien
Datei schreiben
Text-Dateien können einfach beschrieben werden.– Beispiel 1:
– Beispiel 2:
File f = ...;if (f != null) {
PrintWriter pw = new PrintWriter(f);pw.println("Hallo");pw.close();
}
public static void main(String[] args) throws IOException { String filePath = JOptionPane.showInputDialog("Ausgabe-Datei?"); PrintWriter pw = new PrintWriter(new FileWriter(filePath)); pw.println("Hallo"); pw.println("Welt!"); pw.close();}
![Page 32: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/32.jpg)
Seite 32
Dateien
Datei mit strukturiertem Inhalt lesen
Beispiel: Einlesen einer Tabelle
Anlage; Bezeichnung; Baujahr; Garantie; Typbezeichnung; Stoerungen;283006025; Rollstuhl Venezia XTRA; 2006; 03.10.08; Venezia 923; 4;283006026; Rollstuhl Venezia XTRA; 2006; 03.10.08; Venezia 923; 0;283006041; Hunderolli HappyWuff; 2006; 01.01.10; XZR61E00; 2;287006004; Seniorenrollstuhl Evolution; 2006; 12.12.08; BC61E00; 0;287006007; Seniorenrollstuhl Esprit; 2006; 08.08.09; XZR71A30; 11;287006008; Seniorenrollstuhl Esprit; 2005; 08.08.09; XZR71A30; 9;287006009; Personenrollstuhl Budget; 2006; 04.02.09; XZR51E55; 10;287006010; Seniorenrollstuhl Esprit; 1985; 04.02.09; XZR71A40; 0;287006011; Personenrollstuhl Esprit; 2007; 03.06.09; XZR71A30; 0;287006012; Personenrollstuhl Esprit; 2006; 03.06.09; XZR71A30; 0;287006013; Personenrollstuhl Esprit; 2006; 27.11.09; XZR71A00; 0;287006014; Personenrollstuhl AVO 1000; 2006; 31.05.09; XZR61 E54; 1;287006015; Personenrollstuhl AVO 1000; 2006; 31.05.09; XZR61 E54; 0;287006016; Personenrollstuhl AVO 1000; 2006; 31.05.09; XZR61 E54; 0;287006017; Personenrollstuhl AVO 1000; 2006; 31.05.09; XZR61 E54; 0;287006018; Personenrollstuhl Esprit; 2006; 13.11.08; XZR71A30; 5;287006019; Seniorenrollstuhl Esprit; 2006; 22.12.08; XZR71A30; 0;287006020; Personenrollstuhl Esprit; 2006; 14.01.10; XZR71A30; 0;287006021; Personenrollstuhl Esprit; 2006; 13.11.08; XZR71A30; 0;287006024; Personenrollstuhl Esprit; 2006; 30.05.10; XZR71A00; 0;287006025; Personenrollstuhl Esprit; 2006; 30.05.10; XZR71A00; 0;
als
Liste( [ Attribut ~> Wert ] )
Attribut Anlage
![Page 33: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/33.jpg)
Seite 33
Dateien
Datei mit strukturiertem Inhalt lesen
Beispielpublic static void main(String[] args) throws IOException { List<Map<String, String>> stock = new ArrayList<Map<String, String>>();
File f = null; JFileChooser fc = new JFileChooser(); int chooseResult = fc.showDialog(null, "Bitte Datei auswählen"); if (chooseResult == JFileChooser.APPROVE_OPTION) {
f = fc.getSelectedFile(); }
if (f != null) {Scanner scan = new Scanner(f);String header = scan.nextLine();String[] attrName = header.split(";");for(int i =0; i<attrName.length; i++) {
attrName[i] = attrName[i].trim();}
while (scan.hasNextLine()) {Map<String,String> entry = new HashMap<String,String>();String line = scan.nextLine();String[] values = line.split(";");int i = 0;for(String a: attrName) {
String value = values[i++].trim();entry.put(a, value);
}stock.add(entry);
}scan.close();
![Page 34: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/34.jpg)
Seite 34
Dateien
... und wieder in Datei ausgeben
f = null;fc = new JFileChooser();chooseResult = fc.showDialog(null, "Bitte Datei auswählen");if (chooseResult == JFileChooser.APPROVE_OPTION) {
f = fc.getSelectedFile();}
if (f != null) {PrintWriter pw = new PrintWriter(f);for (String attr: attrName) {
pw.print(attr+";\t");}pw.println();for(Map<String, String> entry: stock) {
for (String key: attrName) {pw.print(entry.get(key)+";\t");
}pw.println();
}pw.close();}
}
![Page 35: Informatik - THM · 2012. 1. 14. · Informatik Datenstrukturen und Dateien Th Letschert. Seite 2 Datenstrukturen Datenstrukturen Sprachelemente zur Speicherung von vielen Daten Datentyp](https://reader034.vdocuments.site/reader034/viewer/2022052616/60a97f00473f205fb47e0919/html5/thumbnails/35.jpg)
Seite 35
Dateien
Alle Dateien eines bestimmten Verzeichnisses mit einer bestimmten Endung lesen
private static File findDirectory(String msg) { JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int returnVal = fc.showDialog(null, msg); if (returnVal == JFileChooser.APPROVE_OPTION) { return fc.getSelectedFile(); } else return null;}
private static File[] findFilesInDirectory(File directory, final String extension) { FilenameFilter extensionFilter = new FilenameFilter() { public boolean accept(File f, String name) { if (name.endsWith(extension)) { return true; } else { return false; } } }; return directory.listFiles(extensionFilter);}
public static void main(String[] args) { File dir = findDirectory("CSV-Verzeichnis"); File[] csvFiles = findFilesInDirectory(dir, "csv"); for (File f: csvFiles) { System.out.println(f); }}