***** Übungen: Java - for-Schleife ***** Java_28_for-Schleife-1a: Einfache FOR-Schleife Sie wollen in einer Methode hochzaehlen() mit einer FOR-Schleife die Zahlen von 1 bis 100 ausgeben lassen. --- Erstellen Sie ein Struktogramm dazu. --- Programmieren Sie die Aufgabe (Startklasse, Klasse 'Zaehler', in der eine Methode hochzaehlen() benutzt wird). Probieren Sie Lauffähigkeit aus. Zusatzaufgabe GUI: --- Erstellen Sie ein GUI, das nur einen Knopf enthält. Beim Drücken des Knopfes wird die Methode hochzaehlen() der Klasse Zaehler gestartet. @@@ Java_28_for-Schleife-1b: Einfache FOR-Schleife Sie wollen sich mit einer FOR-Schleife die Zahlen von 1 bis 20 in Zweierschritten ausgeben. --- Erstellen Sie ein Struktogramm dazu. --- Verändern Sie Aufgabe 1 entsprechend. Zusatzaufgabe GUI --- Verändern Sie die grafische Oberfläche so, dass man einen Wert eingeben kann, bis zu dem gezählt wird. (Fortgeschrittene: Verändern Sie die grafische Oberfläche so, dass man auch die Schrittweite eingeben kann.) @@@ Java_28_for-Schleife-1c: Einfache For-Schleife mit Scanner-Eingabe Der Benutzer kann in der Konsole eingeben: Startwert Schrittweite Endwert Sobald alle drei Werte eingegeben sind, wird eine Methode hochzaehlen() der Klasse Zaehler gestartet, die diese Werte verwendet. @@@ Java_28_for-Schleife-1d: Einfache For-Schleife mit krasser Rechnerbelastung a) Lassen Sie Ihren Rechner mal was arbeiten. Geben Sie mit einer For-Schleife die Zahlen von 1 bis einer Million aus (Sie könnten eine der vorigen Aufgaben entsprechend pimpen). b) Das war nicht genug? Benutzen Sie für die Zählervariable den Datentyp double und hauen Sie richtig rein. Der Wertebereich für double ist 4.9e-324 bis 1.79e+308 (d.h.: 4.9 mal 10 hoch minus 324 bis 1.79 * 10 hoch 308). Zusatzaufgabe Messen Sie die Zeit, die der Rechner braucht, einmal mit Ausgabe der einzelnen Werte (System.out.println) und einmal ohne. Benutzen Sie dafür System.nanoTime(). Erheben Sie vor Start der Schleife die Zeit (long start = System.nanoTime();), nach Beendigung der Schleifendurchläufe die Endzeit (long ende = System.nanoTime();). Durch Subtraktion erhalten Sie die Zeitdauer in Nanosekunden. (Mehr: http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/System.html#nanoTime() ) Führen Sie Ihr Experiment mehrfach durch. @@@ Java_28_for-Schleife-2: Erweitertes Hochzählen Lassen Sie mit einer FOR-Schleife die Zahlen von 1 bis 100 ausgeben. Schreiben Sie hinter alle 10er-Zahlen (10, 20, 30 usw.) das Wort "Zehnerzahl!". Ein Lösungsansatz: Sie können jede Zahl daraufhin überprüfen, ob sie sich ohne Rest durch 10 teilen lässt. Dazu benötigen Sie die Modulo-Division, bei der Sie statt des Divisionszeichens ein Prozentzeichen benutzen. Als Ergebnis steht der Rest. Beispiel 13%2 = 1 12%2 = 0 24%2 = 0 27%5 = 2 10%10 = 0 12%10 = 2 Wenn die Zählervariable also durch 10 geteilt keinen Rest ergibt (Ergebnis der Modulo-Rechnung = 0), wird die entsprechende Bemerkung ausgegeben. @@@ Java_28_for-Schleife-3: For-Schleife mit Eingabe Der User kann über die Scannerklasse oder GUI eingeben - einen beliebigen Satz - eine Zahl x Geben Sie anschließend den Satz x Mal untereinander in der Konsole aus. ZUSATZAUFGABE: Realisieren Sie diese Aufgabe in einer GUI. Den Satz geben Sie aus in einer jTextArea; benutzen Sie für die Ausgabe die Methode append(), also bspw. jTextArea1.append(satz); Sie benutzen die Textarea, da sie scrollbar sein kann. Beachten Sie, dass die Ausgabe erst vorgenommen wird, sobald alle Ergebnisse berechnet sind, es ist also nicht so spektakulär, was Sie erwartet. Seien Sie erst mal vorsichtig und starten Sie vielleicht mit 1000 oder 10000. @@@ Java_28_for-Schleife-4: Verschachtelte For-Schleife Erstellen Sie einen primitiven Kalender (primitiv ist er deshalb, weil er nur Monate mit 30 Tagen kennt). Orientieren Sie sich an diesem Struktogramm: *LINK 16java/java28-for-bild1-primitiver-kalender.png LINK* Zusatzaufgabe: Erweitern Sie die Aufgabe so, dass der Kalender korrekt zählt (d.h. in den Monaten 1,3,5,7,8,10,12 werden 31 Tage ausgegeben, in den Monaten 4,6,9,11 nur 30 Tage, im Monat 2 nur 28 Tage). Formatieren Sie die Ausgabe etwas schöner. @@@ Java_28_for-Schleife-5: For-Schleife, ASCII-Kunst Erzeugen Sie mit möglichst wenig Code folgende Ausgabe: * * * * * * * * Erstellen Sie dazu VORHER UNBEDINGT ein Struktogramm. Sie können sich am Kalender-Struktogramm (s.o.) orientieren. @@@ Java_28_for-Schleife-6: For-Schleife, ASCII-Kunst Erzeugen Sie mit möglichst wenig Code folgende Ausgabe: 1 12 123 1234 12345 123456 1234567 12345678 123456789 Zusatzaufgabe: Verändern Sie Ihr Skript so, dass die Ausgabe so aussieht: 1 12 123 123* 123*5 123*56 123*567 123*5678 123*56789 @@@ Java_28_for-Schleife-7: Kamm Erzeugen Sie in der Konsole einen Kamm, der ungefähr so aussieht: * * * * ************* * * * * ************* * * (usw.) Der User kann über ein GUI eingeben, wie viele Zinken (******) der Kamm hat, wie lange die Zinken sind (d.h. Anzahl der Sternchen) und wie groß die Abstände zwischen den Zinken sind (d.h. Anzahl der Zeilen zwischen den Zinken. Auf Knopfdruck wird der Kamm in der Konsole ausgegeben. @@@ Java_28_for-Schleife-8: Einmaleins mit verschachtelter FOR-Schleife Geben Sie in zwanzig Reihen das große Einmaleins aus. Das Ergebnis soll ungefähr so aussehen: 1: 1×1=1, 2×1=2, …. 10×1=10 2: 1×2=2, 2×2=4, … 10×2=20 3: 1×3=3, 2×3=6, … 10×3=30 Fertigen Sie vorher ein Struktogramm an. @@@ Java_28_for-Schleife-9: Zinsrechner Der User kann über eine Scanner-Eingabe folgende Daten eingeben: 1) Das Kapital, das er auf einem Sparbuch angelegt hat (k) - Euro 2) Den Zinssatz, mit dem das Geld verzinst ist (p) - Prozent 3) Die Anzahl der Jahre, die das Geld angelegt bleibt (n) Zur Erinnerung: Die Formel für die Zinseszinsberechnung lautet: Endkapital = k*((1+p/100)^n) Eventuell brauchen Sie die Formel gar nicht, kommt darauf an, wie Sie vorgehen. Es soll ausgegeben werden: a) Eine Nachricht in Form von "Nach n Jahren beträgt Ihr Vermögen z Euro." b) Eine Liste, die den jährlichen Zuwachs zeigt, in Form von: Für das 1. Jahr erhalten Sie x Euro Zinsen, damit beträgt Ihr Gesamtvermögen y Euro. Für das 2. Jahr erhalten Sie z Euro Zinsen, damit beträgt Ihr Gesamtvermögen d Euro. usw. Zusatzaufgabe a) Setzen Sie auf Ihr Programm ein GUI. Zusatzaufgabe b) Leider werden müssen Sie von Ihren Zinseinnahmen 42% Steuer p.a. bezahlen (Spitzensteuersatz). Beziehen Sie dies in Ihre Kalkulation mit ein. Zusatzaufgabe c) Erzeugen Sie einen zusätzliche Ausgabe ganz zu Anfang (vor der Liste!), die sagt, nach welchem Zeitraum sich das Guthaben verdoppelt und verzehnfacht hat ("Nach x Jahren hat sich Ihr Guthaben verdoppelt, nach y Jahren hat sich Ihr Guthaben verzehnfacht."). Es reicht, wenn Sie auf ganze Jahre runden! @@@ Java_28_for-Schleife-10: Musterausgabe einfach/schwer EINFACH: In der Konsole soll folgendes Muster ausgegeben werden: 1 - 2 -- 3 --- 4 ---- 5 ----- 6 ------ 7 ------- 1) Erstellen Sie ein Struktogramm. 2) Erstellen Sie das Programm und testen Sie seine Lauffähigkeit. --------------------------------------------- SCHWERER: In der Konsole soll folgendes Muster ausgegeben werden: 1 - 2 -- 3 --- 4 - 5 -- 6 --- 7 - 8 -- 9 --- 10 - 11 -- 12 --- 1) Erstellen Sie ein Struktogramm. 2) Erstellen Sie das Programm und testen Sie seine Lauffähigkeit. @@@ Java_28_for-Schleife-11: Code interpretieren public static void ausgabeErzeugenV2() { String ausgabe; for(int i = 1;i <= 12;i++) { if(i % 3 == 0) // laufvariable durch 3 teilbar -> 3,6,9 ... { ausgabe = "---"; } else if(i % 2 == 0) // laufvariable durch 2 teilbar -> 2, 4, 8, 10, 14 ... // 3er schon ausgeschlossen wg. ELSE if ! { ausgabe = "--"; } else { ausgabe = "-"; } System.out.println(i + " " + ausgabe); } }