Schleifen (3)

Verschachtelte Schleifen / formatierte Ausgabe

Sehen Sie sich das folgende Programm genau an. Es enthält zwei "verschachtelte" for-Schleifen.
Versuchen Sie herauszubekommen, was es leistet. Erst, wenn Sie eine Vermutung festgehalten haben, dürfen Sie das Programm ausprobieren. Wenden Sie das Prinzip verschachtelter For-Schleifen anschließend bei Aufgabe 1 an.


public class Nawaswohl {
  public static void main(String[] args) {
    for (int m=1; m<11; m++) {
      for (int n=1; n<11; n++) {
        System.out.format("%4d",m*n);
      }
     System.out.println();
    }
  }
}


Die Format-Anweisung in der inneren For-Schleife bewirkt, dass das Produkt m*n als ganze Zahl mit einer festen Breite von 4 Stellen formatiert ausgegeben wird. Da der Zeichensatz des Konsolenfensters unproportional ist (das i hat dieselbe breite wie das W), lassen sich auf diese Art im Konsolenfenster relativ einfach Tabellen erstellen.

Auch Kommazahlen lassen sich formatiert ausgeben. Eine Änderung in System.out.format("%7.2f",(double) m*n) bewirkt, dass das Produkt m*n als Kommazahl mit insgesamt 7 Stellen Breite ausgegeben wird. Davon ist eine Stelle das Komma, zwei Stellen stehen hinter dem Komma. Für den Vorkommateil verbleiben also noch 4 Stellen.

Ausstieg in voller Fahrt

Alle Arten von Schleifen kann man mit break vorzeitig verlassen.
Bei for-Schleifen kann man außerdem mit continue vorzeitig zum nächsten Wert der Laufvariablen wechseln.


public class Hypothek {
  public static void main(String[] args) throws Exception {
    System.out.println("Hypothek\n");
    System.out.println("Jahr Restschuld: ");
    double schuld=50000;
    double jahresRate=3000;
    double zinsSatz=5.5;
    int i;
    for (i=0; i<=100; i++){
      String j = String.format("%3d",i);                 // Integer dreistellig formatiert
      String r = String.format("%,12.2f",schuld);        // Double zwölfstellig (2 Nachkommastellen)
      System.out.println(j+r);
      schuld = schuld*(1+zinsSatz/100)-jahresRate;
      if (schuld<0) break;                               // break bricht die Schleife vorzeitig ab
      Thread.sleep(100);
    }
    System.out.println("Nach "+(i+1)+" Jahren ist die Schuld getilgt.");
  }
}


Hier noch ein weiteres Beispiel für die formatierte Ausgabe von Zahlen.
So wie im folgenden Programm dargestellt, haben Büromenschen früher auf Addiermaschinen multipliziert.


import java.util.*;

public class Multiplikation {
  public static void main(String[] args) {
    System.out.println("Addiermaschinen-Mutiplikation\n");
    Scanner Eingabe = new Scanner(System.in);
    System.out.print("Geben Sie den ersten Faktor ein : ");
    String a = Eingabe.next();
    System.out.print("Geben Sie den zweiten Faktor ein: ");
    String b = Eingabe.next();
    System.out.println();
    System.out.format("%16s \n",a+" "+b);
    System.out.println("--------------------");
    int produkt = 0;
    for (int stelle=a.length()-1;stelle>=0;stelle--) {
      int as = Integer.parseInt(a.substring(stelle,stelle+1));
      int bWert = Integer.parseInt(b);
      for (int times=as-1; times>=0; times--) {
        produkt = produkt + bWert;
        System.out.format("%16d \n",bWert);
      }
      b=b+"0";
    }
    System.out.println("--------------------");
    System.out.format("%16d \n",produkt);
  }
}


Aufgaben:

  1. Ändern Sie das Hypotheken-Programm so ab, dass der Benutzer die Schuld, die Rate und den Zinssatz bestimmen kann.
  2. Machen Sie aus dem Schuldentilgungsprogramm ein Vermögensbildungsprogramm. Wie viel müssen Sie pro Monat bei einer bestimmten Verzinsung sparen, damit Sie mit 80 Millionär sind? 
  3. Schreiben Sie ein Programm, dass alle ungeraden Zahlen durchläuft und zu jeder dieser Zahlen, die Summe aller kleineren ungeraden Zahlen ausgibt. Was stellen Sie fest?
  4. Die Zahlen 3, 4 und 5 bilden ein "pythagoräisches Zahlentripel". Weil 3² + 4² = 5² ist, deshalb gilt in Umkehrung des Satzes von Pythagoras, dass ein Dreieck mit den Seitenlängen a = 3 cm, b = 4 cm und c = 5 cm rechtwinklig ist.
    Finden mithilfe dreier verschachtelter For-Schleifen weitere pythagoräische Zahlentripel mit ganzzahligen Seitenlängen < 50.
  5. Stellen Sie eine beliebige Aufgabe zur schriftlichen Division mithilfe von Format-Befehlen übersichtlich dar. (Anspruchsvoll!)