Hier werden die Unterschiede zwischen der gewählten und der aktuellen Version gezeigt.
start:info:11if:09_arrays 30.01.2009 08:32 | 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 302: | Zeile 298: | ||
- Konstruiere ein 2D-Array von Booleans, das schachbrettartig vorbesetzt ist. | - 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. | - Schreibe eine Methode, die überprüft, ob zwei Arrays dieselben Elemente in derselben Reihenfolge enthalten. | ||
- | - Felder.java: <code java> | + | - Lade folgende Datei herunter und benenne Sie in "Felder.java" um: {{:start:info:11if:felder.txt|felder.txt}} |
- | import java.lang.Math.*; | + | |
- | /* | + | |
- | * @author E. Alkan | + | |
- | * @version 30.01.2009 | + | |
- | */ | + | |
- | public class Felder | + | |
- | { | + | |
- | // Instanzvariable | + | |
- | int[] zahlenFeld; | + | |
- | + | ||
- | /* | + | |
- | * Konstruktor für Objekte der Klasse Felder | + | |
- | * Erzeugt ein Zufallsfeld mit "anzahl" Integerwerten die maximal "maximum" gross sind | + | |
- | */ | + | |
- | public Felder(int anzahl, int maximum) | + | |
- | { | + | |
- | //Instanzvariable deklarieren | + | |
- | zahlenFeld = new int[anzahl]; | + | |
- | // Instanzvariable initialisieren | + | |
- | for(int i=0;i<zahlenFeld.length;i++) { | + | |
- | zahlenFeld[i]=(int)(maximum*(Math.random()))+1; | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | /* | + | |
- | * Das erste Element aus dem Feld zurückgeben | + | |
- | */ | + | |
- | public int erstesElement() | + | |
- | { | + | |
- | return zahlenFeld[0]; // Bitte erklären! | + | |
- | } | + | |
- | + | ||
- | /* | + | |
- | * Das letzte Element aus dem Feld zurückgeben | + | |
- | */ | + | |
- | public int letztesElement() | + | |
- | { | + | |
- | return zahlenFeld[zahlenFeld.length-1]; // Bitte erklären! | + | |
- | } | + | |
- | + | ||
- | + | ||
- | /* | + | |
- | * Das gesamte Feld ausgeben | + | |
- | * (Achtung! Keine Rückgabe!) | + | |
- | */ | + | |
- | public void gesamtesFeldAusgeben() | + | |
- | { | + | |
- | + | ||
- | } | + | |
- | + | ||
- | /* | + | |
- | * Das erste und letzte Element aus dem Feld vertauschen | + | |
- | */ | + | |
- | public void erstesUndLetztesElementVertauschen() | + | |
- | { | + | |
- | + | ||
- | } | + | |
- | + | ||
- | /* | + | |
- | * Das x-te und y-te Element aus dem Feld vertauschen | + | |
- | */ | + | |
- | public void xtesUndytesElementVertauschen(int x, int y) | + | |
- | { | + | |
- | + | ||
- | } | + | |
- | + | ||
- | /* | + | |
- | * Feld komplett umdrehen | + | |
- | * Also: 1. <-> letztes Element | + | |
- | * 2. <-> vorletztes Element | + | |
- | * 3. <-> vorvorletztes Element | + | |
- | * ...usw... | + | |
- | */ | + | |
- | public void feldUmdrehen() | + | |
- | { | + | |
- | + | ||
- | } | + | |
- | + | ||
- | + | ||
- | // Position des groessten Elements aus dem Feld z u r ü c k g e g e b e n . | + | |
- | public int getPositionDesGroesstenElement() | + | |
- | { | + | |
- | return 0; | + | |
- | } | + | |
- | + | ||
- | + | ||
- | /* | + | |
- | * Position und Wert des groessten Elements aus dem Feld a u s g e b e n, z.B.: | + | |
- | * "Das größte Element hat den Wert bla und steht an Position blub." | + | |
- | */ | + | |
- | public void groesstesElement() | + | |
- | { | + | |
- | + | ||
- | } | + | |
- | + | ||
- | + | ||
- | /* | + | |
- | * Das groesste Element aus dem Feld an die erste Stelle tauschen | + | |
- | */ | + | |
- | public void groesstesElementAnDenAnfangStellen() | + | |
- | { | + | |
- | + | ||
- | + | ||
- | } | + | |
- | + | ||
- | + | ||
- | /* | + | |
- | * Das zweitgroesste Element aus dem Feld an die zweite Stelle tauschen | + | |
- | */ | + | |
- | + | ||
- | + | ||
- | /* | + | |
- | * Feld sortieren | + | |
- | */ | + | |
- | } | + | |
- | </code> | + | |
- Öffne BlueJ. | - Öffne BlueJ. | ||
- Schließe evtl. bereits geöffnete Projekte. | - Schließe evtl. bereits geöffnete Projekte. | ||
- | - Erstelle ein neues Projekt "Felder" (oder übernimm obiges Projekt). | + | - Erstelle ein neues Projekt "Felder". |
- | - Erstelle darin eine Klasse "Felder" (oder übernimm obiges Klasse). | + | - 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. | - 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! :-) | - Fang an die Arbeitsaufträge abzuarbeiten (Methoden implementieren und kommentieren). Und ab geht's! :-) | ||