Einstieg in die Informatik mit Java

Ähnliche Dokumente
Felder. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Klassen als Datenstrukturen

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Programmieren I. Arrays Heusch 7.2 Ratz Institut für Angewandte Informatik

Programmieren I. Arrays Heusch 7.2 Ratz Institut für Angewandte Informatik

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Felder - Arrays. Typ feldname[] = new Typ[<ganze Zahl >]; Beispiel: double vektor[] = new double[5]; auch eine Initialisierung ist möglich.

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Java Referenzdatentypen genauer betrachtet

Einstieg in die Informatik mit Java

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Reihungen. Prof. Dr. Christian Böhm. In Zusammenarbeit mit Gefei Zhang. WS 07/08

3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.

Einstieg in die Informatik mit Java

Zeichenketten. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java. 16.

5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!

Einstieg in die Informatik mit Java

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

Einstieg in die Informatik mit Java

Arrays. Einleitung. Deklarieren einer Array Variablen

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

F Zeiger, Felder und Strukturen in C

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

9. Vektoren. (auch Felder/array)

Vorkurs Informatik WiSe 16/17

3.2 Datentypen und Methoden

Vererbung, Polymorphie

Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II a[0] a[1] a[2] a[3] a[n 1]

Programmiersprachen Einführung in C

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Felder in C. Felder stellen eine Reihung von Elementen gleichen Typs dar. Man spricht auch von Vektoren oder Arrays.

8. Referenzen und Zeiger

Klassen mit Instanzmethoden

Objekttypen. Referenzen, Objekte, Gleichheit, Wrapper, Arrays, mehr-dimensionale Arrays, Bildbearbeitung, krumme Arrays

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Einstieg in die Informatik mit Java

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

Inhalt. Peter Sobe 63. Felder in C

Tag 4 Repetitorium Informatik (Java)

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Einstieg in die Informatik mit Java

Übungspaket 23 Mehrdimensionale Arrays

Konstruktor. public Rational(int i) { Zaehler = i; Nenner = 1; }

Computeranwendung und Programmierung (CuP)

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Teil 5: Felder, Zeiger, Zeigerarithmetik Gliederung

Grundlagen der Objektorientierten Programmierung - Statische Arrays

Methoden und Wrapperklassen

C++ Teil 5. Sven Groß. 8. Mai IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 8. Mai / 16

Einstieg in die Informatik mit Java

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

Vorkurs Informatik WiSe 17/18

Objektorientierte Programmierung und Klassen

Ausgabe:

Tag 8 Repetitorium Informatik (Java)

Softwareentwicklung I (IB) Objekte. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Die for -Schleife HEUTE. Schleifen. Arrays. Schleifen in JAVA. while, do reichen aus, um alle iterativen Algorithmen zu beschreiben

Einstieg in die Informatik mit Java

Repetitorium Informatik (Java)

Dr. Monika Meiler. Inhalt

Einführung in die Java- Programmierung

Transkript:

1 / 26 Einstieg in die Informatik mit Java Felder Gerd Bohlender Institut für Angewandte und Numerische Mathematik

Gliederung 2 / 26 1 Was sind Felder? 2 Vereinbarung von Feldern 3 Erzeugen von Feldern 4 Zugriff auf Feldkomponenten 5 Mehrdimensionale Felder 6 Felder als Objekte, Referenzen Kopieren von Feldern mit System.arraycopy() Vergleich von Feldern

Gliederung 3 / 26 1 Was sind Felder? 2 Vereinbarung von Feldern 3 Erzeugen von Feldern 4 Zugriff auf Feldkomponenten 5 Mehrdimensionale Felder 6 Felder als Objekte, Referenzen Kopieren von Feldern mit System.arraycopy() Vergleich von Feldern

Was sind Felder? 4 / 26 Häufig werden viele gleichartige Daten zusammen abgespeichert. e Vektoren, Matrizen, Tabellen, Monitorbilder als eine Matrix von Pixeln. Die Einträge in einem Feld heissen Elemente oder Komponenten. Elemente a 0 bis a n 1 : a 0 a 1 a 2... a n 1 Alle Komponenten sind vom gleichen Typ (Komponententyp). Felder sind in Java Objekte, die dynamisch erzeugt werden, und sind im Prinzip nur eindimensional, können aber als Komponententyp einen anderen Feldtyp besitzen.

Gliederung 5 / 26 1 Was sind Felder? 2 Vereinbarung von Feldern 3 Erzeugen von Feldern 4 Zugriff auf Feldkomponenten 5 Mehrdimensionale Felder 6 Felder als Objekte, Referenzen Kopieren von Feldern mit System.arraycopy() Vergleich von Feldern

6 / 26 Vereinbarung von Feldern Syntax Komponententyp [ ] Bezeichner; Alternativ ist auch noch die C++ Syntax möglich: Komponententyp Bezeichner [ ]; Achtung Anders als in Pascal und C++ wird durch die Deklaration noch kein Speicher für die Komponenten reserviert, es existiert bislang nur eine Referenz auf das Feld! i n t [ ] a ; / / math. Vektor mit ganzzahligen Komp. double [ ] b, c ; / / math. Vekt. m i t Komp. vom Typ double double [ ] [ ] m; / / Matrix : Feld von Feldern

Gliederung 7 / 26 1 Was sind Felder? 2 Vereinbarung von Feldern 3 Erzeugen von Feldern 4 Zugriff auf Feldkomponenten 5 Mehrdimensionale Felder 6 Felder als Objekte, Referenzen Kopieren von Feldern mit System.arraycopy() Vergleich von Feldern

Erzeugen von Feldern 8 / 26 Felder können auf die folgenden Weisen erzeugt werden: (1) Mit dem Operator new bei der Initialisierung, i n t [ ] a = new i n t [ 3 ] ; (2) durch eine Initialisiererliste bei der Deklaration, i n t [ ] b = {1, 2, 3};

Erzeugen von Feldern 9 / 26 (3) durch Zuweisung eines mit new erzeugten Feldes, i n t [ ] c ;... c = new i n t [ 3 ] ; (4) durch eine Kombination aus (2) und (3). i n t [ ] d ;... d = new i n t [ ] {1,2,3};

10 / 26 Erzeugen von Feldern, Achtung Achtung Bei der letzten Variante muss new int[] stehen (im Gegensatz zur Initialisiererliste bei der Deklaration). Die Anzahl der Feldelemente darf nicht angegeben werden. i n t [ ] d ;... d = {1,2,3}; / / Fehler : new i n t [ ] f e h l t d = new i n t [ 3 ] {1,2,3}; / / Fehler : / / Dimensionsangabe verboten

Initialisierung von Feldern 11 / 26 Im Gegensatz zu C++ darf die Initialisiererliste auch Variablen und Ausdrücke enthalten! i n t x=11, y =22; i n t [ ] d = {x, y +1};

12 / 26 Erzeugen von Feldern Die Länge eines Feldes kann mit einer ganzzahligen Variablen (allerdings nicht vom Typ long) angegeben werden. Achtung Das heißt natürlich nicht, dass sich die Feldlänge bei einer Änderung der Variablen ebenfalls ändert! i n t dim = 5; i n t [ ] e = new i n t [ dim ] ; / / Feld e hat 5 Komp. dim = 10; / / e h a t immer noch 5 Komp.

Gliederung 13 / 26 1 Was sind Felder? 2 Vereinbarung von Feldern 3 Erzeugen von Feldern 4 Zugriff auf Feldkomponenten 5 Mehrdimensionale Felder 6 Felder als Objekte, Referenzen Kopieren von Feldern mit System.arraycopy() Vergleich von Feldern

14 / 26 Zugriff auf Feldkomponenten Ist i ein int Ausdruck, so kann mit f[i] auf das i-te Feldelement von f zugegriffen werden. i n t [ ] f = { 1, 2, 3 } ; f[0] f[1] f[2] 1 2 3 Damit ergibt sich fpr die Komponente f[0] der Wert 1, für die Komponente f[1] der Wert 2 und für die Komponente f[2] der Wert 3. Achtung Die Indizierung der Feldelemente beginnt in Java immer bei Null! Für das obige bedeutet dies, dass die Komponente f[3] nicht existiert! Im Gegensatz zu C++ werden Zugriffe auf nichtexistente Feldelemente geprüft und führen zu einem Laufzeitfehler!

Zugriff auf Feldlänge 15 / 26 Die Länge eines Feldes f kann durch f.length bestimmt werden. char [ ] vokale = { a, e, i, o, u } ;... for ( i n t i =0; i <vokale. l e n g t h ; ++ i ) System. out. p r i n t l n ( vokale [ i ] ) ;

Vektoraddition 16 / 26 import java. u t i l. ; public class AddVek { public s t a t i c void main ( S t r i n g [ ] args ) { Locale. s e t D e f a u l t ( Locale.US ) ; Scanner sc = new Scanner ( System. i n ) ; double [ ] a, b ; System. out. p r i n t ( Dimension = ) ; i n t dim = sc. n e x t I n t ( ) ; a = new double [ dim ] ; b = new double [ dim ] ; for ( i n t i =0; i <a. length ; ++ i ) { System. out. p r i n t ( a [ + i + ] : ) ; a [ i ] = sc. nextdouble ( ) ; System. out. p r i n t ( b [ + i + ] : ) ; b [ i ] = sc. nextdouble ( ) ; } for ( i n t i =0; i <a. length ; ++ i ) System. out. p r i n t l n ( Summe[ + i + ] : +(a [ i ]+ b [ i ] ) ) ; } }

Gliederung 17 / 26 1 Was sind Felder? 2 Vereinbarung von Feldern 3 Erzeugen von Feldern 4 Zugriff auf Feldkomponenten 5 Mehrdimensionale Felder 6 Felder als Objekte, Referenzen Kopieren von Feldern mit System.arraycopy() Vergleich von Feldern

18 / 26 Mehrdimensionale Felder Mehrdimensionale Felder sind genau genommen eindimensionale Felder, deren Komponenten selbst wieder Felder sind. Vereinbarung: Komponententyp [] Name; wobei der Komponententyp ein Feld ist. Erzeugung: Die geläufigste Methode zur Erzeugung ist die mittels des new Operators. Daneben findet gelegentlich auch die Erzeugung mit Hilfe einer geschachtelten Initialisiererliste Anwendung: {{Zeile0}, {Zeile1},...} Zugriff auf Komponenten: Feldname [ Index 1 ] [ Index 2 ]... Achtung Die Schreibweise Feldname [ Index 1, Index 2 ] ist nicht erlaubt.

Mehrdimensionale Felder e double [ ] [ ] [ ] quader = new double [ 4 ] [ 2 ] [ 3 ] ; / / 4x2x3 = 24 double Zahlen, Z u g r i f f z. B. : quader [ 1 ] [ 1 ] [ 2 ] = 3. 1 4 ; double [ ] [ ] quadrat = {{ 1, 2 },{ 3, 4 } } ; / / 2x2 Matrix, Z u g r i f f z. B. : System. out. p r i n t l n ( quadrat [ 0 ] [ 0 ] ) ; / / g i b t 1 aus double [ ] [ ] dreieck = {{ 1 },{ 2, 3 },{ 4, 5, 6 } } ; / / Dreiecksmatrix, Z u g r i f f z. B. : dreieck [ 2 ] [ 2 ] = dreieck [ 0 ] [ 0 ] + 6; / / aus 6 wird 7 Achtung Wie im dritten erkennbar, darf die Zeilenlänge durchaus auch unterschiedlich sein! 19 / 26

Mehrdimensionale Felder Die Dimensionsangaben dürfen ganzzahlige Ausdrücke sein (jedoch nicht vom Typ long). i n t dim = scanner. n e x t I n t ( ) ; double [ ] [ ] mat1 = new double [ dim ] [ dim ] ; double [ ] [ ] mat2 = new double [ dim +1][2 dim ] ; Die Angabe der ersten Dimension ist notwendig, die weiteren können entfallen. double [ ] [ ] matrixa = new double [ 3 ] [ ] ; Es wird nur ein Vektor von Referenzen auf die Zeilen angelegt, die Zeilen selber existieren noch nicht! 20 / 26

Mehrdimensionale Felder Schrittweise Erzeugung double[][] matrixb = new double[3][5]; 21 / 26 double [ ] [ ] matrixb ; matrixb??? (Variable matrixb ist nicht initialisiert) matrixb = new double [ 3 ] [ ] ; null matrixb null null for ( i n t i =0; i <3; ++ i ) matrixb [ i ] = new double [ 5 ] ; matrixb 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

Gliederung 22 / 26 1 Was sind Felder? 2 Vereinbarung von Feldern 3 Erzeugen von Feldern 4 Zugriff auf Feldkomponenten 5 Mehrdimensionale Felder 6 Felder als Objekte, Referenzen Kopieren von Feldern mit System.arraycopy() Vergleich von Feldern

23 / 26 Felder als Objekte, Referenzen Im Gegensatz zu den Grundtypen (Zahlen, Zeichen und boolsche Typen) werden Felder wie alle Objekte als Referenzen behandelt. Das bedeutet, dass eine Zuweisung über den Zuweisungsoperator = nur eine neue Referenz (einen Aliasnamen für das Feld) erzeugt, jedoch keine echte Kopie. Achtung Bei Kopien mit Hilfe des Zuweisungsoperators wird bei Grundtypen der Wert kopiert, bei Referenztypen nur die Referenz, nicht der Wert!

Felder als Objekte, Referenzen i n t i = 1; i n t j = i ; / / e r g i b t i =1, j =1 i = 2; / / e r g i b t i =2, j =1 i n t [ ] a = {1}; i n t [ ] b = a ; / / e r g i b t a [ 0 ] = 1, b [ 0 ]=1 a [ 0 ] = 2; / / e r g i b t a [ 0 ] = 2, b [ 0 ]=2 i und j sind zwei unabhängige Variablen, a und b sind lediglich zwei unabhängige Referenzen. Abhilfe schafft die Methode clone(). Achtung clone() bearbeitet nur die erste Ebene, bei mehrdimensionalen Feldern muss clone() mehrfach aufgerufen werden! 24 / 26

25 / 26 Kopieren von Feldern mit System.arraycopy() Syntax System.arraycopy (Quelle,Quellindex, Ziel,Zielindex,Laenge); i n t [ ] a = {0, 1, 2, 3, 4, 5}; i n t [ ] b = new i n t [ 1 0 ] ; / / b [ 0 ] = 0,..., b [9]=0 System. arraycopy ( a, 2, b, 4, 3 ) ; / / b [ 4 ] = 2, b [ 5 ] = 3, b [6]=4 Achtung b 0 0 0 0 2 3 4 0 0 0 Felder werden wie alle Objekte automatisch initialisiert!

Vergleich von Feldern 26 / 26 Mit dem logischen Vergleich a==b werden nur die Referenzen verglichen, nicht jedoch der Inhalt der Felder. Dasselbe gilt bei der Verwendung der Methode equals(). i n t [ ] a = {1}; i n t [ ] b = {1}; i f ( a==b )... / / Bedingung e r g i b t f a l s e i f ( a. equals ( b ) )... / / Bedingung e r g i b t f a l s e