erstellt 12.08.99; übersetzt 03.05.05; überarbeitet 12.12.05, 03.10.06; © Copyright 2005 - 2006 Deutsche Übersetzung Heinrich Gailer

Füllen Sie die Lücken aus

Hinweise:   Das ist eine unbewertete Lückenübung. Jede Frage besteht aus einem Satz, bei dem ein oder zwei Wörter fehlen. Jede Schaltfläche repräsentiert das fehlende Wort bzw. die fehlenden Wörter. Überlegen Sie welches Wort bzw. welche Wörter fehlen. Klicken Sie dann auf die Schaltfläche, um zu sehen ob Sie recht haben. Es wird keine Note für diese Übung ermittelt.


Diese Übung beinhaltet das Design eines Computerspiels:

Der erste Spieler gibt ein Word mit drei Buchstaben ein. Der zweite Spieler sollte das eingegebene Wort nicht sehen. Jetzt hat der zweite Spieler fünf Versuche das Wort zu erraten. Wenn der zweite Spieler das Wort nicht errät, gewinnt der erste Spieler.
(Das ist kein allzu gutes Spiel. Vielleicht möchten Sie es erweitern, wenn Sie die Übung beendet haben.)

1.   Wenn Sie ein Programm beginnen, ist es manchmal sinnvoll Kommentare zu schreiben, um sich selber darüber klar zu werden, was zu tun ist. Überlegen Sie sich für die zwei Hauptabschnitte des Programms zwei Kommentare. Klicken Sie dann auf die Buttons, um zu sehen ob Sie mit mir übereinstimmen:

class RateSpiel
{
  public static void main ( String[] args ) throws IOException
  {

    

    Hier kommt Code für den ersten Abschnitt des Programms.

    

    Hier kommt Code für den zweiten Abschnitt des Programms.

  }
}

Sie könnten einwenden, dass das Programm viel komplizierter ist als das. Und natürlich ist es das. Aber auf der äußersten Ebene besteht das Programm aus Code, um genau diese Aufgaben durchzuführen.


2.   Lassen Sie uns über die erste Aufgabe nachdenken und die zweite Aufgabe für später aufheben. Der erste Spieler soll ein Wort mit drei Buchstaben eingeben. Die Länge eines Stringobjekts (die Anzahl der Zeichen, die es enthält) kann mit dessen length() Methode überprüft werden. Hier ist mehr von dem Programm:

class RateSpiel
{
  public static void main ( String[] args ) throws IOException
  {
    BufferedReader stdin = new BufferedReader( new InputStreamReader( System.in ) );

     wort;

    // Das Wort vom ersten Spieler holen
    System.out.println("Geben Sie das zu erratende Wort ein:");
    wort = stdin.

    while ( wort.length()  )
    {
        System.out.println(
          "Das Wort muss drei Buchstaben haben. Bitte versuchen Sie es noch einmal.");
        
    }

    // Das Spiel mit dem zweiten Spieler spielen
  }
}


3.   Wir sind mit dem ersten Teil fast fertig, aber es gibt ein Problem: wenn der erste Spieler die Tastatur an den zweiten Spieler übergibt, ist das zu erratende Wort auf dem Bildschirm zu sehen! Was schlagen Sie vor, um dieses Problem zu lösen?      

(Es gibt elegantere Lösungen, aber diese ist gut genug.)


4.   Hier ist das Programm mit dieser teilweise implementierten Idee. Wir gehen davon aus, dass 50 Leerzeilen den Bildschirm löschen.

class RateSpiel
{
  public static void main ( String[] args ) throws IOException
  {
    BufferedReader stdin = new BufferedReader( new InputStreamReader( System.in ) );

    String  wort;

    // Das Wort vom ersten Spieler holen
    System.out.println("Geben Sie das zu erratende Wort ein:");
    wort = stdin.readLine() ;

    while ( wort.length() != 3 )
    {
        System.out.println
          ("Das Wort muss drei Buchstaben haben. Bitte versuchen Sie es noch einmal.");
        wort = stdin.readLine() ;
    }

    // Bildschirm löschen
    int zaehler = 
     ( zaehler < 50 )
    {
        
        zaehler = zaehler + 1;
    }

    // Das Spiel mit dem zweiten Spieler spielen
  }
}

5.   Jetzt zur zweiten Hälfte des Programms. In diesem Teil des Programms versucht der Spieler durch wiederholte Versuche das Wort zu erraten. Wie werden (gewöhnlich) die wiederholten Versuche des Ratens im Programm umgesetzt? Mit einer .


6.   Hier ist das Programm mit etwas getaner Arbeit für die zweite Hälfte. Entscheiden Sie zuerst welche Variablen gebraucht werden, dann initialisieren Sie sie:

class RateSpiel
{
  public static void main ( String[] args ) throws IOException
  {
    BufferedReader stdin = new BufferedReader( new InputStreamReader( System.in ) );
    String  wort;

    // Das Wort vom ersten Spieler holen
    System.out.println("Geben Sie das zu erratende Wort ein:");
    wort = stdin.readLine() ;

    while ( wort.length() != 3 )
    {
        System.out.println(
          "Das Wort muss drei Buchstaben haben. Bitte versuchen Sie es noch einmal.");
        wort = stdin.readLine() ;
    }

    // Bildschirm löschen
    int zeilenZaehler = 0 ;
    while ( zeilenZaehler < 50 )
    {
        System.out.println();
        zeilenZaehler = zeilenZaehler + 1;
    }

    // Das Spiel mit dem zweiten Spieler spielen
    int zaehler = 1;
     versuch;

    System.out.println("Versuchen Sie Ihr Glück");
    

    // solange der zweite Spieler das Wort noch nicht erraten hat und
    // noch Versuche übrig hat
    while ( )
    {

    }

    // überprüfen ob der zweite Spieler gewonnnen hat
    if ()
    {

    }

    else
    {

    }

  }
}

7.   Das while in der zweiten Hälfte wird etwas kompliziert werden. Die Schleife muss fortgesetzt werden solange zwei Dinge wahr sind:
  1. Der Spieler hat noch Versuche übrig.
  2. Der Spieler hat das Wort noch nicht erraten.
Verwenden Sie einen relationalen Operator, um den ersten Teil zu testen. Verwenden Sie die equals( ) Methode des Strings versuch, um den zweiten Teil zu testen. Diese beiden true/false-Werte müssen dann mit einem logischen Operator kombiniert werden.

class RateSpiel
{
  public static void main ( String[] args ) throws IOException
  {
    BufferedReader stdin = new BufferedReader( new InputStreamReader( System.in ) );
    String  wort;

    // Das Wort vom ersten Spieler holen
    System.out.println("Geben Sie das zu erratende Wort ein:");
    wort = stdin.readLine() ;

    while ( wort.length() != 3 )
    {
        System.out.println(
          "Das Wort muss drei Buchstaben haben. Bitte versuchen Sie es noch einmal.");
        wort = stdin.readLine() ;
    }

    // Bildschirm löschen
    int zeilenZaehler = 0 ;
    while ( zeilenZaehler < 50 )
    {
        System.out.println();
        zeilenZaehler = zeilenZaehler + 1;
    }

    // Das Spiel mit dem zweiten Spieler spielen
    int zaehler = 1;
    String versuch

    System.out.println("Versuchen Sie Ihr Glück");
    versuch = stdin.readLine();

    // solange der zweite Spieler das Wort noch nicht erraten hat
    // und noch Versuche übrig hat
    while ( zaehler < 5 !versuch. )
    {
        System.out.println("Ein weiterer Versuch:");
        versuch = stdin.readLine();
        zaehler   = 
    }


    // überprüfen, ob der zweite Spieler gewonnen hat
    if ()
    {

    }

    else
    {

    }

  }
}

Die Schleifenbedingung kombiniert das Konzept der Zählschleife mit dem Konzept der überwachten Schleife.


8.   Wenn die Schleife beendet wird, wird eines von zwei Dingen wahr sein: Der zweite Spieler hat das Wort erraten und gewonnen, oder der zweite Spieler hat alle seine Versuche aufgebraucht und verloren. Die letzte if-Anweisung muss ermitteln welches davon wahr ist, um eine korrekte Schlussmeldung auszugeben.

Denken Sie darüber nach, was die if-Anweisung testen sollte:

class RateSpiel
{
  public static void main ( String[] args ) throws IOException
  {
    BufferedReader stdin = new BufferedReader( new InputStreamReader( System.in ) );
    String  wort;

    // Das Wort vom ersten Spieler holen
    System.out.println("Geben Sie das zu erratende Wort ein:");
    wort = stdin.readLine() ;

    while ( wort.length() != 3 )
    {
        System.out.println(
          "Das Wort muss drei Buchstaben haben. Bitte versuchen Sie es noch einmal.");
        wort = stdin.readLine() ;
    }

    // Bildschirm löschen
    int zeilenZaehler = 0 ;
    while ( zeilenZaehler < 50 )
    {
        System.out.println();
        zeilenZaehler = zeilenZaehler + 1;
    }

    // Das Spiel mit dem zweiten Spieler spielen
    int zaehler = 1;
    String versuch;

    System.out.println("Versuchen Sie Ihr Glück");
    versuch = stdin.readLine();

    // solange der zweite Spieler das Wort noch nicht erraten hat und
    // noch Versuche übrig hat
    while ( zaehler < 5  &&  !versuch.equals( wort ) )
    {
        System.out.println("Ein weiterer Versuch:");
        versuch = stdin.readLine();
        zaehler = zaehler + 1;
    }

    // überprüfen, ob der zweite Spieler gewonnen hat
    if ()
        System.out.println("Sie haben gewonnen!");
    else
        System.out.println("Sie haben verloren!");

  }
}

9.  Hier ist das vollständige Programm (Sie können es nach Notepad kopieren).

import java.io.* ;
class RateSpiel
{
  public static void main ( String[] args ) throws IOException
  {
    BufferedReader stdin = new BufferedReader( new InputStreamReader( System.in ) );
    String  wort;

    // Das Wort vom ersten Spieler holen
    System.out.println("Geben Sie das zu erratende Wort ein:");
    wort = stdin.readLine() ;

    while ( wort.length() != 3 )
    {
        System.out.println(
          "Das Wort muss drei Buchstaben haben. Bitte versuchen Sie es noch einmal.");
        wort = stdin.readLine() ;
    }

    // Bildschirm löschen
    int zeilenZaehler = 0 ;
    while ( zeilenZaehler < 50 )
    {
        System.out.println();
        zeilenZaehler = zeilenZaehler + 1;
    }

    // Das Spiel mit dem zweiten Spieler spielen
    int zaehler = 1;
    String versuch;
    System.out.println("Versuchen Sie Ihr Glück");
    versuch = stdin.readLine();

    // solange der zweite Spieler das Wort noch nicht erraten hat und
    // noch Versuche übrig hat
    while ( zaehler < 5  &&  !versuch.equals( wort ) )
    {
        System.out.println("Ein weiterer Versuch:");
        versuch = stdin.readLine();
        zaehler   = zaehler + 1;
    }

    // überprüfen, ob derr zweite Spieler gewonnen hat
    if ( versuch.equals( wort ) )
        System.out.println("Sie haben gewonnen!");
    else
        System.out.println("Sie haben verloren!");

  }
}

Ist eine der if- oder while-Anweisungen verschachtelt?

Es wird sich für Sie lohnen, wenn Sie die Organisation dieses Programms studieren. Betrachten Sie wie es aus einer Sequenz von while- und if-Anweisungen zusammengesetzt wurde.


10.   Angenommen Sie möchten das Spiel mit DREI versteckten Worten spielen. Der erste Spieler gibt ein Wort ein, der zweite Spieler hat fünf Versuche es zu erraten, dann gibt der erste Spieler ein zweites Wort ein, der zweite Spieler hat fünf Versuche es zu erraten und so weiter. (Das ist immer noch ein dummes Spiel.)

Wie würden Sie dieses neue Spiel implementieren?    

(Ein etwas besseres Programm würde aus drei "Runden" bestehen. Jede Runde würde darin bestehen, dass der erste Spieler ein Wort eingibt, das der zweite Spieler rät, dann gibt der zweite Spieler ein Wort ein, das der erste Spieler rät.)


Ende des Tests. Wenn Sie ihn wiederholen möchten, laden Sie die Seite in Ihrem Browser neu.

Zurück zum Inhaltsverzeichnis.