erstellt 28.01.06; übersetzt 12.04.10; Deutsche Übersetzung Heinrich Gailer


Kapitel 9C Programmieraufgaben

Allgemeine Hinweise: Schreiben Sie jedes Programm wie angegeben. Keines dieser Programme erwartet die Eingabe von Daten durch den Anwender. Die Werte, die von den Programmen verwendet werden, sind durch Deklaration und Zuweisungsanweisungen fest kodiert. Das ist normalerweise eine schlechte Form der Programmierung, aber gut genug für jetzt.


Aufgabe 1 — Objekte, erzeugt zur Laufzeit

Schreiben Sie ein Programm, dass ein String-Objekt erzeugt, das den String "Hello World" (oder anderen String enthält). Weisen Sie die Referenz auf das Objekt einer Referenzvariablen zu, vielleicht str1. Geben Sie jetzt die Zeichen auf den Bildschirm aus:

System.out.println( str1 );

Führen Sie das Programm aus, um sicher zu gehen, dass es so funktioniert, wie Sie es erwarten. Fügen Sie jetzt eine zweite Referenzvariable hinzu, aber erzeugen Sie für diese kein Objekt, auf das sie verweist. Fügen Sie eine Anweisung hinzu, die diese zweite Variable verwendet, als wenn sie eine gültige Objektreferenz enthalten würde. Führen Sie das Programm aus und sehen Sie was passiert:

System.out.println( zweiteVariable );

Experimentieren Sie ein bisschen mit dem Programm, um die Vorstellung in Ihrem Kopf zu zementieren, dass ein Objekt und dessen Referenzvariable zwei verschiedene Dinge sind und, dass ein Objekt zur Laufzeit erzeugt wird.

Zurück zum Inhaltsverzeichnis.


Aufgabe 2 — Stringlänge

Kompilieren und führen Sie das Programm StringDemo2 dieses Kapitels aus.

class StringDemo2
{
  public static void main ( String[] args )
  {
    String str;
    int    len;

    str = new String( "Elementary, my dear Watson!" );

    len = str.length();

    System.out.println("Die Laenge ist: " + len );

  }
}

Ändern Sie jetzt den String auf verschiedene Weise und beobachten die Auswirkung auf die berechnete Stringlänge. Fügen Sie zusätzliche Leerzeichen auf beiden Seiten des Strings und innerhalb des Strings hinzu; fügen Sie weitere Satzzeichen hinzu; fügen Sie ein Tab-Zeichen ein (ein richtiges Tab-Zeichen, nicht einfach Leerzeichen). Beachten Sie, das die Länge des Strings "MMMMMM" die gleiche ist wie von "iiiiii".

Zurück zum Inhaltsverzeichnis.


Aufgabe 3 — Eine String-Methode, die einen neuen String erzeugt

Es ist oft nützlich unnötige Leerzeichen auf beiden Seiten des Strings zu entfernen. Die trim() Methode des String-Objekts tut das. Sie erzeugt ein neues String-Objekt aus einem Bestehenden. Dabei hat das neue String-Objekt alle Zeichen des Originals, bis auf die Leer- und Tab-Zeichen auf beiden Seiten, die entfernt wurden. Der ursprüngliche String wird nicht geändert. Zum Beispiel, nachdem die folgenden Anweisungen ausgeführt wurden

String erster = new String("    In einem Loch    in der Erde, da lebte ein Hobbit.   ");
String zweiter;

zweiter = erster.trim();

gibt es ein zweites Objekt auf das zweiter verweist, das die Zeichen

"In einem Loch    in der Erde, da lebte ein Hobbit."

enthält. Beachten Sie, dass die inneren zusätzlichen Leerzeichen erhalten bleiben.

Schreiben Sie ein Programm (oder modifizieren Sie das vorherige), das einen String erzeugt, indem es trim() eines ursprünglichen Strings aufruft. Geben Sie beide Strings auf den Bildschirm aus. Experimentieren Sie mit Leer- und Tab-Zeichen, um festzustellen, was vom Original entfernt wird.

Zurück zum Inhaltsverzeichnis.


Aufgabe 4 — Experimentieren Sie mit substring()

Kompilieren und führen Sie das Programm aus diesem Kapitel (siehe unten) aus, um zu bestätigen, dass es funktioniert. Ändern Sie dann die 8 in einen anderen Wert und überprüfen Sie, ob das Ergebnis das ist, was Sie erwarten.

class StringDemo3
{
  public static void main ( String[] args )
  {
    String str = new String( "Golf is a good walk spoiled." ); // erzeuge das originale Stringobjekt

    String sub = str.substring(8); // erzeuge ein neues Objekt aus dem Original

    System.out.println( sub );

  }
}

String-Objekte haben noch eine andere Version der substring() Methode, die wie folgt aussieht:

substring( int startIndex, int endIndex )

Diese Methode erzeugt ein neues String-Objekt basierend auf dem ursprünglichen Objekt, das aber nur die Zeichen enthalten wird, die mit startIndex beginnen und mit endIndex - 1 enden. Daher ist die Länge eines Substrings endIndex - beginIndex. Die Methode erzeugt ein völlig neues Objekt: die Zeichen, die es enthält, sind eine Kopie der Zeichen des Originalobjekts. Zum Beispiel:

String str = new String( "Golf is a good walk spoiled." ); // erzeuge das Oiginalobjekt

String sub = str.substring(8, 19); // erzeuge ein neues Objekt aus dem Original

erzeugt ein neues Objekt (referenziert von sub), das die Zeichen "a good walk" enthält.

Modifizieren Sie Ihr Programm, so dass es diese substring() Methode mit zwei Parameter aufruft. Experimentieren Sie mit den zwei Parameter, um zu sehen, wie sie funktionieren. Versuchen Sie das Folgende:

  1. Geben Sie beiden Parameter den gleichen Wert.
  2. Geben Sie dem ersten Parameter den Wert 0 und dem zweiten Parameter den Index des letzten Zeichens (27 in diesem Beispiel).
  3. Anstatt wie oben das Literal 27 zu verwenden, verwenden Sie str.length()-1
  4. Um einen Substring vom startIndex bis zum Ende des Strings zu bekommen, verwenden Sie als zweiten Parameter str.length()
  5. Geben Sie dem ersten Parameter einen negativen Wert.
  6. Geben Sie dem zweiten Parameter einen Wert der größer ist als der String.
  7. Kehren Sie die Reihenfolge der Parameter um.

Gute Programmierer schreiben Methoden, so dass sie vernünftig mit allen möglichen Eingabewerten umgehen können, auch mit denen, die keinen Sinn ergeben. Und aus guten Gründen der Sicherheit müssen Programmierer damit rechnen, dass manche Anwender bösartig versuchen werden Parameter zu finden, die Probleme oder ein merkwürdiges Verhalten verursachen, das dann irgendwie ausgenützt werden kann.

Zurück zum Inhaltsverzeichnis.


Ende der Aufgaben