Arrays. 7.1 Was ist ein Array? Kapitel 7. In diesem Kapitel lernen Sie. Array-Variablen deklarieren
|
|
- Catrin Sauer
- vor 7 Jahren
- Abrufe
Transkript
1 In diesem Kapitel lernen Sie was man in C# unter einem Array versteht wie Sie ein Array deklarieren wie Sie ein Array initialisieren (mit Daten vorbelegen) wie Sie die Elemente eines ansprechen und bearbeiten was mehrdimensionale sind nützliche Methoden für den Zugriff auf kennen was eine ArrayList ist II Grundlagen von C# 7.1 Was ist ein Array? In diesem Kapitel stellen wir Ihnen vor, die auch als Datenfelder bezeichnet werden. Unter einem Array versteht man die Zusammenfassung mehrerer Variablen des gleichen Typs, die unter einem gemeinsamen Namen angesprochen werden können. Die Variablen werden dabei im Speicher direkt hintereinander, also gewissermaßen»am Stück«, abgelegt. Da die Speicherzugriffe bei dieser Anordnung besonders effizient sind, werden vor allem Operationen, die mehrere Elemente eines ansprechen, sehr performant. Um die Wirkungsweise eines zu verstehen, können Sie es mit einer CD-Sammlung vergleichen. Höchstwahrscheinlich bewahren Sie Ihre CDs ja nicht in einer großen Tasche oder in einem Wäschekorb auf, sondern haben sie nebeneinander in ein Regal gestellt. Und Sie werden auch kaum zwischen Ihren CDs irgendwelche anderen Dinge wie Bücher, Landkarten oder Fotos stehen haben. Natürlich würden Sie Ihre CDs dann immer noch finden, aber am schnellsten funktioniert es halt, wenn die CDs fein säuberlich in einer Reihe stehen, denn bei dieser Anordnung lassen sich die CDs am bequemsten und schnellsten»durchblättern«. Array-Variablen deklarieren In Kapitel 4 haben Sie bereits gelernt, dass Sie eine Variable zuerst deklarieren müssen, bevor Sie sie im Programm verwenden können. Bei dieser Deklaration werden zum einen der Name der Variablen und zum anderen ihr Datentyp festgelegt. Im Falle einer Array-Variable sieht die entsprechende Anweisung zum Beispiel so aus: int[] quadratzahlen; 101
2 Wenn Sie diese Anweisung mit der Deklaration einer»normalen«variablen vergleichen, also mit int quadratzahl; fällt unmittelbar auf, dass sich die beiden Anweisungen nur durch die leeren eckigen Klammern unterscheiden. Und genau diese Klammern sind es, die festlegen, dass es sich bei der Variablen quadratzahlen um ein Array handelt. Die einzelnen Elemente dieses besitzen in diesem Beispiel den Datentyp int. Wenn Sie bereits Erfahrungen mit anderen Programmiersprachen haben, wird Ihnen aufgefallen sein, dass in der Deklaration keine Angabe über die Größe des gemacht wird. Hier unterscheidet sich C# von anderen Sprachen, denn bei C# ist die Angabe der Arraygröße bei der Deklaration unzulässig. Array-Variablen instanzieren Nach der Deklaration einer Variablen ist dem Compiler zunächst nur der Name und der Datentyp der neuen Variable bekannt. Bevor Sie mit einer Array-Variablen arbeiten können, müssen Sie noch eine Instanz der Variablen erstellen: quadratzahlen = new int[10]; Erst diese Anweisung sorgt dafür, dass der Variablen Speicherplatz zur Verfügung gestellt wird. Und jetzt muss natürlich auch die gewünschte Größe des angegeben werden, um dessen Speicherbedarf zu ermitteln. In diesem Beispiel haben wir dazu eine Zahl verwendet, es ist aber auch möglich, die Größe des mit Hilfe einer Variablen anzugeben. Dies ist zum Beispiel dann sinnvoll, wenn die benötigte Größe erst zur Laufzeit bekannt ist. Der erzeugten Variablen wird die Adresse des reservierten Speicherbereichs zugewiesen (bei Array- Variablen handelt es sich also nicht um Wert-, sondern um Verweistypen). Außerdem wird bei diesem Vorgang noch der Speicherplatz der Array-Variablen automatisch initialisiert, und zwar je nach verwendetem Datentyp mit 0, null oder false. Im Falle unseres quadratzahlen könnte die Speicherbelegung zum Beispiel so aussehen: Adresse Inhalt ? Variable Inhalt quadratzahlen ? Abbildung 7.1: In der Variablen quadratzahlen befindet sich die Adresse des zugehörigen Speicherplatzes. 102
3 7.2 Elemente eines ansprechen Die in der Abbildung angegebenen Adressen sind der Einfachheit halber in dezimaler Schreibweise angegeben. Wie Sie sehen, belegt das Array die Speicherzellen von bis einschließlich , also insgesamt 40 Byte. Wenn Sie sich noch einmal die Tabelle aus Kapitel 4 vor Augen führen, in der der Speicherbedarf der verschiedenen Integer-Datentypen aufgeführt ist, wird dieser Wert sofort nachvollziehbar: Ein einzelnes int belegt 4 Byte, d. h. ein Array aus zehn int benötigt dementsprechend 40 Byte. Array-Variablen manuell initialisieren Es ist auch möglich, ein Array mit individuellen Werten zu initialisieren. Dazu geben Sie die gewünschten Werte einfach hinter der Variablen innerhalb von geschweiften Klammern an: quadratzahlen = new int[10] {1, 4, 9, 16, 25, 36, 49, 64, 81, 100}; Die Elemente dieser Liste müssen dabei in Datentyp und Anzahl mit der Deklaration der Array- Variablen übereinstimmen. Es ist also zum Beispiel nicht möglich, nur einen Teil des manuell zu initialisieren und für den Rest die automatische Vorbelegung zu übernehmen. Die Deklaration und die Instanziierung einer Array-Variablen lassen sich auch in einer Zeile erledigen: int[] quadratzahlen = new int[10]; Und sogar die manuelle Initialisierung lässt sich noch in der Zeile unterbringen: int[] quadratzahlen = new int[10] {1, 4, 9, 16, 25, 36, 49, 64, 81, 100}; Wenn Sie diese Anweisung einmal genauer betrachten, wird Ihnen wahrscheinlich auffallen, dass sie redundante Informationen enthält. Und zwar wird durch die manuelle Initialisierung die Größenangabe des überflüssig. Der Compiler kann ja anhand der Liste mit den Initialisierungswerten problemlos erkennen, wie viele Elemente das Array erhalten soll. (Erinnern Sie sich? Die Anzahl der Elemente muss mit der Arraygröße korrespondieren). So ist es nur logisch, dass für die letzte Anweisung folgende Kurzform gültig ist: int[] quadratzahlen = {1, 4, 9, 16, 25, 36, 49, 64, 81, 100}; II Grundlagen von C# Achtung: Diese Form der Wertzuweisung ist nur bei der Initialisierung erlaubt! Die Schreibweise mit den geschweiften Klammern, die wir Ihnen gerade vorgestellt haben, können Sie nur bei der Initialisierung einer Array-Variablen verwenden. Sobald die Variable einmal erzeugt ist, ist diese Wertzuweisung nicht mehr möglich. 7.2 Elemente eines ansprechen Wir haben im letzten Abschnitt bereits kurz erwähnt, dass dem Namen einer Array-Variablen die Adresse des zugehörigen Speicherbereichs zugewiesen wird. Wie können Sie jedoch die zehn Variablen aus unserem Beispiel einzeln ansprechen? Ganz einfach: Die verschiedenen Elemente des werden durchnummeriert und lassen sich über diese Nummer, die als Index bezeichnet wird, gezielt ansprechen. Probieren Sie es doch gleich mal aus: 103
4 1. Erstellen Sie ein neues Projekt vom Typ Konsolenanwendung und geben Sie ihm den Namen Index. 2. Ergänzen Sie das Codegerüst um die beiden Zeilen: int[] quadratzahlen = { 1, 4, 9, 16, 25, 36, 49, 64, 81, 100 }; Console.WriteLine(quadratzahlen[5]); 3. Starten Sie das Programm mit Strg+F5 und interpretieren Sie das angezeigte Ergebnis. Wie Sie sehen, wird die Nummer des gewünschten Elements einfach hinter dem Namen der Variable in eckigen Klammern angegeben. Der Ausdruck quadratzahlen[5] liefert allerdings den Wert 36, der sich nicht an der fünften, sondern erst an der sechsten Stelle des befindet. Die Erklärung für diesen scheinbaren Fehlgriff: Die Nummerierung beginnt nicht bei 1, sondern bei 0. Diese auf den ersten Blick unsinnige Regelung wird verständlicher, wenn man den Ausdruck quadratzahlen[5] so interpretiert:»nimm die in quadratzahlen gespeicherte Adresse und gehe 5 Elemente weiter«. Will man also das erste Element des ansprechen, muss man nach dieser Regel 0 Schritte weitergehen, da die Adresse des ersten Elements mit der in quadratzahlen abgelegten Adresse des identisch ist. 4. Ändern Sie das Programm, indem Sie [5] durch [10] ersetzen. Starten Sie das Programm diesmal mit F5 (Debuggen/Debuggen starten). static void Main(string[] args) { int[] quadratzahlen = { 1, 4, 9, 16, 25, 36, 49, 64, 81, 100 }; Console.WriteLine(quadratzahlen[10]); } Wie Sie sehen, hat das Programm jetzt eine Ausnahme ausgelöst, da Sie versucht haben, auf das elfte Element des zuzugreifen. Da das Array in diesem Beispiel jedoch nur 10 Elemente enthält, würde der Ausdruck quadratzahlen[10] auf einen Speicherbereich außerhalb des zugreifen. Genau das ist aber unzulässig und führt zu der erwähnten Ausnahme. Sicherheit durch rigorose Überwachung der Speicherzugriffe Dass ein Zugriff auf fremden Speicher dermaßen konsequent geahndet wird, hat seinen guten Grund. Die Vergangenheit hat nämlich gezeigt, dass viele Programme nicht ausreichend vor solchen»fehlgriffen«geschützt sind. Diese Bereichsüberschreitungen führen aber häufig zu schweren Programmabstürzen, weil dabei schnell wichtige Speicherbereiche überschrieben werden können. Und auch viele Viren nutzen solche Schwachstellen gezielt aus, um eigenen Virencode in andere Programme einzuschleusen. Das.NET Framework schiebt solchen Versuchen nun einen dicken Riegel vor. Alle Elemente eines durchlaufen Bisher haben wir nur auf ein einzelnes Array-Element zugegriffen. Häufig müssen jedoch alle Elemente eines angesprochen werden. Diese Aufgabe lässt sich sehr elegant mit einer for-schleife lösen, die wir Ihnen im letzten Kapitel vorgestellt haben. Stellen Sie sich zum Beispiel vor, Sie wollten im Array quadratzahlen jetzt die ersten tausend Quadratzahlen speichern. In diesem Fall wäre natürlich eine Initialisierung, wie wir sie im letzten Abschnitt vorgenommen haben, völlig unpraktikabel. Viel schneller und sicherer geht es so: 104
5 7.2 Elemente eines ansprechen int[] quadratzahlen = new int[1000]; for (int i = 0; i < 1000; i++) quadratzahlen[i] = i * i; Beachten Sie, dass der Schleifenzähler i die Werte von 0 bis 999 durchläuft (und nicht von 1 bis 1000). So elegant diese Lösung auf den ersten Blick auch aussieht sie hat noch einen kleinen Schönheitsfehler: Dadurch, dass in der Abbruchbedingung die Größe des als konstanter Wert verwendet wird, laufen Sie Gefahr, das Array nur teilweise zu initialisieren oder sogar eine IndexOutOfRange-Ausnahme auszulösen, wenn Sie die Größe des ändern und dabei vergessen, die for-schleife entsprechend anzupassen. Das Problem lässt sich in C# jedoch leicht lösen. Sie können nämlich die Größe eines, d. h. die Anzahl seiner Elemente, während der Laufzeit ermitteln. Dazu rufen Sie die Eigenschaft Length der Array-Variablen auf, die genau diese Information liefert. Die geänderte for-schleife sieht dann so aus: for (int i = 0; i < quadratzahlen.length; i++) quadratzahlen[i] = i * i; mit foreach durchlaufen In C# existiert eine weitere Anweisung, mit der sich sogar noch bequemer als mit der for-schleife durchlaufen lassen. Sie heißt foreach und wird folgendermaßen verwendet: foreach (int i in quadratzahlen) Console.WriteLine(i); Die foreach-anweisung durchläuft automatisch alle Elemente des und weist dabei den Wert des aktuellen Elements der Variablen i zu. Das heißt, die Variable i ist in diesem Fall kein Schleifenzähler! Deshalb muss diese Variable auch den gleichen Datentyp besitzen wie die Array-Elemente. Da sich der Zugriff auf ein Array mit foreach so elegant lösen lässt, liegt der Versuch nahe, die foreach- Anweisung auch für die Initialisierung eines Array zu verwenden. Also zum Beispiel: string[] nachnamen = new string[10]; foreach (string s in nachnamen) s = "N.N."; Wenn Sie diese Anweisung kompilieren, erhalten Sie eine Fehlermeldung des Compilers. Die in der foreach-anweisung verwendete Variable ist nämlich eine so genannte Iterationsvariable, auf die Sie nur lesend zugreifen dürfen. II Grundlagen von C# 105
6 Abbildung 7.2: Die foreach-anweisung erlaubt nur lesende Zugriffe. Größe eines ändern Wir hatten zu Beginn des Kapitels gesagt, dass die Größe eines bei seiner Instanziierung festgelegt werden muss. Das ist vom Prinzip her auch richtig, doch es gibt in der Praxis durchaus Situationen, in denen es vorteilhaft wäre, wenn man die Größe eines während des Programmablaufs verändern könnte. Die eigentliche Schwierigkeit ist natürlich das Vergrößern des, denn der Speicherbereich eines muss bekanntlich zusammenhängend sein. Da aber der Speicherplatz direkt hinter einem Array mit nahezu hundertprozentiger Wahrscheinlichkeit bereits belegt ist, gibt es nur eine Möglichkeit, um ein Array zu vergrößern: Es muss ein neues Array der gewünschten Größe erstellt und anschließend der Inhalt des alten hineinkopiert werden. Außerdem müssen alle Variablen angepasst werden, die auf das alte Array verweisen. Zum Schluss kann dann das alte Array gelöscht werden. Seit der Version 2.0 des.net Framework existiert in der Klasse Array eine Methode, die genau diese Aufgaben für Sie erledigt. Die Methode erwartet dazu einen Verweis auf das zu ändernde Array und die neue Anzahl der Elemente. Mit der folgenden Anweisung können Sie zum Beispiel die Größe des quadratzahlen verdoppeln: Array.Resize(ref quadratzahlen, quadratzahlen.length * 2); Unabhängig davon, ob Sie ein Array vergrößern oder verkleinern, erstellt die Resize-Methode in jedem Fall ein neues Array bereit. (Wenn das Array bereits die gewünschte Größe besitzt, bleibt die Methode wirkungslos). Wird das Array verkleinert, fallen beim anschließenden Kopieren die überschüssigen Elemente weg. Beim Vergrößern bleiben demnach die zusätzlichen Elemente des neuen leer bzw. behalten die Werte, mit denen das Array beim Erstellen initialisiert wurde (je nach Datentyp der Elemente mit 0, null oder false). 106
7 7.3 Mehrdimensionale 7.3 Mehrdimensionale Bisher haben wir Sie nur mit eindimensionalen bekannt gemacht. In C# ist es jedoch auch möglich, mehrdimensionale zu erstellen. Das einfachste mehrdimensionale Array ist naturgemäß das zweidimensionale, an dem wir Ihnen den Umgang mit mehrdimensionalen erklären werden. Stellen Sie sich vor, Sie wollten ein Programm erstellen, mit dem man Schiffe versenken spielen kann. Das Spielfeld soll aus 10 Spalten und 10 Zeilen bestehen, hat also insgesamt 100 Felder. Wenn Sie nun diese Felder in einem eindimensionalen Array verwalten würden, müssten Sie bei jedem Zugriff auf das Array die Zeilen- und Spaltenangaben umrechnen. Mit einem zweidimensionalen Array können Sie sich diesen Umstand ersparen, denn es ist genauso aufgebaut wie Ihr Spielfeld. Die Deklaration eines mehrdimensionalen Array erfolgt analog zu den eindimensionalen : int[,] spielfeld1; Die neue Dimension wird also durch ein zusätzliches Komma zwischen den eckigen Klammern angegeben. Dementsprechend sieht die Instanziierung einer der Array-Variablen für unser Beispiel so aus: int[,] spielfeld1 = new int[10,10]; Auch wenn Sie das Array manuell initialisieren wollen, gehen Sie analog zum eindimensionalen Fall vor. Allerdings ist diese Form der Initialisierung bei mehreren Dimensionen deutlich unhandlicher: int[,] arr2d = new int[2, 4] { { 1, 2, 3, 4}, {5, 6, 7, 8} }; Die erste Zahl in den eckigen Klammern gibt also die Dimension in den äußeren geschweiften Klammern an, die zweite Zahl die Dimension der zweiten geschweiften Klammerebene und so weiter. Das nächste Beispiel zeigt die Initialisierung für ein dreidimensionales Array und Sie sehen, die Angelegenheit wird langsam unübersichtlich: int[,,] arr3d = new int[2, 3, 4] { { { 1, 2, 3, 4}, { 5, 6, 7, 8}, { 9, 10, 11, 12} }, { {13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24} } }; Um auf ein bestimmtes Element eines mehrdimensionalen zuzugreifen, müssen Sie für jede Dimension den gewünschten Index angeben. Wenn Sie zum Beispiel im Array spielfeld1 dem Element, das sich in der dritte Zeile (1. Dimension) und dort in der zweiten Spalte (2. Dimension) befindet, eine 1 zuweisen wollen, lautet die entsprechende Anweisung: Spielfeld1[2,1] = 1; II Grundlagen von C# Mehrdimensionale durchlaufen Um alle Elemente eines mehrdimensionalen zu durchlaufen, verwendet man üblicherweise verschachtelte for-schleifen. Für jede Dimension benötigt man eine separate Schleife mit einer eigenen Schleifenvariablen. Um z. B. das Spielfeld aus dem letzten Beispiel auszugeben, können Sie folgenden Code verwenden, dessen Ausgabe Sie im nächsten Bild sehen (das vollständige Programm finden Sie im Beispielordner Kap07\SchiffeVersenken): for (int zeile = 0; zeile < 10; zeile++) { for (int spalte = 0; spalte < 10; spalte++) { Console.Write(spielfeld1[zeile, spalte]); } Console.WriteLine(); } 107
8 Abbildung 7.3: Der Inhalt des zweidimensionalen wurde mit zwei verschachtelten for-schleifen ausgegeben. Array-Elemente mit foreach durchlaufen Die foreach-anweisung lässt sich nur für eindimensionale verwenden. Bei mehrdimensionalen kommen Sie also um eine»echte«schleifenkonstruktion nicht herum. 7.4 Nützliche Methoden für Sie haben in den letzten Abschnitten bereits zwei Methoden kennengelernt, die Sie im Zusammenhang mit verwenden können. Natürlich gibt es in C# noch viele andere Methoden, von denen wir Ihnen nun einige besonders wichtige und nützliche vorstellen möchten. Die GetLength-Methode Die Length-Eigenschaft haben wir zwar bereits in einem Beispiel eingesetzt und erläutert, aber im Zusammenhang mit mehrdimensionalen müssen wir noch einige Informationen nachtragen. Angenommen, Sie haben mit folgender Anweisung ein zweidimensionales Array erzeugt: int[,] matrix = new int[3,4]; Zum Initialisieren dieses wollen Sie zwei verschachtelte for-schleifen benutzen. So weit, so gut. Da Sie sich an unseren Hinweis auf die Length-Eigenschaft (siehe Seite 105) erinnern, möchten Sie die Abbruchbedingung der for-schleifen flexibel halten und in ihr keine konstanten Werte verwenden. Kann Ihnen die Length-Eigenschaft hier weiterhelfen? Nein, denn diese Eigenschaft liefert immer die Gesamtanzahl aller Elemente eines, im aktuellen Beispiel also 12. Sie benötigen hingegen eine Möglichkeit, um die Anzahl der Elemente einer bestimmten Dimension des zu ermitteln. Die Lösung ist in diesem Fall die Methode GetLength(), deren Einsatz Sie im nächsten Beispiel studieren können: 108
9 for (int i = 0; i < matrix.getlength(0); i++) for (int j = 0; j < matrix.getlength(1); j++) matrix[i, j] = i + j; 7.4 Nützliche Methoden für Wie Sie sehen, erwartet die Methode GetLength() als einzigen Parameter die Angabe der gewünschten Dimension, wobei die erste Dimension den Wert 0 hat. Daten zwischen kopieren Mit der Methode CopyTo() lassen sich Daten zwischen eindimensionalen kopieren. Die Methode erwartet als Parameter das Zielarray sowie den Index des Zielarrays, an dem mit dem Einfügen der Daten begonnen werden soll. Im folgenden Codeschnipsel wird der Inhalt von array1 nach array2 kopiert, wobei der Einfügevorgang in array2 beim zehnten Element beginnt: int[] array1 = new int[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int[] array2 = new int[25]; array1.copyto(array2, 10); Wenn Sie anschließend den Inhalt von array2 auf dem Bildschirm ausgeben (z. B. mit einer foreach- Anweisung) erhalten Sie folgende Ausgabe: C# kennt auch noch eine leistungsfähigere Methode zum Kopieren von Array-Elementen. Es handelt sich um die Methode Copy(), die auch mit mehrdimensionalen verwendet werden kann. Außerdem können Sie bei dieser Methode den Bereich im Quell-Array festlegen, der von der Methode kopiert werden soll. Weitere Informationen zu dieser Methode finden Sie in der Online-Hilfe. II Grundlagen von C# duplizieren Da es sich bei Array-Variablen um Verweistypen handelt, lassen sie sich mit einer einfachen Zuweisung nicht kopieren. Der folgende Code erstellt also kein Duplikat von array1, sondern er erreicht lediglich, dass die Variable array2 anschließend auf die gleiche Arrayinstanz, also den gleichen Speicherbereich, wie array1 zeigt: int[] array1 = new int[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int[] array2; array2= array1; Um tatsächlich eine Kopie eines anzulegen, müssen Sie sich wieder der Hilfe einer Methode bedienen. Sie trägt in diesem Fall den Namen Clone und wird folgendermaßen verwendet: int[] array1 = new int[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int[] array2; array2 = (int[]) array1.clone(); Die Typumwandlung durch (int[]) ist erforderlich, da die Methode ein Objekt zurückgibt und der Compiler keine implizite Typumwandlung vornimmt. Bei der erzeugten Kopie handelt es sich um eine sogenannte flache Kopie. Damit ist gemeint, dass lediglich die Daten des selbst, nicht jedoch die Daten der Objekte, auf die im Array eventuell verwiesen wird, kopiert werden. 109
10 7.5 Die Klasse ArrayList Wenn Sie mehrere Elemente verwalten möchten, deren Anzahl und Anordnung sich während der Laufzeit des Programms regelmäßig ändern, bietet ein normales Array zu wenig Flexibilität. Wie Sie in den letzten Abschnitten gesehen haben, ist es zwar möglich, nachträglich zu vergrößern und ihren Inhalt umzukopieren, aber der Aufwand, um zum Beispiel ein neues Element an einer bestimmten Position des einzufügen, wäre einfach zu groß und hätte mit gradliniger Programmierung nicht mehr viel zu tun. Für solche Fälle ist in C# die Klasse ArrayList aus dem Namensraum System.Collections prädestiniert. Dabei handelt es sich um einen Datentyp, der zwar viel Ähnlichkeit mit den zuvor besprochenen hat, dem jedoch ein vollständig anderes Speicherkonzept zugrunde liegt. Variablen vom Datentyp Array- List werden nämlich nicht in einem zusammenhängenden Bereich im Speicher abgelegt, sondern als Liste verwaltet. Außerdem handelt es sich um Verweistypen, d. h. in solch einer Liste können die Elemente einen beliebigen Datentyp annehmen. Dem damit einhergehenden Performanceverlust steht ein enormer Zugewinn an Flexibilität gegenüber. Um eine neue Instanz der ArrayList-Klasse zu erstellen, können Sie im einfachsten Fall folgende Anweisung verwenden. (Dazu müssen Sie natürlich vorher mit using den Namensraum System.Collections bekannt machen.): ArrayList arrayliste = new ArrayList(); Hierdurch wird eine leere ArrayListe der Kapazität 0 erzeugt. Die Kapazität einer ArrayListe gibt an, wie viele Elemente in der Liste gespeichert werden können, bevor neuer Speicherplatz für die Instanz angefordert werden muss. Können Sie bereits bei der Definition der Variable absehen, wie viele Elemente Sie in der ArrayListe unterbringen müssen, sollten Sie deren Kapazität direkt vorgeben: ArrayList arrayliste = new ArrayList(10); Wenn Sie einer vollen Liste ein weiteres Element hinzufügen, wird deren Kapazität automatisch verdoppelt. Das heißt, wenn Sie in eine Liste, die 1000 Elemente aufnehmen kann, das 1001te Element einfügen, wächst die Liste im Speicher auf 2000 Elemente an. Der Vollständigkeit halber sei aber schon jetzt erwähnt, dass es auch eine Möglichkeit gibt, den ungenutzten Platz einer ArrayList-Variablen wieder freizugeben. Die entsprechende Methode stellen wir Ihnen im weiteren Verlauf des Kapitels vor. Vorläufig brauchen Sie sich nur zu merken, dass man bei Objekten der ArrayList-Klasse zwischen der Anzahl der Elemente und der Kapazität der Liste unterscheidet. Der Zugriff auf die einzelnen Elemente einer ArrayListe erfolgt wie bei einem Array über einen Index. Und natürlich können Sie auch die foreach-anweisung verwenden, um eine ArrayListe zu durchlaufen. Vorsicht: Verwechseln Sie nicht die Kapazität mit der tatsächlichen Anzahl der Elemente Auch wenn Sie bei der Instanziierung einer ArrayList-Variablen die Kapazität der Liste angeben, enthält die Liste zunächst keine Elemente! Der folgende Code löst daher die Ausnahme System.ArgumentOutOfRange aus: ArrayList arrayliste = new ArrayList(10); Console.WriteLine(arrayListe[1]); 110
11 Neue Elemente in eine ArrayListe aufnehmen 7.5 Die Klasse ArrayList Die einfachste Möglichkeit, um einer ArrayListe ein neues Element hinzuzufügen, ist die Add-Methode. Das neue Element wird dabei einfach an die bestehende Liste angefügt: ArrayList arrayliste = new ArrayList(); arrayliste.add(10); arrayliste.add("zehn"); Beachten Sie, dass das erste Element einen Integer-Wert erhält und das zweite Element eine Zeichenkette aufnimmt. Wir hatten ja eingangs schon erwähnt, dass ArrayListen im Gegensatz zu nicht der Beschränkung auf einen Datentyp unterliegen. Wenn Sie die Position des neuen Elements vorgeben möchten, müssen Sie die Methode Insert benutzen. Die Anweisung arrayliste.insert(1, 11); fügt der Liste das neue Element am Index 1 zu, also an der zweiten Position der Liste. Wenn Sie den Inhalt des anschließend mit einer Schleife ausgeben, würde das Ergebnis folglich so aussehen: 10, 11, "zehn" II Grundlagen von C# Rückgabewert der Add-Methode Wenn Sie mit der Add-Methode ein neues Element in eine ArrayListe aufnehmen, liefert der Rückgabewert von Add den Index des neuen Elements. Diese Information ist allerdings nur von begrenztem Nutzen, da sich der Index eines Elements durch das Hinzufügen oder Entfernen von anderen Elementen jederzeit ändern kann. Elemente aus einer ArrayListe entfernen Zum Entfernen von Elementen aus einem ArrayList-Objekt stellt die Klasse ArrayList analog zum Hinzufügen von Elementen zwei Methoden zur Verfügung: Remove und RemoveAt. Mit der ersten Methode können Sie das gewünschte Element über seinen Inhalt ansprechen. Um zum Beispiel das im letzten Beispiel nachträglich eingefügte Element wieder zu löschen, könnten Sie folgenden Methodenaufruf verwenden: arrayliste.remove(11); Diese Anweisung hat allerdings einen kleinen Haken: Wenn sich in der Liste mehrere Objekte mit diesem Wert befinden, wird nur das erste dieser Elemente gelöscht! Gegebenenfalls müssen Sie dann noch mit der Methode Contains prüfen, ob der betreffende Wert noch öfter in der Liste vorkommt. Wenn Sie die exakte Position des zu löschenden Elements in der Liste kennen, können Sie die Methode RemoveAt benutzen, der Sie den Index des betreffenden Elements übergeben: arrayliste.removeat(1); Durch das Entfernen von Elementen aus einer Liste reduziert sich zwar die Gesamtanzahl der Listenelemente, die aktuelle Kapazität der Liste verändert sich dadurch jedoch nicht. Falls für eine Liste die Diskrepanz aus tatsächlicher (=Kapazität) und benötigter Größe (=Anzahl der Elemente) zu groß wird, können Sie die Kapazität der Liste mit der Methode TrimToSize anpassen. Die Liste belegt dann nur noch genau den Speicherplatz, der für die in ihr enthaltenen Elemente benötigt wird. 111
12 Das Beispielprogramm ListeFüllen Damit Sie ein Gefühl für die Größenänderungen eines ArrayList-Objekts entwickeln können, haben wir ein kleines Beispielprogramm entwickelt. Mit diesem Programm können Sie eine Liste Element für Element füllen und dabei die Veränderungen ihrer Kapazität beobachten: 1. Geben Sie den folgenden Programmcode in ein leeres Projekt ein oder öffnen Sie das Beispielprojekt Kap07\Listefüllen aus dem Ordner, in den die Beispiele für dieses Buch installiert wurden. ArrayList arrayliste = new ArrayList(1); string eingabe; // using System.Collections; nicht vergessen! Console.WriteLine("Kapazität des : {0} Elemente", arrayliste.capacity); Console.WriteLine("Anzahl der Elemente : {0}", arrayliste.count); Console.WriteLine(); do { Console.Write("Geben Sie eine Zahl ein (beenden mit Eingabe): "); eingabe = Console.ReadLine(); // Eingabe einlesen if (eingabe.equals("")) break; // Eine leere Eingabe beendet die Schleife else { try arrayliste.add(int.parse(eingabe)); // Element in die Liste eintragen catch (FormatException) Console.WriteLine("Ungültige Eingabe wird ignoriert!\n"); Console.Write("Inhalt des : "); // Aktuellen Inhalt der ArrayList anzeigen foreach (int i in arrayliste) Console.Write(i + " "); Console.WriteLine(); Console.WriteLine("Kapazität des : {0} Elemente", arrayliste.capacity); Console.WriteLine("Anzahl der Elemente : {0}", arrayliste.count); Console.WriteLine(); } } while (true); // Größe des an seinen tatsächlichen Inhalt anpassen arrayliste.trimtosize(); Console.WriteLine("TrimToSize durchgeführt. Neue Kapazität des : {0} Elemente\n", arrayliste.capacity); 2. Starten Sie das Programm mit Strg+F5. 3. Füllen Sie die Liste, indem Sie der Reihe nach die gewünschten Zahlen eingeben und jeweils mit der Eingabetaste bestätigen. Das Programm zeigt nach jeder Eingabe die neue Anzahl der Elemente und die aktuelle Kapazität der Liste an. 4. Wenn Sie die Eingabetaste betätigen, ohne zuvor eine Zahl eingegeben zu haben, wird das Programm beendet. Zuvor wird noch die Methode TrimToSize aufgerufen und die neue Kapazität auf dem Bildschirm ausgegeben. 112
13 7.6 Übungen zu diesem Kapitel Abbildung 7.4: Die Kapazität des wird dynamisch angepasst. 7.6 Übungen zu diesem Kapitel In diesem Abschnitt finden Sie einige Übungen zu diesem Kapitel. Die richtigen Antworten und Lösungen finden Sie wie immer auf der Website II Grundlagen von C# Übung 7.1 Erweitern Sie das Programm Index von Seite 104 um einen try-catch-block, der die IndexOutOfRange- Ausnahme behandelt. Hinweis: Diese Konstruktion haben wir in Kapitel 5 vorgestellt. Übung 7.2 Mit welcher Methode können Sie bei einem mehrdimensionalen Array die Anzahl der Elemente einer bestimmten Dimension ermitteln? Übung 7.3 Erstellen Sie eine Instanz der ArrayList-Klasse. Fügen Sie der Liste ein Element mit dem Integerwert 10 und ein weiteres mit der Zeichenkette "zehn" hinzu. Geben Sie den Inhalt dann mit einer foreach- Anweisung auf der Konsole aus. 113
14 7.7 Zusammenfassung In diesem Kapitel haben Sie erfahren, was man in C# unter einem Array versteht und wichtige Techniken im Umgang mit kennengelernt: Unter einem Array versteht man die Zusammenfassung mehrerer Variablen des gleichen Typs, die unter einem gemeinsamen Namen angesprochen werden können. werden in einem zusammenhängenden Speicherbereich abgelegt. Dadurch werden die Speicherzugriffe sehr effizient. in C# sind nullbasiert, das heißt, das erste Element wird über den Index 0 angesprochen. Der Zugriff mit einem ungültigen Index löst eine IndexOutOfRange-Ausnahme aus. Um alle Elemente eines zu durchlaufen, eignet sich am besten die foreach-anweisung. Sie können dabei allerdings nur lesend auf das Array zugreifen. Für schreibende Zugriffe verwenden Sie am besten eine for-schleife. Mit der Methode Array.Resize kann die Größe eines nachträglich geändert werden. Die aktuellen Daten des bleiben dabei erhalten. Falls das Array verkleinert wird, fallen die überschüssigen Elemente weg. Mehrdimensionale werden durch zusätzliche Kommata in den eckigen Klammern erzeugt. Die Initialisierung und der Zugriff erfolgt analog zu eindimensionalen. Die Klasse Array enthält viele nützliche Methoden zum Bearbeiten von, von denen wir Ihnen die Methoden GetLength(), CopyTo() und Clone() vorgestellt haben. Im letzten Abschnitt haben Sie ArrayListen kennengelernt. ArrayListen werden nicht zusammenhängend im Speicher abgelegt, sondern als Listen verwaltet, und sind dadurch besonders flexibel. 114
C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections. Leibniz Universität IT Services Anja Aue
C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections Leibniz Universität IT Services Anja Aue Arrays... speichern mehrere Werte vom gleichen Datentyp. fassen zusammenhängende Werte
MehrArrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3
Programmieren mit Java Modul 3 Arrays Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Eindimensionale Arrays 3 2.1 Arrays deklarieren.............................. 3 2.2 Arrays erzeugen................................
MehrProgrammieren in C/C++ und MATLAB
Programmieren in C/C++ und MATLAB Sven Willert Sabine Schmidt Christian-Albrechts-Universität zu Kiel CAU 5-1 Übung Schreiben Sie ein Programm, das die Zahl π durch π = 4 4 4 4 4 4 + + +... 3 5 7 9 11
Mehrint i=1; //Integerzahl i anlegen und mit 1 initialisieren float wert; //Floatzahl deklarieren scanf( %f,&wert); //Wert über Tastatur eingeben
Datenfelder (Array) Seite 1 von 7 Bei den bisherigen Programmen wurde für jede verwendete Variable (oder für jedes Objekt) ein eigener Typ und Name vergeben. Die Initialisierung, d.h. die Belegung mit
MehrFelder (1) Allgemeines
Felder (1) Allgemeines Gleichartige Daten, wie Tabelle von Zahlen, Datumswerten, Namen etc. Felder (engl. Array) stellen einen Verbundtyp dar, in dem mehrere Daten desselben Typs gespeichert werden Oft
MehrGI Vektoren
Vektoren Problem: Beispiel: viele Variablen vom gleichen Typ abspeichern Text ( = viele char-variablen), Ergebnisse einer Meßreihe ( = viele int-variablen) hierfür: Vektoren ( = Arrays = Feld ) = Ansammlung
MehrSchleifen Datenfelder (Arrays) Verzweigungen
Schleifen Datenfelder (Arrays) Verzweigungen Vektoren, Matrizen, Tabellen for, while, foreach, if-else und switch-case Dr. Beatrice Amrhein Überblick Schleifen o for, while, foreach Eindimensionale Arrays
Mehr9. Vektoren. (auch Felder/array)
9. Vektoren (auch Felder/array) Motivation Hat man mehrere Objekte gleichen Datentyps, so kann man sie explizit deklarieren, wenn die Anzahl bekannt ist double x1,x2,x3,x4; Nachteile: versagt, -wenn die
MehrGrundlagen der OO- Programmierung in C#
Grundlagen der OO- Programmierung in C# Technische Grundlagen 1 Dr. Beatrice Amrhein Überblick Visual Studio: Editor und Debugging Die Datentypen Methoden in C# Die Speicherverwaltung 2 Visual Studio 3
Mehr1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r
1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen
Mehr1. Referenzdatentypen: Felder und Strings
1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen
MehrZeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.
Zeiger C-Kurs 2012, 2. Vorlesung Tino Kutschbach tino.kutschbach@campus.tu-berlin.de http://wiki.freitagsrunde.org 10. September 2012 This work is licensed under the Creative Commons Attribution-ShareAlike
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine
Mehr3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.
3.8 Objekttypen und Arrays Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen. Praktische Informatik I Wolfgang Effelsberg 3. Die Programmiersprache Java 3.8-1 Primitive Datentypen
MehrJavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.
JavaScript JavaScript wird direkt in HTML-Dokumente eingebunden. Gib folgende Zeilen mit einem Texteditor (Notepad) ein: (Falls der Editor nicht gefunden wird, öffne im Browser eine Datei mit der Endung
MehrListen. ArrayList. Definition Listen erzeugen Listen verändern Listen durchlaufen Listen sortieren. Dr. Beatrice Amrhein
Listen ArrayList Definition Listen erzeugen Listen verändern Listen durchlaufen Listen sortieren Dr. Beatrice Amrhein Definition 2 Definition: Liste (ArrayList) Eine C#-Liste (ArrayList) ist eine geordnete
MehrFH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen
5 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Referenzen Beispiel an der einfachen Klasse Walze: public class Walze { int id; public Walze(int id) { this.id = id; Verwenden
MehrFelder, Zeiger und Adreßrechnung
Felder, Zeiger und Adreßrechnung Felder bestehen aus Variablen eines einzigen Datentyps. Bisher kennen wir eindimensionale Felder. In C sind Felder mit beliebigen Dimensionen möglich. Unsere räumliche
Mehr6. Zeiger Allgemeines Definition eines Zeigers
6. Zeiger www.c-programme.de Stefan Thiemert Kapitel 6 - Seite 1 von 6 6. 1. Allgemeines Zeiger spielen in der Programmierung eine wichtige Rolle. Sie sind wichtig, bei der Arbeit mit Arrays und Funktionen.
MehrEinstieg in die Informatik mit Java
1 / 27 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick: Klassen als Datenstruktur 2 Vereinbarung
Mehr5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!
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! Feld: Index: 17 3-2 9 0 1 0 1 2 3 4 5 Harald Räcke 114/656
Mehr4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen
. Gleitkommazahlen In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen Umrechnen von Einheiten und Währungen Jede Zahl x Q mit x 0 lässt sich folgendermaßen schreiben: x = s m e mit
MehrÜbungsblatt 1. Java Vorkurs (WS 2017)
Übungsblatt 1 Java Vorkurs (WS 2017) Aufgabe 1 Hallo-Welt Erstelle ein neues Projekt mit dem Namen HelloJava. Erzeuge in diesem Projekt eine neue Klasse HelloJava. (a) Schreibe die main-methode in die
MehrObjektorientierte Programmierung und Modellierung
Objektorientierte Programmierung und Modellierung Einführung, Teil 2 24.10.17 - WS17/18 Hakan Aksu 1 Raumänderung beachten Dienstag 14:15-15:45 Uhr in M001 (anstatt K101) 2 Ausfalltermine 31.10 Vorlesung
MehrModul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2
Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 2 SS 2016
MehrObjekttypen. Referenzen, Objekte, Gleichheit, Wrapper, Arrays, mehr-dimensionale Arrays, Bildbearbeitung, krumme Arrays
Objekttypen Referenzen, Objekte, Gleichheit, Wrapper, Arrays, mehr-dimensionale Arrays, Bildbearbeitung, krumme Arrays Primitive- und Objekt-Datentypen Primitive Datentypen benötigen einen vorher genau
MehrGrundlagen und Konzepte von C Datenstrukturen
Grundlagen und Konzepte von C Datenstrukturen Ausarbeitung von Andreas Gadelmaier Proseminar C Grundlagen und Konzepte Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik,
MehrKlassen als Datenstrukturen
Einstieg in die Informatik mit Java, Vorlesung vom 27.11.07 Übersicht 1 Klassen als Datenstruktur 2 Vereinbarung von Klassen 3 Erzeugen von Objekten - Instanzen einer Klasse 4 Zugriff auf Attribute 5 Initialisierung
MehrDas diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen
Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen 16OH21005 gefördert. Die Verantwortung für den Inhalt dieser
MehrUmsetzung einer Klassenkarte in einer Programmiersprache
Klassen in Java Umsetzung einer Klassenkarte in einer Programmiersprache Objektorientierte Programme bestehen (nur) aus Klassendefinitionen In Klassendefinitionen wird die Struktur der Objekte festgelegt,
MehrC++ - Objektorientierte Programmierung Konstante und statische Elemente
C++ - Objektorientierte Programmierung Konstante und statische Elemente hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja
MehrAusgabe:
Aufgabe 2.10: Schreiben Sie ein Programm, das zunächst die Quadratzahlen zu den Zahlen 1-10 mit Hilfe einer While- Schleife und danach die Quadratzahlen zu den Zahlen 3, 6, 9,.., 30 mit Hilfe einer For-Schleife
MehrTag 4 Repetitorium Informatik (Java)
Tag 4 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Arrays (Reihungen)
MehrGrundlagen der Programmierung Teil1 Einheit III Okt. 2010
Grundlagen der Programmierung Teil1 Einheit III - 22. Okt. 2010 GDP DDr. Karl D. Fritscher basierend auf der Vorlesung Grundlagen der Programmierung von DI Dr. Bernhard Pfeifer Einschub Bevor wir mit den
MehrDie Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache. Dr. Beatrice Amrhein
Die Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache Dr. Beatrice Amrhein Überblick Speicherverwaltung: Stack und Heap Ein- und Ausgabe über die Console Variablen und Operatoren Parameter
MehrC# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services
C# - Einführung in die Programmiersprache Methoden Leibniz Universität IT Services 02.07.12 Methoden... sind Subroutinen in einer Klasse. können einen Wert an den Aufrufer zurückgeben. verändern die Eigenschaften
MehrM. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung
M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales
Mehr+ C - Array (Vektoren, Felder)
+ C - Array (Vektoren, Felder) Eindimensionale Arrays Beim Programmieren steht man oft vor dem Problem, ähnliche, zusammengehörige Daten (vom gleichen Datentyp) zu speichern. Wenn man zum Beispiel ein
MehrDr. Monika Meiler. Inhalt
Inhalt 5 Referenzdatentypen - Felder... 5-2 5.1 Eindimensionale Felder - Vektoren... 5-3 5.1.1 Vereinbarung... 5-3 5.1.2 Referenzen sind keine Felder... 5-6 5.1.3 Kopieren eindimensionaler Felder... 5-7
MehrC++ Notnagel. Ziel, Inhalt. Programmieren in C++
C++ Notnagel Ziel, Inhalt Ich versuche in diesem Dokument noch einmal die Dinge zu erwähnen, die mir als absolut notwendig für den C++ Unterricht und die Prüfungen erscheinen. C++ Notnagel 1 Ziel, Inhalt
MehrEinstieg in die Informatik mit Java
1 / 24 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 24 1 Klassen als Datenstruktur 2 Vereinbarung von
MehrAssoziative Container in C++ Christian Poulter
Assoziative Container in C++ Christian Poulter Seminar: Die Sprache C++ Mat-Nr.: 53 03 129 EMail: inf@poulter.de Christian Poulter Assoziative Container in C++ Seite 1/10 Inhalt 1. Einleitung: Container...
MehrGrundlagen der Objektorientierten Programmierung - Statische Arrays
Statische Arrays Ein Array ist ein Behälter für Datenelemente desselben Typs. Arrays können beliebig viele Dimensionen haben. Die Standardform ist das eindimensionale Array, das man sich in Zeilenform
MehrSprachkonstrukte Verzweigungen und Array-Strukturen
Sprachkonstrukte Verzweigungen und Array-Strukturen Dr. Beatrice Amrhein Überblick Verzweigungen o if/else o switch/case Array-Strukturen o Vektoren und Matrizen 2 Verzweigungen 3 Verzweigungen: if/else
MehrII. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )
Technische Informatik für Ingenieure (TIfI) WS 2006/2007, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Rekursion Datenstrukturen Merge S ( split, s, merge ) Beispiel:
MehrII. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:
Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen
MehrInstitut für Informatik
Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung WS 2010 Praktikum: Grundlagen der Programmierung Lösungsblatt 4 Prof. R. Westermann, A. Lehmann, R.
MehrComputergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2
Computergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2 Neben vector ist list die zweite wichtige Containerklasse. Um unsere Kenntnisse von Containerklassen zu erweitern,
Mehr1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster
1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster Aufgabe: Bearbeitungszeit: ca. 1/4 Std) Schreiben Sie ein "objektorientiertes" Programm ("CuB_05_1") für das Sammeln der Körner. Aufgabenbeschreibung:
MehrZeichenketten sind uns bisher nur als konstante Texte begegnet, welche in "" angegeben waren; z.b. als Formatstring in der printf()-funktion:
Zeichenketten (Strings) Seite 1 von 11 Zeichenketten(Strings) sind wichtige Bestandteile fast eines jeden Programms. Beispiele sind Eingabe von Namen oder Adressen, Ausgabe von Meldetexten oder Bearbeitung
MehrKapitel 3: Variablen
Kapitel 3: Variablen Thema: Programmieren Seite: 1 Kapitel 3: Variablen Im letzten Kapitel haben wir gelernt, bestimmte Ereignisse zu wiederholen solange eine Bedingung erfüllt ist. Nun möchten wir aber
MehrObjektorientierte Programmierung OOP Programmieren mit Java
4 Datenfelder, Parameterübergabe, Casting Objektorientierte Programmierung OOP Programmieren mit Java 4 Datenfelder, Parameterübergabe, Casting 4 Datenfelder, Parameterübergabe, Casting 4.1 Datenfelder
Mehr8. Referenzen und Zeiger
8. Referenzen und Zeiger Motivation Variable werden in C++ an speziellen Positionen im Speicher abgelegt. An jeder Position befindet sich 1 Byte. Sie sind durchnummeriert beginnend bei 0. Diese Positionen
MehrProgrammiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 9. Zeiger Arbeitsspeicher / Adressen Der Arbeitsspeicher des Computers (RAM) besteht aus einem Feld von Speicherzellen, beginnend bei Adresse
MehrDr. Monika Meiler. Inhalt
Inhalt 5 Referenzdatentypen - Felder... 5-2 5.1 Eindimensionale Felder - Vektoren... 5-3 5.1.1 Vereinbarung... 5-3 5.1.2 Referenzen sind keine Felder... 5-4 5.1.3 Kopieren eindimensionaler Felder... 5-6
MehrZeiger in C und C++ Zeiger in Java und C/C++
1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für Referenztypen (Klassen und Arrays) verwendet,
MehrC++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18
C++ Teil 5 Sven Groß 13. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 13. Mai 2016 1 / 18 Themen der letzten Vorlesung Funktionen Funktionsüberladung, Signatur Rekursion const-deklaration Referenzen
Mehr41.8 LUA-Grundlagen - Tabelle, if und Albernheit
41.8 LUA-Grundlagen - Tabelle, if und Albernheit Autor: Goetz Quelle: Mein EEP-Forum In diesem Kapitel möchte ich eine erste, einfache Anwung von Lua auf einer Anlage zeigen. Ich werde mich dabei auf den
MehrMethoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom
Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon
MehrEin Array ist eine Liste mit Einträgen, fast wie eine Einkaufsliste. Man kann darin also mehr als einen Eintrag in eine einzige Variable speichern.
04 Arrays Arrays 1/7 Was ist ein Array? Ein Array ist eine Liste mit Einträgen, fast wie eine Einkaufsliste. Man kann darin also mehr als einen Eintrag in eine einzige Variable speichern. Stell dir vor,
MehrFelder. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom
Einstieg in die Informatik mit Java, Vorlesung vom 9.5.07 Übersicht 1 Was sind? 2 Vereinbarung von n 3 Erzeugen von n 4 Zugriff auf Feldkomponenten 5 Mehrdimensionale 6 als Objekte, Referenzen Kopieren
MehrObjektorientiertes Programmieren (Java)
Grundlagen Objektorientiertes Programmieren (Java) Java folgt gewissen Rechtschreibregeln die Syntax. Diese besagt, dass hinter jeden Befehl ein Semikolon( ; ) stehen muss, damit der Computer weiß, dass
MehrSystem.out.println("TEXT");
Inhaltsübersicht - Erstes Beispiel - Datentypen - Ausdrücke und Operatoren - Schleifen / Bedinungen - Struktogramme - Grundgerüst eines Programms in JAVA - Einlesen von Daten Erstes Beispiel public class
MehrInhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15
Vorwort... 15 1 Einstieg in die Welt von C 17 1.1 Die Sprache C... 17 1.2 Die C-Standardbibliothek... 18 1.3 Die nötigen Werkzeuge für C... 21 1.4 Übersetzen mit der Entwicklungsumgebung... 23 1.5 Übersetzen
MehrProgrammiervorkurs Einführung in Java Tag 3
Programmiervorkurs Einführung in Java Tag 3 Giulia Maier erstellen Sommersemester 2018 09:30 Vorstellung der Lösungen des Vortages ab 10:00 Vorlesung 60 Minuten Mittagspause erstellen gegen 12:30 Übungen
MehrFunktionen in JavaScript
Funktionen in JavaScript Eine Funktion enthält gebündelten Code, der sich in dieser Form wiederverwenden lässt. Mithilfe von Funktionen kann man denselben Code von mehreren Stellen des Programms aus aufrufen.
MehrFunktionen in JavaScript
Funktionen in JavaScript Eine Funktion enthält gebündelten Code, der sich in dieser Form wiederverwenden lässt. Es können ganze Programmteile aufgenommen werden. Mithilfe von Funktionen kann man denselben
MehrInformatik 1 ( ) D-MAVT F2010. Schleifen, Felder. Yves Brise Übungsstunde 5
Informatik 1 (251-0832-00) D-MAVT F2010 Schleifen, Felder Nachbesprechung Blatt 3 Aufgabe 1 ASCII... A > a Vorsicht: Lösen Sie sich von intuitiven Schlussfolgerungen. A ist nicht grösser als a, denn in
MehrMartin Unold INFORMATIK. Geoinformatik und Vermessung
Zusammenfassung Was ist eine Programmiersprache? Eine Sprache, die Formal eindeutig in Maschinenbefehle übersetzbar ist Für Menschen einfacher verständlich ist als Bytecode Zur Formulierung von Datenstrukturen
MehrFragen zur OOP in Java
- 1 - Inhalt Was bedeutet OOP?... 2 Was versteht man unter einer Klasse?... 2 Wie nennt man die Mitglieder einer Klasse?... 2 Wie erzeugt man Objekte?... 2 Wie greife ich auf Member einer Klasse zu?...
Mehr2 Teil 2: Nassi-Schneiderman
2 Teil 2: Nassi-Schneiderman Wie kann man Nassi-Schneiderman in einer objektorientierten Sprache verwenden? Jedes Objekt besitzt Methoden, welche die Attribute des Objektes verändern. Das Verhalten der
MehrProjekt 3 Variablen und Operatoren
Projekt 3 Variablen und Operatoren Praktisch jedes Programm verarbeitet Daten. Um mit Daten programmieren zu können, muss es Möglichkeiten geben, die Daten in einem Programm zu verwalten und zu manipulieren.
MehrÜbungsblatt 2. Java Vorkurs (WS 2017)
Übungsblatt 2 Java Vorkurs (WS 2017) Aufgabe 1 Logische Operatoren Manchmal ist es wichtig zwei Werte miteinander zu vergleichen. Dazu gibt es in Java folgende Vergleichsoperatoren: Text Math. Zeichen
MehrSchleifen: Immer wieder dasselbe tun
Schleifen: Immer wieder dasselbe tun Bei einer Schleife werden Anweisungen immer wieder ausgeführt, solange die Bedingung wahr ist. Dafür muss man eine Variable immer wieder ändern, solange bis eine Überprüfung
MehrMartin Unold INFORMATIK. Geoinformatik und Vermessung
Wiederholung So sieht ein leeres Java-Programm aus public class Programmname { public static void main (String[] args) { // Hier stehen die Anweisungen Welche Arten von Anweisungen gibt es? Anweisungen
MehrGrundlagen von C# - 2
Grundlagen von C# - 2 Marc Satkowski 20. November 2016 C# Kurs Gliederung 1. Arrays 2. Kontrollstrukturen 3. Verzweigungen Bedingte Verzweigung (if else) 4. Schleifen Kopfgesteuerte Schleife (while) Fußgesteuerte
MehrEinführung in die Programmierung für NF MI. Übung 04
Einführung in die Programmierung für NF MI Übung 04 Inhalt Arrays Einführung in Objekte Einführung in die Programmierung für NF Übung 04 2 Arrays Arrays repräsentieren Reihungen von Objekten, z.b. Variablen
MehrTag 4 Repetitorium Informatik (Java)
Tag 4 Repetitorium Informatik (Java) Dozent: Patrick Kreutzer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2016/2017 Willkommen zum Informatik-Repetitorium!
MehrProgrammierkurs C++ Templates & STL (1/2)
Programmierkurs C++ Templates & STL (1/2) Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/fischer #2 Templates Die wichtigsten objekt-orientierten
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 06: Arrays Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Arrays Motivation und Eigenschaften Deklaration, Erzeugung und Initialisierung
Mehr5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?)
5.1 Mehr Basistypen Außer int, stellt Java weitere Basistypen zur Verfügung. Zu jedem Basistyp gibt es eine Menge möglicher Werte. Jeder Wert eines Basistyps benötigt die gleiche Menge Platz, um ihn im
MehrArrays. Einleitung. Deklarieren einer Array Variablen
Arrays Einleitung bisher jede Variable einzeln deklariert: 12 3 14 12 32 32 3 32 5 3 double sum; int count; ÿ Sie können Zweck und Aufbau von Array-Datentypen erklären ÿ Sie können einen Array korrekt
Mehr1 Klassen anlegen und Objekte erzeugen
Werkzeugkiste Java 1 1 Klassen anlegen und Objekte erzeugen Klassengrundgerüst 1 /** 2 * Write a description of class Testklasse here. 3 * 4 * @author ( your name ) 5 * @version (a version number or a
MehrDurch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren.
Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren. 267 Das hier skizzierte Problem basiert auf der strategischen Entscheidung
MehrDie for -Schleife HEUTE. Schleifen. Arrays. Schleifen in JAVA. while, do reichen aus, um alle iterativen Algorithmen zu beschreiben
18.11.5 1 HEUTE 18.11.5 3 Schleifen Arrays while, do reichen aus, um alle iterativen Algorithmen zu beschreiben Nachteil: Steuermechanismus ist verteilt Übersicht nicht immer leicht dazu gibt es for (
MehrDatenfelder (Arrays) Vektoren, Matrizen, Tabellen. Dr. Beatrice Amrhein
Datenfelder (Arrays) Vektoren, Matrizen, Tabellen Dr. Beatrice Amrhein Überblick Eindimensionale Arrays o Deklaration, Initialisierung, Zugriff Mehrdimensionale Arrays o Deklaration, Initialisierung, Zugriff
MehrJavakurs für Anfänger
Javakurs für Anfänger Einheit 04: Einführung in Kontrollstrukturen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Einführung in Kontrollstrukturen 3 Grundstrukturen von
MehrProgrammieren für Wirtschaftswissenschaftler SS 2015
DEPARTMENT WIRTSCHAFTSINFORMATIK FACHBEREICH WIRTSCHAFTSWISSENSCHAFT Programmieren für Wirtschaftswissenschaftler SS 2015 Lucian Ionescu Blockveranstaltung 16.03 27.3.2015 5. Arrays und Listen Agenda Arrays
MehrDie Klasse java.lang.object. Thorsten Treffer
Die Klasse java.lang.object Thorsten Treffer 6. Dezember 2003 1 java.lang.object Die Klassenhierarchie von Java kann als Baum aufgezeichnet werden, dessen Wurzel die Klasse Object ist. Mit anderen Worten:
MehrProgrammierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 8. Blatt Für den 16. und
Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 8. Blatt Für den 16. und 17.6.2008 Organisatorisches Um auf die Mailingliste aufgenommen zu werden schicke einfach eine
MehrFunktionen nur wenn dann
Funktionen nur wenn dann Funktionen können auch nur in bestimmten Fällen angewendet werden. Code wird nur in einem bestimmten Fall ausgeführt Code Ja Code Block wahr if wahr? Nein else Code Block Alternative
MehrWertebereich und Genauigkeit der Zahlendarstellung
Wertebereich und Genauigkeit der Zahlendarstellung Sowohl F als auch C kennen bei ganzen und Floating Point-Zahlen Datentypen verschiedener Genauigkeit. Bei ganzen Zahlen, die stets exakt dargestellt werden
MehrEin kleiner Blick auf die generische Programmierung
TgZero Technik.Blosbasis.net June 3, 2013 1 Inhaltsverzeichnis 1 Vorwort 3 2 Ein kleines Beispiel 3 3 Templates 3 4 Verschiedene Datentypen 4 5 Variadic Templates 5 6 Unterschied zwischen den Programmiersprachen
MehrJava 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8
Java 8 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Oktober 2014 JAV8 5 Java 8 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen
MehrEinstieg in die Informatik mit Java
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
MehrMethoden und Wrapperklassen
Methoden und Wrapperklassen CoMa-Übung IV TU Berlin 06.11.2012 CoMa-Übung IV (TU Berlin) Methoden und Wrapperklassen 06.11.2012 1 / 24 Themen der Übung 1 Methoden 2 Wrapper-Klassen CoMa-Übung IV (TU Berlin)
MehrEinstieg in die Informatik mit Java
1 / 21 Einstieg in die Informatik mit Java Felder, eindimensional Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 21 1 Überblick: Was sind Felder? 2 Vereinbarung von Feldern
MehrEinstieg in die Informatik mit Java
1 / 26 Einstieg in die Informatik mit Java Methoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Methoden 2 Methodendefinition 3 Parameterübergabe, Methodenaufruf
Mehr