Hier werden die Unterschiede zwischen der gewählten und der aktuellen Version gezeigt.
| start:info:11if:09_arrays 30.01.2009 08:29 | start:info:11if:09_arrays 11.06.2015 12:22 aktuell | ||
|---|---|---|---|
| Zeile 33: | Zeile 33: | ||
| - Ein Array ist ein Verweis auf eine Abfolge fester Länge von Variablen des gleichen Typs, genannt Fächer (engl. slots). | - Ein Array ist ein Verweis auf eine Abfolge fester Länge von Variablen des gleichen Typs, genannt Fächer (engl. slots). | ||
| - Der Typ ''typ[]'' ist der Typ der Arrays mit Einträgen vom Typ ''typ''. | - Der Typ ''typ[]'' ist der Typ der Arrays mit Einträgen vom Typ ''typ''. | ||
| - | - Der Ausdruck ''new typ[n]'' liefert ein frisches Array vom Typ ''typ'' der Länge ''%%n%%'' zurück. Hier ist ''%%n%%'' ein Ausdruck vom Typ ''%%int%%''. | + | - Der Ausdruck ''new typ[n]'' liefert ein frisches Array vom Typ ''typ'' der Länge ''%%n%%'' zurück. Hier ist ''%%n%%'' ein Ausdruck vom Typ ''%%double%%''. |
| Im Beispiel ist also ''data'' eine Arrayvariable, die ein frisches Array vom Typ ''double'' der Länge 10 enthält. | Im Beispiel ist also ''data'' eine Arrayvariable, die ein frisches Array vom Typ ''double'' der Länge 10 enthält. | ||
| Zeile 96: | Zeile 96: | ||
| - Die Fächer eines Arrays werden durch Anfügen des in eckige Klammern gesetzten Index bezeichnet. | - Die Fächer eines Arrays werden durch Anfügen des in eckige Klammern gesetzten Index bezeichnet. | ||
| - Ein auf diese Weise bezeichnetes Fach ist eine Variable. Man kann ihren Wert verwenden und ihr mit ''='' einen neuen Wert zuweisen. | - Ein auf diese Weise bezeichnetes Fach ist eine Variable. Man kann ihren Wert verwenden und ihr mit ''='' einen neuen Wert zuweisen. | ||
| - | - Arrayindizes beginnen immer bei 0. | + | - Arrayindizes beginnen immer bei 0 (wie bei String). |
| - Die Länge eines Arrays erhält man mit ''.length'' | - Die Länge eines Arrays erhält man mit ''.length'' | ||
| Zeile 165: | Zeile 165: | ||
| Man kann nun etwa ''mittelwert(data)'' aufrufen. Wert ist der Mittelwert von ''data''. | Man kann nun etwa ''mittelwert(data)'' aufrufen. Wert ist der Mittelwert von ''data''. | ||
| - | ====== Arrays als Methodenparameter ====== | ||
| - | |||
| - | Es wird nur das Array übergeben, d.h. der Verweis auf das Array. Man kann daher (zuweilen unerwünschte) Seiteneffekte erhalten: | ||
| - | |||
| - | <code java> | ||
| - | public double f(double[] zahlen) { | ||
| - | if (zahlen.length == 0) { | ||
| - | return 23; | ||
| - | } else { | ||
| - | zahlen[0] = 27; | ||
| - | return 23; | ||
| - | } | ||
| - | } | ||
| - | </code> | ||
| - | Der Aufruf ''f(data)'' hat stets den Wert 23, setzt aber gleichzeitig ''data[0]'' auf 27. | ||
| ====== Arrays als Rückgabewerte ====== | ====== Arrays als Rückgabewerte ====== | ||
| Zeile 204: | Zeile 189: | ||
| ====== Finden eines Wertes ====== | ====== Finden eines Wertes ====== | ||
| - | Man möchte wissen, ob eins der eingelesenen Preise ''<= 1000'' ist: | + | Man möchte wissen, ob einer der eingelesenen Preise ''≤ 1000'' ist: |
| <code java> | <code java> | ||
| Zeile 213: | Zeile 198: | ||
| </code> | </code> | ||
| - | jetzt ist gefunden ''true'' genau dann, wenn ''data'' einen Eintrag ''<= 1000'' hat. Man möchte nun auch noch wissen, wie viele Preise ''<= 1000'' sind: | + | jetzt ist gefunden ''true'' genau dann, wenn ''data'' einen Eintrag ''≤ 1000'' hat. Man möchte nun auch noch wissen, wie viele Preise ''≤ 1000'' sind: |
| <code java> | <code java> | ||
| Zeile 222: | Zeile 207: | ||
| </code> | </code> | ||
| - | Jetzt ist ''count'' gleich der Anzahl derjenigen Preise, die ''<= 1000'' sind. | + | Jetzt ist ''count'' gleich der Anzahl derjenigen Preise, die ''≤ 1000'' sind. |
| ====== Löschen eines Wertes ====== | ====== Löschen eines Wertes ====== | ||
| Zeile 231: | Zeile 216: | ||
| <code java> | <code java> | ||
| - | data[pos] = data[dataSize-1]; | + | // Definition für die intern benutzte Länge: |
| - | dataSize = dataSize - 1; | + | dataSize = data.length; |
| + | |||
| + | // Das zu löschende Element an der Stelle pos | ||
| + | // mit dem letzten Element überschreiben | ||
| + | data[pos] = data[dataSize-1]; | ||
| + | |||
| + | // die intern verwendete Längenangabe reduzieren | ||
| + | dataSize = dataSize - 1; | ||
| + | |||
| + | // Achtung: data.length hat sich nicht verändert! | ||
| </code> | </code> | ||
| Zeile 238: | Zeile 232: | ||
| <code java> | <code java> | ||
| - | for(int i = 0; i < dataSize - 1; i++) | + | // Elemente bis zur Position aufschieben |
| + | for(int i = pos; i < dataSize - 1; i++) | ||
| data[i] = data[i+1]; | data[i] = data[i+1]; | ||
| + | // die intern verwendete Längenangabe reduzieren | ||
| dataSize = dataSize - 1; | dataSize = dataSize - 1; | ||
| </code> | </code> | ||
| Zeile 289: | Zeile 285: | ||
| </code> | </code> | ||
| + | ====== Fragen ====== | ||
| + | |||
| + | - Erkläre, was an diesem Codefragment falsch ist und gib an, wie man es besser macht: <code java>int[] v = new int[10]; | ||
| + | for(int i = 1; i <= 10; i++) | ||
| + | v[i] = v.length - i; | ||
| + | </code> Was steht nach erfolgreicher Ausführung der Schleife im Array? (Bitte selbst durchspielen und nicht laufen lassen...) | ||
| + | - Gib Beispiele für eine sinnvolle Methode, die... | ||
| + | * einen formalen Parameter vom Typ ''int[]'' hat, der modifiziert wird. | ||
| + | * einen formalen Parameter vom Typ ''int[]'' hat, der nicht modifiziert wird. | ||
| + | * die ein Array vom Typ ''int[]'' zurückgibt. | ||
| + | - Schreibe eine Schleife, die ein Array wie folgt besetzt: ''1 4 9 16 25 36 49 64 81 100'' | ||
| + | - Konstruiere ein 2D-Array von Booleans, das schachbrettartig vorbesetzt ist. | ||
| + | - Schreibe eine Methode, die überprüft, ob zwei Arrays dieselben Elemente in derselben Reihenfolge enthalten. | ||
| + | - Lade folgende Datei herunter und benenne Sie in "Felder.java" um: {{:start:info:11if:felder.txt|felder.txt}} | ||
| + | - Öffne BlueJ. | ||
| + | - Schließe evtl. bereits geöffnete Projekte. | ||
| + | - Erstelle ein neues Projekt "Felder". | ||
| + | - Erstelle darin eine Klasse "Felder". | ||
| + | - Kopiere den Inhalt der oben angegebenen Klasse an Stelle der automatisch generierten Codezeilen in deiner soeben erstellten Klasse und speichere ab. | ||
| + | - Fang an die Arbeitsaufträge abzuarbeiten (Methoden implementieren und kommentieren). Und ab geht's! :-) | ||