[an error occurred while processing this directive]
Rheinland-Pfalz;
Informatik
2007; letzte Aktualisierung: 19.6.2014; Claus Schmitt
![]() |
Startseite Informatik-Rheinland-Pfalz |
Das Problem
Ein Struktogramm
Java-Quelltexte
Installation
von Java-Entwicklungsumgebung und Editor
Editieren,
kompilieren, starten des Programmes
Technische
Hintergründe
Fachbegiffe suchen für alle Java-Seiten (Index)
Alle
Java-Quelltexte
Quellen
Wenn ich mir vornehme, eine neue Programmiersprache zu
lernen, bin ich oft enttäuscht, wenn es dann am Anfang nur für das "Hello
world"-Programm reicht.. Wir beginnen tatsächlich mit einem "phänomenalen Problem", das uns in seiner Erstaunlichkeit durchaus auch noch in der Abiturklasse (Theoretische Informatik / Halteproblem) beschäftigen kann:
|
||
Lassen Sie uns ein Struktogramm
entwickeln für diesen "Algorithmus":
|
||
Jetzt können
wir uns anschauen, wie dieses Struktogramm in Java-Quelltext übertragen wird: Lassen Sie sich von fremdartigen Begriffen nicht irritieren, sondern versuchen sie nur die Zusammenhänge mit dem Struktogramm zu entdecken. Außerdem kann man sicher davon ausgehen, dass bei Ihnen Erfahrungen mit mindestens einer höheren Programmiersprache vorliegen. |
||
|
||
Es ergibt sich folgende Ausgabe: | ||
|
||
|
||
Da es unpraktisch ist, den Startwert n immer neu zu
editieren, sieht man eine kommandozeilenorientierte Eingabe vor: (Die aktuellen Parameter werden als Zeichenketten gelesen; nach einer Leerstelle folgt der nächste Parameter; auf den ersten greift man über args[0] zu; mit Konvertierungsfunktionen kann man geeignete Übergabewerte in Zahlen umwandeln s.u.) |
||
class Ulam { public static void main (String[] args) { //Der erste Parameter hat die Nummer 0 int n = Integer.parseInt(args[0]); //Die While-Schleife klammert einen Block von Anweisungen while(n != 1) { if(n % 2 == 0) n = n / 2; else n = 3*n + 1; System.out.printf("%d, ",n); } //im Formatstring ist %d ein Platzhalter für eine ganze Zahl } } Liefert mit dem aktuellen Parameter 27: |
||
![]() |
Zur vernünftigen Darstellung der Ulam-Folge fehlt jetzt nur noch eine geeignete Formatierung: | |
class Ulam { public static void main (String[] args) { int n = Integer.parseInt(args[0]); int i = 0; while(n != 1) { //Index für das Ulam-Folgenglied i = i +1; if(n % 2 == 0) n = n / 2; else n = 3*n + 1; // 7 Plätze für jede Zahl System.out.printf("%7d,",n); // Zeilenwechsel immer nach 10 Zahlen if (i%10 == 0 ) System.out.println(); } // Schleife beendet //%n steht für einen Zeilenwechsel System.out.printf("%n%nDiese Ulamfolge umfasst %d Zahlen.%n",i); } } |
|
![]() |
|
Man kann im Unterricht ein
Problembewusstein entwickeln, dass die Termination dieser
Entwicklung keinesfalls selbstverständlich ist, indem man z.B. den
Term 3n + 1 durch 3n - 1
ersetzen lässt; die Schüler werden dann sehr schnell nachstehende
Folgenentwicklung (und damit eine Endlosschleife) erkennen: 5, 14, 7, 20, 10, 5, 14,... Im Wettbewerb der Gruppenarbeit ist es immer eine spannende Angelegenheit, die Startzahl zu finden, welche die längste (?) Ulamfolge bewirkt... ![]() Bis die Ulamfolge eine Zweierpotenz trifft, entwickeln sich oft sehr große Zahlen; im obigen Beispiel ist 9232 das größte Folgenglied. In unserem Java-Programm ist das eine schöne Gelegenheit, auch eine einseitige Verzweigung zu berücksichtigen: |
|
class Ulam { public static void main (String[] args) { int n = Integer.parseInt(args[0]); //Zunächst wird das Maximum auf den Startwert gesetzt. int max = n; int i = 0; while(n != 1) { i = i +1; if(n % 2 == 0) n = n / 2; else n = 3*n + 1; if (n > max) max = n; } System.out.printf("%nDiese Ulamfolge umfasst %d Zahlen; %n",i); System.out.printf("das groesste Folgenglied ist %d.%n",max); } } |
|
![]() |
|
Nun ist es an der Zeit, Die Installation von Java zu erläutern:
|
|
Der Editor: |
![]() |
Die
erste Eingabe eines Java-Quelltextes. Man erzeugt sich im Editor eine neue Seite und gibt ganz nach Geschmack einen der obigen Ulam-Quelltexte ein; eine Datei legt man möglichst gleich am Anfang mit "Speichern unter" (1) in das übliche Verzeichnis für die eigenen Daten; der Dateinamen muss gleich dem Namen der Klasse sein, also hier Ulam; der Editor fügt selbst die Dateinamenerweiterung .java an, also Ulam.java (Groß- kleinschreibung unbedingt beachten). |
|
![]() |
|
Der
Compiler untersucht den Quelltext auf Syntax-Fehler. Nach Drücken der Taste (4) erscheinen in einem unteren Fester die i.d.R. zahlreichen Fehlermeldungen... |
|
![]() |
|
Der
Compiler übersetzt den Quelltext in sog. Bytecode ... ...sobald man alle Fehler verbessert hat... Gleichzeitig wird dieser Bytecode in das gleiche Datenverzeichnis, unter dem gleichen Namen, aber mit der Dateinamenerweiterung .class gespeichert; also hier Ulam.class . Der Bytecode wird von dem Interpreter gestartet, indem man die Taste (5) auslöst. Die Ausgabe erscheint in einem weiteren unteren Fenster. |
|
![]() |
|
Falls das
Programm Parameter in der Kommandozeile
vorsieht, kann man diese vor dem Start über einen Menübefehl (2)
eingeben.![]() ![]() |
|
Hintergründe: Ein Java-Bytecode läuft auf Windows, Linux , Solaris... Das Dateihandling läuft also mit dem Editor ziemlich automatisch und auf Windowsebene; oft will man aber ohne diese Oberfläche unmittelbar mit dem "Java Development Kit" arbeiten:
|
|
|
|
Weitere
Literaturempfehlungen finden Sie hier |
![]() |
Startseite Informatik-Rheinland-Pfalz |