Logo Logo
InfoHome Themen Projekte Links Software
Themen
JavaHamster
BlueJ
Java
HTML
XHTML
CSS
XML
Datenbanken
MySQL
Theoretische Informatik
PHP
Kara
Lego-Roboter
Algorithmen
Dijkstra
Definitionen
Einfache Datentypen
Flussdiagramme
Einfache Algorithmen
Arrays
Mehrdim. Arrays

Arrays (Reihungen)

objects_tenElementArray.gif

Ein Array ist eine Datenstruktur, die mehrere Elemente gleichen Typs aufnehmen kann. Die Länge eines Arrays wird bei seiner Erzeugung festgelegt und kann danach nicht mehr verändert werden.

Ein Array-Element ist ein Wert, der in einem Array gespeichert ist. Der Zugriff auf ein solches Array-Element erfolgt über die Position, an der das Element im Array steht. Jeder Array-Position ist ein Indexwert eindeutig zugeordnet. Die Indizierung eines Array beginnt mit 0 und geht bis (Arraylänge - 1).

Einfaches Programm

Hier ist ein einfaches Programm, das ein Array erzeugt, einige Werte in diesem Array speichert und alle Array-Elemente ausgibt.

public class ArrayDemo {
  public static void main(String[] args) {
    int[] einArray; // deklariere ein Array aus ganzen Zahlen

    einArray = new int[10]; // erzeuge ein Array aus ganzen Zahlen

    // weise jedem Array-Element ein Wert zu und gib das Array-Element aus
    for (int i = 0; i<einArray.length; i++) {
       einArray[i] = i;
       System.out.print(einArray[i] + " ");
    }
    System.out.println();
  }
}

Deklaration eines Arrays

Diese Zeile Code aus dem Beispielprogramm deklariert eine Array-Variable:

int[] einArray; // deklariere ein Array aus ganzen Zahlen

Ein Array wird syntaktisch wie eine einfache Variable deklariert mit dem Unterschied, dass an den Typnamen eckige Klammern angehängt werden. Im Beispielprogramm wird ein Array deklariert, das ganze Zahlen (Integer) aufnehmen kann. Hier sind einige weitere Deklarationen von Arrays, die andere Datentypen aufnehmen können:       

boolean[] einArrayAusBoolschenWerten;
double[] einArrayAusGanzenZahlen;
String[] einArrayAusStrings;
Object[] einArrayAusObjekten;

Zum Zeitpunkt der Deklaration muss noch nicht festgelegt werden, wie viele Elemente das Array haben soll.

Erzeugung eines Arrays

Ein Array wird mit Hilfe des new-Operators erzeugt. Der folgende Befehl fordert den für ein Array aus 10 Integer-Werten benötigten Speicherplatz an und weist diesen der bereits deklarierten Variable einArray zu:

einArray = new int[10]; // erzeuge ein Array aus ganzen Zahlen

Ein Array muss bereits erzeugt worden sein, bevor das erste Mal darauf zugegriffen werden kann!

Ist bereits zum Deklarationszeitpunkt klar, wie viele Elemente das Array haben soll, können Deklaration und Erzeugung zusammen geschrieben werden.

int[] einArray = new int[10];

Zugriff auf Array-Elemente

Nachdem das Array nun erzeugt und Speicherplatz für Array-Elemente zugewiesen worden ist, weist das Programm den Array-Elementen Werte zu:

for (int i = 0; i<einArray.length; i++) {
  anArray[i] = i;
  System.out.print(einArray[i] + " ");
}

Der Zugriff auf ein Array-Element - sowohl zur Wertzuweisung als auch zur Ausgabe - erfolgt über seinen Index, der dem Array-Namen in eckigen Klammern angehängt wird.

Bestimmung der Länge eines Arrays

Zur Bestimmung der Länge eines Arrays schreibt man

arrayname.length

Achtung: length ist keine Methode, sondern eine spezielle Eigenschaft von Arrays. Deshalb hier auch keine angehängten runden Klammern.

Innerhalb der for-Schleife im Beispielprogramm, die jedem Array-Element einen Wert zuweist und diesen ausgibt, wird einArray.length dazu benutzt, die Schleifenbedingung zu formulieren.

Deklaration, Erzeugung und Initialisierung in einem Schritt

In Java gibt es eine abkürzende Schreibweise für die Deklaration, Erzeugung und Initialisierung eines Arrays: 

int[] zahlen = {1, 12, 42, 42, 42};

Die Länge des so angelegten Arrays ergibt sich anhand der Anzahl der zugewiesenen Elemente.

Aufgaben

1) Gegeben seien zwei Arrays a und b vom Typ int[].

a) Warum kann man die beiden Felder a und b nicht mittels a==b miteinander vergleichen?

b) Wie könnte ein Programmstück aussehen, das beide Felder miteinander vergleicht? Dabei seien zwei Felder genau dann gleich, wenn sie die gleiche Länge haben und alle ihre Komponenten paarweise übereinstimmen.

Lösung:

public class ZweiArraysAufGleichheitTesten {

    public static void main(String[] args) {
       
        int[] a = {2, 3, 34};
        int[] b = {2, 3, 34, 7};
       
        boolean istGleich = true;
        int i = 0;
      
        if(a.length == b.length){
            while(i<a.length && istGleich){
                if(a[i]!=b[i]){
                    istGleich = false;
                    i++;
                }
            }
        }
        else {
            istGleich = false;
        }
       
        if(istGleich){
            System.out.println("Die Arrays sind gleich!");
        }
        else{
            System.out.println("Die Arrays sind nicht gleich!");
        }
    }

}

2) Programmieren Sie ein Palindrom-Tester. Palindrome sind Wörter (Sätze), die sich in gleicher Bedeutung von vorne nach hinten und von hinten nach vorne lesen lassen. Beispiele wären Anna, Otto, ... Das Programm soll das zu testende Wort in einem char-Array speichern.

char[] wort = {'a', 'n', 'n', 'a'};

Mit Hilfe einer Schleife soll nun der Test realisiert werden und eine entsprchende Ausgabe generiert werden (Palindrom oder nicht Palindrom?). Die Eingaben sollen zunächst nur aus Kleinbuchstaben bestehen und keine Leerzeichen enthalten.

Lösung:

public class PalindromTest {
   
    public static void main(String[] args) {
       
        char [] wort ={'a','n','n','a'}; // Prüfwort
        int l = 0; // linker Array-Zeiger
        int r = wort.length-1; // rechter Array-Zeiger
        boolean istPalindrom = true;
       
        while(l<r && istPalindrom){
            if(wort[l]==wort[r]){
                l++;
                r--;
            }
            else{
                istPalindrom = false; // Schleife bricht bei Auftreten einer Ungleichheit ab...
            }
        }
       
        if(istPalindrom) {
            System.out.println("PALINDROM");
        }
        else {
            System.out.print("Kein PALINDROM");
        }
       
    }
}

3) Der Palindrom-Tester soll so erweitert werden, dass auch Satz-Palindrome wie "Ein Neger mit Gazelle zagt im Regen nie." erkannt werden. Gehen Sie dazu folgendermaßen vor:

  • Speichern Sie den zu prüfenden Satz zunächst als String-Variable statt wie bisher gleich ein Array aus Zeichen (char) anzulegen.
  • Sehen Sie in der Java-Dokumentation nach, welche Methoden es gibt, um Strings zu modifizieren. Suchen Sie konkret nach einer Methode die alle Buchstaben in Kleinbuchstaben umwandelt und nach einer Methode die ein Leerzeichen löscht (durch "Nichts" ersetzt). Die Methoden müssen mittels Punktnotation an der String-Variablen aufgerufen werden und liefern als Ergebnis den modifizierten String.

    String meineZeichenkette = "Hallo";
    meineZeichenkette = meineZeichenkette.methodeXY();


  • Wandeln Sie die String-Variable schließlich in ein Array aus Buchstabem (char-Werten) mit Hilfe der Methode toCharArray(). Auch diese Methode wird an der String-Variablen aufgerufen und liefert als Ergebnis ein Array aus char-Werten. Von hier an geht alles so wie in Aufgabe 2. Der eigentliche Algorithmus zur Prüfung der Palindrom-Eigenschaft muss also nicht verändert werden!

» drucken: pdf | html

© 2004-2024 M. Blanke · Ursulaschule · Kleine Domsfreiheit 11-18 · 49074 Osnabrück