next up previous contents
Nächste Seite: Häufigkeitsanalyse Aufwärts: Eingabe Vorherige Seite: Wiederholte Eingabe   Inhalt

``Sternreihen'' ausgeben

Im folgenden Beispiel werden Reihen von * nach einigen Mustern (``trapezförmig'') ausgegeben, wobei die einzelnen Muster durch eine Linie getrennt werden sollen. Die maximale Anzahl der * wird eingegeben; die Ausgabe bricht ab, wenn 0 eingegeben wurde:

5
*
**
***
****
*****
*****
****
***
**
*
------
    *
   **
  ***
 ****
*****
*****
 ****
  ***
   **
    *
------
*****
 ****
  ***
   **
    *
    *
   **
  ***
 ****
*****
------
*****
****
***
**
*
*
**
***
****
*****

Die ``Programmsteuerung'' wurde im Hauptprogramm mit Hilfe einer do - while Schleife realisiert: Solange keine 0 eingegeben wurde, werden die einzelnen ``Dreiecksteile'' ausgegeben. Beachte die korrekte Übergabe der eingegebenen Zahl!

import java.io.*;

public class trapez {
    public static void main (String [] args) throws IOException {
        int zahl;
        do {
            BufferedReader zahlenpuffer = new BufferedReader(new InputStreamReader(System.in));
            zahl = Integer.parseInt(zahlenpuffer.readLine());
            dreieck1(zahl, true);
            dreieck1(zahl, false);
            linie(zahl);
            dreieck2(zahl, false);
            dreieck2(zahl, true);
            linie(zahl);
            dreieck3(zahl);
            linie(zahl);
            dreieck4(zahl);
        } while (zahl != 0);
    }

    public static void linie(int reihe) {
        for (int i=0; i<=reihe; i++)
            System.out.print("-");
        System.out.print("\n");
    }

    public static void dreieck1(int zahl, boolean modus) {
        if (modus) 
            for (int i = 0; i<zahl; i++) ausgabe1(i);
        else 
            for (int i = zahl-1; i>=0; i--) ausgabe1(i);
    }

    public static void ausgabe1(int reihe) {
        for (int j = 0; j <= reihe; j++) {
            System.out.print("*");
        }
        System.out.print("\n"); 
    }

    public static void dreieck2(int zahl, boolean modus) {
        if (modus) 
            for (int i = 0; i<zahl; i++) ausgabe2(i, zahl);
        else 
            for (int i = zahl-1; i>=0; i--) ausgabe2(i, zahl);
    }

    public static void ausgabe2(int reihe, int rest) {
        for (int j = 0; j < reihe; j++) 
            System.out.print(" ");
        for (int j = 0; j < rest-reihe; j++)
            System.out.print("*");
        System.out.print("\n");
    }

    public static void dreieck3(int zahl) {
        dreieck2(zahl, true);
        dreieck2(zahl, false);
    }

    public static void dreieck4(int zahl) {
        dreieck1(zahl,false);
        dreieck1(zahl,true);
    }
}

Das obige Programm könnte noch komprimierter formuliert werden. Wie?



Alfred Nussbaumer 2003-02-10