Selbstlernmaterial JAVA -...

31
Selbstlernmaterial JAVA für die Vorbereitungskurse Klasse 10 (basierend auf NetBeans ab 6.5) Achtung, für absolute Programmieranfänger ist das Material eher ungeeignet! Dies ist die Variante vom 16.03.11

Transcript of Selbstlernmaterial JAVA -...

Page 1: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

Selbstlernmaterial JAVA

für die Vorbereitungskurse Klasse 10(basierend auf NetBeans ab 6.5)

Achtung, für absolute Programmieranfängerist das Material eher ungeeignet!

Dies ist die Variante vom 16.03.11

Page 2: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

FKG OpenBook

2

Page 3: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Selbstlernmaterial Informatik

Bestandsaufnahme• Informatik-Unterricht ist anders. Ein systematisches und schrittweises Lernen der Einzelteile

wie in anderen Fächern ist zwar möglich, aber auch langweilig. Hab keine Angst vor Dingen, die du noch nicht vollständig verstehst.

• Momentan lernt jeder am eigenen Programm, jeder lernt unterschiedlich schnell und jeder will was anderes. Weiter so!

• Allerdings bleiben Phasen der Strukturierung etwas außen vor. Dagegen lässt sich etwas tun.

Deshalb• In folgender Schrift findest du zuerst den Stoff in recht kompakter Form. Das ist das, was du

wissen und verstehen musst. Oft wirst du zum Thema noch mehr in Erfahrung bringen als in dieser Schrift steht. Das ist erwünscht!

• Du kannst lernen, in dem du Programme schreibst oder Programme veränderst. Du findest Aufgaben und Programme, die du als Grundlage verwenden kannst.

• Arbeite stets selbst! Vom Zuschauen lernt man nur wenig (zu wenig für eine Klausur).• Plane deine Programme stets zuerst auf dem Papier!• Gegenseitige Hilfe ist unbedingt notwendig.• Im Informatik-Unterricht geht es nicht so sehr um das Lernen von Fakten, sondern eher um

das Lernen von Fertigkeiten (algorithmisch Denken, Strukturieren, Planen, Fehler suchen, ...)

• Zur Prüfung des eigenen Wissens soll man kleine Programme erstellen. Gute fertige Lösungen werden auf der Lernplattform des FKG gelagert, damit andere Schüler damit lernen können.

• Diese Schrift ist immer unfertig. Hilf mit, sie zu verbessern!

Quellen• Java lernen:

◦ Die „Insel“ (Java ist auch eine Insel – OpenBook)◦ Einstiegsmaterial auf www.flemming-universum.de

• Java nachschlagen◦ Der „Krüger“ (www.javabuch.de)◦ Die API-Docs

• vorgefertigte Programme auf der Lernplattform◦ für einfache Programme: 001_leeres_programm◦ für Programme mit Grafik: 002_grafik_leer◦ für Programme mit Animationen: 003_grafik_timer_leer◦ weitere Programme auf Moodle je nach Aufgabenstellung

• zum Lernen von Fertigkeiten◦ Der Werkzeugkoffer (www.flemming-universum.de)

Los gehts!

3

Page 4: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 1 – Umgang mit NetBeans

Wissen:

• Will man ein Programm erstellen, erzeugt man zuerst ein Projekt (Java-Application)• Anschließend fügt man eine Datei vom Typ JFrame hinzu und löscht Main.• Es gibt neben vielen anderen die Oberflächenelemente Buttons, Textfelder, Labels• Man kann Funktionen an diese Objekte hängen, die im Falle der Aktivierung ausgeführt

werden: Rechtsklick → Events → ActionPerformed • Texte der Elemente kann man mit

jButton1.setText("...") setzen bzw. mit jButton1.getText() abfragen.

• Man kann viele Eigenschaften von Oberflächenelementen direkt in NetBeans setzen.

Aufgaben:

• Erstelle ein leeres Programm.• Füge Buttons hinzu und Labels hinzu. Der erste Button bekommt den Text Drück mich, der

zweite den Text Wechseln.

• Wenn der erste Button gedrückt wird, soll sich der Text des Buttons ändern in Danke!.• Wenn der zweite Buttons gedrückt wird, soll sich der Text der beiden Buttons tauschen.

Dazu darf das Label als Zwischenspeicher verwendet werden.• Setze die Überschrift des Fensters auf Schönes Wetter heute

Kontrolle:

• 010_buttons

4

Page 5: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 2 – Texte I (Zeichenketten)

Wissen

• Texte nennt der Programmierer Zeichenketten (String)• Beachte, dass der Text "123" nichts mit der Zahl 123 zu tun hat.• Es gibt Variable, die sich Zeichenketten merken können. Diese müssen mit

String text;oder mitString text = "OMA";angelegt werden.

• Im ersten Fall existiert nur die Variable, die sich mal den Text merken kann. Ein text ist noch nicht da. Man kann ihn zum Beispiel von einem Textfeld holen:text = jTextField1.getText();

• Einen leeren Text bekommt man mitString leererText = "";

• Texte kann man zusammenfügen, in dem man sie addiert:String text2 = text + "OMA";

Aufgaben

• Ändere das Programm zum Austauschen der Buttontexte aus Teil 1 so, dass du kein Label mehr als Zwischenspeicher brauchst.

• Erstelle ein Programm mit einem Textfeld, einem Button und einem Label. Wird der Button gedrückt, dann soll aus dem Textfeld ein Name genommen und gemeinsam mit einem Hallo ins Label geschrieben werden.

• Erstelle eine Schreibmaschine mit wenigen tasten und einem Textbereich (TextArea) zur Darstellung. Jede Taste soll an den entsprechenden Text angefügt werden.

5

Page 6: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Kontrolle

• 020_textwechsel• 021_hallo• 022_schreibmaschine

6

Page 7: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 3 – ganzzahlige Variable (Integer)

Wissen

• Genau so wie man Texte speichern kann, kann man Zahlen speichern. Allerdings ist der Typ nun int (Integer) und steht für ganze Zahlenint ersteZahl;int zweiteZahl = 4;

• Im ersten Fall ist die Belegung der Variablen zufällig, auf eine 0 kann man sich nicht verlassen.

• Zahlen und Variableninhalte kann man verrechnen:ersteZahl = zweiteZahl + 1;ersteZahl = ersteZahl – zweiteZahl;ersteZahl = zweiteZahl / 3;

• Hat ein Ergebnis Nachkommastellen, dann werden diese einfach abgeschnitten. Es erfolgt keine Rundung.

• Die Texte aus den Textfeldern kann man in Zahlen umwandelnint zahl = Integer.parseInt( jTextField1.getText() );

• Die einfachste Form der Rückumwandlung von Zahlen in Zeichenketten ist die Addition zu einer leeren ZeichenketteString ausgabe = "" + ersteZahl;

Aufgaben

• Programmiere einen kleinen Taschenrechner. Dieser hat zwei Textfelder für die Operanden, vier Buttons für die Rechenoperationen und ein Textfeld für das Ergebnis.

Kontrolle

• 031_taschenrechner

7

Page 8: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 4 – Schleifen

Wissen

• Wiederholungen realisiert man mit Schleifen (while)• Eine Schleife braucht eine Bedingung. Solange diese erfüllt ist, wird die Schleife

durchlaufen.while (i < 10){ ....}

• Mit geschweiften Klammern macht man deutlich, welche Anweisungen zur Schleife gehören.

• Um Bedingungen zu formulieren kann man< kleiner<= kleiner oder gleich> größer>= größer oder gleich!= ungleich== gleich (doppeltes Gleichheitszeichen, nur für Zahlen)verwenden.

• Vergiss nie, bei einer while-Schleife die Zählvariable zu verändern, sonst läuft das Programm ewig (und reagiert nicht mehr).

Aufgaben

• Nimm das Programm 40_schleife. Ändere es so, dass nicht 10, sondern 50 Zahlen angezeigt werden.

• Ändere das Programm so, dass nur gerade Zahlen angezeigt werden.

• Im nächsten Schritt soll das Programm von 20 bis 1 rückwärts zählen.

• Berechne mit einer Schleife (auch wenn es ohne Schleife einfacher geht) die Summe der Zahlen 25 bis 73.

• Gib die ersten 20 Fibonacci-Zahlen aus.

Kontrolle

• 041_rueckwaerts• 042_summe• 043_fibonacci

8

Page 9: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 5 – Verzweigungen

Wissen

• Verzweigungen heißen so, weil sie den Programmfluss verzweigen. Ist eine Bedingung erfüllt, wird ein Programmstück abgearbeitet.if (i < 7){ ...}

• Man kann auch Alternativen angeben, wenn Bedingungen nicht erfüllt sindif (i < 7){ ...}else{ ...}

• Den Rest einer ganzzahligen Division bekommt man mit dem Modulo-Operator %int i = a % 2;

Aufgaben

• Prüfe, ob eine Zahl durch drei teilbar ist.• Erweitere den Taschenrechner so, dass keine

Division durch 0 möglich ist.• Erweitere das Programm aus dem

Schleifenkapitel so, dass zu einer beliebigen Anfangszahl die ULAM-Folge ausgegeben wird. Bei eins bricht die Folge ab.

Kontrolle

• 050_teilbar• 051_taschenrechner• 052_ulam

9

Page 10: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 6 – Attribute

Wissen

• Bisher wurden Variablen nur in den Routinen für die Button deklariert. Die können sich aber nichts bis zum nächsten Aufruf, also bis zum nächsten Buttondruck, merken.

• Variable, die dauerhaft „lebendig“ sind, nennt man Attribute (Eigenschaften). Sie werden am Anfang der Klasse wie normale Variable deklariertpublic class Fenster extends javax.swing.JFrame { int einAttribut = 0;

• Da Attribute für wichtigere Sachen verwendet werden, ist eine ordentliche – also lesbare – Bezeichnung besonders wichtig.

Aufgaben

• Erstelle ein einfaches Programm, welches nur einen Button und als Buttontext die 1 hat. Bei jedem Buttondruck soll die Zahl um eins erhöht werden.

• Erweitere die Schreibmaschine um eine Shift-Funktion. Eine Variable merkt sich, ob der Shift-Modus eingeschaltet ist. Das Ein- und Ausschalten erfolgt über eine Shifttaste.

• Erstelle einen neuen Taschenrechner mit nur einem Eingabefeld, der sich die Ergebnisse der vorherigen Operation merkt (vorerst ohne Punkt- vor Strichrechnen, auch wurden einige leere Buttons für später vorbereitet).Achtung! Integervariable können nur Zahlen zwischen -2Mrd und 2Mrd verarbeiten!

• Der Taschenrechner hat noch viele Schwachstellen. Z.B. kann man nach = schlecht weiterrechnen. Rüste eine Clear-Taste nach, die den Anfangszustand wieder herstellt.

Kontrolle

• 060_hochzaehlen• 061_schreibmaschine• 062_taschenrechner• 062_taschenrechner_clear

10

Page 11: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 7 – Wahrheitswerte

Wissen

• Es gibt auch Variable für Wahrheitswerte (boolesche Werte), welche nur die Werte wahr und falsch (true und false) annehmen können.

• Sie werden wie alle anderen variablen auch deklariert:boolean b = true;

• Man kann Wahrheitswerte verknüpfen (das ist sozusagen ihre Arithmetik)!b Negation, b wird negierta && b Und (Ergebnis ist wahr, wenn a und b wahr sind)a || B Oder (Ergebnis ist wahr, wenn mindestens eins von beiden wahr ist)

• Boolesche Werte können direkt von Schleifen und Verzweigungen getestet werden:boolean doSomething = true;while (doSomething){ ...}

Aufgaben

• Ändere die Tastatur so, dass Shift mit einer booleschen Variable gemerkt wird.• Schreibe einen booleschen

Taschenrechner. Er soll zwei Eingänge haben, a negieren, a und b mit Und, Oder und evtl. Xor verknüpfen können. Nutze Checkboxen, deren Zustand du mit jCheckBox1.isSelected() abfragen kannst, für die Eingänge.

Kontrolle

• 071_schreibmaschine• 072_boolrechner

11

Page 12: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 8 – Programmierung II

Wissen

• Zählschleifen kann man auch mit for realisieren. for ist sehr mächtig. Man gibt den Anfangswert, dann die Abbruchbedingung und dann die Änderung an, alles durch Semikolon getrennt.

• Eine Schleife, die i von 2 bis 10 zählt sieht man im linken Beispiel. Die rechte Schleife arbeitet sogar mit zwei Variablen, zählt eine hoch, die andere runter und bricht ab, wenn i größer j wird.int i; int j;for (i = 2; i <= 10; i++) for (i = 0, j = 123; i <= j; i++, j--){ ... { ...

• Wie man sehen konnte, kann man j = j-1 mit j-- bzw. i=i+1 mit i++ abkürzen. Ebemfalls seien noch einmal Kurzschreibweisen a+=3 u.ä. für a=a+3 erwähnt.

• Sind bei einer Verzweigung mehrere Fälle zu unterscheiden, werden die Programmtexte schnell sehr groß. Eine kompakte for realisiert man mit switch:switch (testVariable){ case 1: ... break; case 2: ... break: ...... default: ....}

• Hinter case steht der Code für den jeweiligen Fall. Wird das break weggelassen, rutscht Java bei der Ausführung des Programms in den nächsten Block. Es gibt einige, wenn auch wenige Fälle, wo dies sinnvoll ist. default wird angesprungen, wenn die Variable einen Wert hat, der nicht aufgelistet wurde.

• switch funktioniert nur bei ganzzahligen Variablen (int, char, long, Enumerationen)

Aufgaben

• Im Taschenrechner wird die Rechenoperation mit if unterschieden. Nutze jetzt switch dafür. Schreibe gleichzeitig die Rechenoperationen +=, -=, *= und /=.

• Ändere das Fibonacci-Programm so um, dass es mit einer for-Schleife arbeitet.

Kontrolle

• 080_taschenrechner• 081_fibonacci

12

Page 13: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 9 – Kommazahlen

Wissen

• Will man mit Kommazahlen arbeiten, muss man dies durch Angabe des Types mitteilen. Es gibt zwei Sorten, Double und Float. Double nutzt 8Byte für die Darstellung, Float nur 4Byte. Double-Zahlen sind also genauer, aber auch etwas langsamer. In Schulanwendungen merkt man dies jedoch nicht.float floatVar = 4.0f;double doubleVar = 33.7;

• Kommas werden als Punkt angegeben. Die geringere Genauigkeit bei Float muss man mit einem f nach der Zahl kenntlich machen. sonst bemängelt der Compiler den Genauigkeitsverlust.

• Float- und Double-Zahlen sind nicht so genau wie bei einem Taschenrechner! Kleine Abweichungen sind normal, weil nicht jede Zahl darstellbar ist. Je größer die Zahlen, desto größer die Ungenauigkeiten.

• Umwandlungen aus Zeichenketten gibt es genau so wie für Integer:

Aufgaben

• Schreibe den Taschenrechner so um, dass er eine Kommataste bekommt und mit Kommazahlen rechnen kann.

Kontrolle

• 090_taschenrechner

13

Page 14: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 10 – eigene Prozeduren

Wissen

• Oftmals wird an verschiedenen Stellen der gleiche Code benötigt. Es ist viel Aufwand, diesen jedes Mal neu zu schreiben. Außerdem vergisst man Stellen, wenn man Fehler korrigieren muss. Es ist also sinnvoll, den Code unter einem Namen zusammenzufassen und von den entsprechen Stellen aufzurufen.

• Diese Prozeduren werden in der Klasse genau so wie die automatisch erstellten Prozeduren für die Buttons angelegt. Die Sichtbarkeit wird vorerst weggelassen. Somit bleibt anzugeben der Typ des Rückgabewertes (void, wenn nichts zurückgegeben wird bzw. int, double etc.), der Name und die Parameterliste in Klammern.int addiere(int a, int b){ return a+b;}

• Die Rückgabe erfolgt mit return. Gibt man keinen Wert zurück, kann man die Prozedur trotzdem mit return vorzeitig verlassen.

• Die Begriffe Routine, Prozedur, Funktion und Methode bedeuten (vorerst) das gleiche und werden gemischt verwendet. Eine Unterscheidung Prozedur/Funktion wie in Pascal/Delphi gibt es in Java (glücklicherweise) nicht.

• Variable werden innerhalb einer Routine nicht verändert. Schreibt man in einer Routinevoid machWas(int a){ a = 7;}und ruft anschließendint a = 4; machWas(a);auf, so ist a nach dem Aufruf immer noch 4, weil nur der Wert der Variablen, nicht aber die Variable selbst übergeben wird. Die Änderung auf 7 ist nur innerhalb von machWas wirksam. Will man a dauerhaft ändern, muss man es mittels return zurückgeben.

• Bei komplexeren Typen (angefangen bei Strings) wird nur die Adresse übergeben. Hierbei können Änderungen auch außerhalb sichtbar werden!

• Das Auslagern von Code in eigene Routinen kann auch aus Gründen der Übersichtlichkeit sinnvoll sein..

• Alle Attribute sind in den selbst definierten Routinen sichtbar.

Aufgaben

• Schreibe für den Taschenrechner eine Routine void rechne(double zahl), welche die fünf switch-Blöcke ersetzt.

Kontrolle

• 100_taschenrechner

14

Page 15: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 11 – Texte und Zeichen II

Wissen

• Die Länge eines Textes kann man mit length() ermittelnint laenge = text.length();

• Es gibt einen Datentyp Zeichen (Character – char). Man kann sich vorstellen, dass der String aus lauter chars besteht. Diese Zeichen können einzeln abgefragt werden.char zeichen = text.charAt(2);

• Die Nummern der Zeichen gehen von 0 bis laenge-1. Obiges Beispiel liefert also das dritte Zeichen zurück und text.charAt(3) geht nicht, wenn text den Wert "OMA" hat.

• Zeichen unterscheiden sich in der Schreibweise von Zeichenketten durch einfache Hochkommaschar zeichen = 'a';

• Teile von Zeichenketten bekommt man mit substring(anfang, ende+1).String text1 = "Informatik";String text2 = text.substring(2, 6);liefert "form" zurück.

• Einen Zeilenumbruch (z.B. in einem Textarea) realisiert man mit "\n".

Aufgaben

• Schreibe ein Programm, welches in einem Textfeld alle Buchstaben a zählt. Man kann die Routine auch an das Textfeld hängen (ActionPerformed, wird bei Enter aufgerufen). So spart man sich den Button zum Zählen.

• Schreibe Ein Programm, welches einen Text umkehrt.

• Erweitere die Schreibmaschine so, dass Zeilenumbrüche (Enter) möglich sind und dass das jeweils letzte Zeichen gelöscht werden kann (BackSpace).

Kontrolle

• 110_anzahl_a• 111_umkehrung• 112_schreibmaschine

15

Page 16: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 12 – Arrays (Felder/Reihungen)

Wissen

• Oftmals ist es sinnvoll, mehrere Werte unter einem Namen und einer Nummer zu speichern. Dadurch wird der Zugriff auf diese Daten deutlich einfacher (z.B. mit Schleifen). Dies geschieht mit Arrays (Felder).

• Möchte man z.B. 1000 Messwerte als int speichern, so schreibt manint[] messwerte = new int[1000];

• Die eckigen Klammern sagen, dass es sich um ein Array handelt, new reserviert den Speicher. Die 1000 sagt, dass 1000 Plätze zur Verfügung stehen. Gezählt wird wieder von 0 bis 999. Ein Feld messwerte[1000] gibt es nicht.

• Möchte man alle Werte bearbeiten, kann man dies mitfor (int i = 0; i < 1000; i++){ messwerte[i] = ...}tun. Die Punkte stehen für beliebigen Code.

Aufgaben

• Vorgeben ist das Programm 120_arraytest_leer. Dieses hat ein Array werte mit 100 Plätzen und eine Variable numWerte, die angibt, wie viele Plätze belegt sind und somit angezeigt werden sollen. Um die Anzeige braucht man sich nicht zu kümmern, die Routine listeDarstellen() muss nur aufgerufen werden. Die Routine für Zufallsfüllung mit 15 Werten ist vorbereitet.

• Schreibe eine Routine Ersetzen, die einen Wert verändert. Position und neuer Wert werden über die Textfelder eingegeben.

• Schreibe Code, der den Inhalt des Arrays rotieren lässt. Dabei soll das erste das letzte Element werden und alle anderen rutschen eine Position nach vorn.

• Schreibe Code, der den Inhalt des Arrays spiegelt (das Letzte wird das Erste usw.).• Schreibe Code, der an der aktuellen Position ein Zeichen einfügt und den rest nach hinten

schiebt (Achtung, Arraygröße beachten!). Realisiere ebenso ein Löschen.• Ordne die Objekte der Größe nach mit BubbleSort.

Kontrolle

• 121_arraytest

16

Page 17: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 13 – Zeichenketten III

Wissen

• Ein Computer kann sich nur Zahlen merken. Deshalb steht für jeden Buchstaben eine Zahl. Dies ist im ASCII-Standard festgelegt. So hat A die 65, B die 66, das ! die 33 usw.

• Das eröffnet die Möglichkeit, mit Zeichen zu rechnen, also zum Beispiel Nachfolger und Vorgänger zu finden.

• Oft interessieren nur die Buchstaben, nicht aber, ob sie groß oder klein geschrieben wurden. Dabei empfiehlt es sich, den Text komplett in Groß- oder Kleinbuchstaben umzuwandeln.String allesKlein = text.toLowerCase();String allesGross = text.toUpperCase();

• Bei Schiebereglern kann man die Position abfragenint pos = jSlider1.getValue();und auch auf die Änderung reagieren: Events → Change → stateChanged

• Einfache Typen kann man mit TypeCasting umwandeln. So ist ein int kein char, aber man kann sie umwandeln:int x = 65;char z = (char) x;

• Achtung, addiert man Zahl und Zeichen, erhält man als Ergebnis Integer.

Aufgabe

• Realisiere ein Programm mit Caesar-Verschlüsselung. Dabei wird eine Schrittweite festgelegt und dann jeder Buchstabe um diese Schrittweite verschoben.

• Realisiere noch ein zweites Programm, welches einen (kurzen) codierten Text bekommt und dann alle 25 Möglichkeiten zum Entschlüsseln probiert.

Kontrolle

• 131_caesar• 132_caesar

17

Page 18: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 14 – Grafik I

Wissen

• Alle Grafik-Befehle werden in der paint-Methode gesammelt. Diese muss man sich selbst erstellen, das leere Programm (002_grafik_leer) ist aber schon vorbereitet.

• Übergeben wird der Methode ein Graphics-Objekt. Dieses kann man sich wie eine Art Universal-Zeichenwerkzeug vorstellen. Wartet man auf die Autovervollständigung, sieht man, welche Zeichenbefehle dieses Objekt anbietet.

• Zum Zeichnen braucht man Koordinaten. Diese beziehen sich auf das Fenster. Der Nullpunkt liegt links oben, die y-Achse zeigt nach unten, die x-Achse nach rechts.

• Zeichnungen mit kleinen y-Werten können unsichtbar sein, weil sie sich hinter dem Fensterrahmen verbergen!

• paint darf nie direkt aufgerufen werden! paint wird aufgerufen, wenn sich am Fenster etwas ändert oder wenn man es mit repaint() anfordert. Für die folgenden Beispiele reicht es, dass paint automatisch beim Programmstart aufgerufen wird.

Aufgaben

• Schreibe ein Programm, welches ein Feld mit 10x10 Quadraten darstellt.

• Schreibe ein Programm, welches folgendes Linienmuster darstellt.

• (Sierpinski?)

Kontrolle

• 140_linien• 141_muster

18

Page 19: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 15 – Mathematik

Wissen

• Neben den Grundrechenarten liefert Java Unterstützung für viel Mathematik. Die mathematischen Funktionen sind in der Klasse Math gebündelt.

• Math ist eine statische Klasse, braucht also kein Objekt. Man kann Funktionen direkt aufrufen, so zum Beispiel den Sinus:double s = Math.sin(1.0);

• Achtung, Winkelfunktionen arbeiten mit Radiant, nicht mit Grad.• Potenzieren erledigt man mit Math.pow• Viele weitere Funktionen findet man, wenn man nach dem Tippen von Math. auf die

Autovervollständigung wartet.• Um die Kommazahlen von Rechnungen in ganze Zahlen für Zeichenbefehle umwandeln zu

können, greift man auf das bei einfachen Typen mögliche Type-Casting zurück:int positionX = (int) doubleVariable;

• π bekommt man über Math.PI.

Aufgaben

• Erweitere den Taschenrechner um die Wurzelfunktion (Math.sqrt). Diese soll den aktuellen Inhalt des Textfeldes nehmen und die Wurzel berechnen. Die Wurzel soll aber nur berechnet werden, wenn dies möglich ist ( x≥0 ).

• Zeichne nebenstehende Grafik, nutze dabei Sinus und Kosinus für die Koordinaten der Linien.

Kontrolle

• 150_taschenrechner • 151_kreismuster

19

Page 20: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 16 – Grafik II: Farben

Wissen

• Farben auf dem Computer funktionieren nach dem additiven System (im Gegensatz zum subtraktiven System eines Druckers). Hierbei werden Farben aus Rot, Grün und Blau gemischt.

• Farben definiert man, in dem man für die Anteile von Rot, Grün und Blau Werte von 0 (nichts) bis 255 (voll aufgedreht) angibt. Damit sind 16 Millionen Kombinationen möglich.

• Für die Arbeit mit Farben gibt es die Color-Klasse:Color meineFarbe = new Color(30, 200, 30);

• Farben setzt man vor dem Zeichenbefehl in der paint-Methode mittels setColor:graphics.setColor(meineFarbe);

• Wenn es mal schnell gehen muss, kann man vordefinierte Farben nehmen:graphics.setColor(Color.red);

• Das Fenster bittet man mit repaint() zum Neuzeichnen.

Aufgaben

• Ändere das Kreismuster aus dem vorherigen Kapitel so, dass die Linien ihren Rotanteil verstärken.

• Schreibe ein Programm, mit dem man sich Farben mischen kann.

Kontrolle

• 160_kreismuster_rot• 161_farbmischer

20

Page 21: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 17 – 2D-Arrays

Wissen

• Arrays kann man auch zweidimensional (und natürlich auch mehrdimensional) anlegen. Klassisches Beispiel sind Bilder, die eine x- und eine y-Koordinate enthalten.

• Ein zweidimensionales Array kann man anlegen mit int[][] zweiDArray = new int[100][50];Damit hat man 5000 Plätze.

• Den Zugriff auf mehrdimensionale Arrays realisiert man meist mit geschachtelten Schleifen:for (int i=0; i<100;i++){ for (int j=0; j<50; j++) { int element = zweiDArray[i][j]; ... }}

• Zufallszahlen zwischen 0 und 1 bekommt man mitdouble r = Math.random();

Aufgaben

• Erstelle ein kleines Zeichenprogramm, welches sich ein Bild als 20x20-Array merkt. Durch Anklicken soll der Bildpunkt immer negiert werden. Am Anfang ist alles weiß. Mausklicks bekommt man durch das Event MouseClicked.

• Etwas komplexer ist da schon das GameOfLife. Informiere dich im Internet über die Regeln für das Wachsen bzw. Absterben von Zellen. Beachte, dass du zwei Arrays brauchst! Wenn du die Zellen neu berechnest, erstellst du ein neues Array auf Basis des alten. Dabei darf das alte Array nicht geändert werden. Erst nach der Rechnung wird das alte Array überschrieben. Die Anfangsbelegung sei zufällig.

Kontrolle

• 170_zeichenprogramm• 171_gameoflife

21

Page 22: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 18 – Threads / Timer

Wissen

• Threads sind kleine Nebenprogramme, die man immer dann braucht, wenn etwas automatisch nebenher passieren soll (Effekte, Zähler etc.)

• Es gibt zwei Arten, hier wird die einfachere vorgestellt: Die Klasse bekommt eine Methode, in welcher der Code steht und dann wird dafür gesorgt, dass jemand diesen Code parallel abspielt. Das ist wie Multitasking im Kleinen.

• Zur Vorbereitung sind folgende Dinge notwendig:In den Kopf der Klasse gehört ein implements Runnable.Der Klasse fügt man eine Methode run (ohne Parameter, ohne Rückgabe) hinzu.Ein Threadobjekt wird als Attribut erzeugt, es bekommt das eigene Fenster als Parameter.Der Thread wird gestartet (z.B. im Konstruktor)All dies findet man vorbereitet in 003_timer_leer.

• Der Code für das Nebenprogramm steht in run.• Das Nebenprogramm startet, nachdem der Thread mit start aufgerufen wurde und endet,

wenn die run-Methode verlassen wird. Aus diesem Grund schreibt man in run gern Endlosschleifen.

• Warten erledigt Thread.sleep. Dies erfordert das noch nicht besprochene try-catch-Konstrukt. Man möge dies bitte vorerst hinnehmen. sleep() erwartet eine Anzahl von Millisekunden.

Aufgaben

• Schreibe ein Programm, das einen Wert in Abständen von einer Sekunde hochzählt.

• Erweitere Game Of Life so, dass es automatisch abläuft und man die Wartezeit mit einem Slider verändern kann.

• Schreibe eine Stoppuhr.

Kontrolle

• 180_zaehler• 181_gameoflife• 182_stoppuhr

22

Page 23: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 19 – Fehlerbehandlung mit try-catch

Wissen

• Früher haben Routinen im Falle eines Fehlers einen Fehlercode zurückgegeben, den man auswerten musste. Dies ergab – bei mehreren Aufrufen nacheinander – tief verschachtelte und unübersichtliche Verschachtelungen von Verzweigungen. Auch war die Reaktion auf einen Fehler nicht zentral gebündelt.

• Heute verfolgt man ein anderes Prinzip: Ein Block wird abgearbeitet und überwacht. Falls in diesem Block etwas schief geht (weil eine Datei nicht geöffnet werden konnte oder jemand versucht, „OMA“ in eine Zahl umzuwandeln), springt das Programm an das Ende diesesBlockes in den Bereich der Fehlerbehandlung.

• Der zu überwachende Block steht in try, der Fehlerbehandlungsblock in catch. Eine Meldung gibt Aussage über die Art des Fehlers. Z.B. kann der Inhalt mit getMessage abgefragt werden.try{ // ... der Code ...}catch (Exception e){ /// ... die Reaktion ...}

• Man sagt, eine Routine, die einen Fehler festgestellt hat, wirft eine Exception (Ausnahme). catch fängt diese Exception und reagiert darauf.

Aufgaben

• Schreibe ein kleines Additionsprogramm. Die Umwandlung der Zahlen soll in einem try-Block erfolgen. Wenn die Umwandlung schief geht, soll im catch-Block ein kleines Fenster (JoptionPane.showMessageDialog) geöffnet und die Fehlermitteilung ausgegeben werden.

Kontrolle

• 190_umwandlung

23

Page 24: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 20 – Dateiarbeit I: Textdateien

Wissen

• Das Lesen aus und das Schreiben in Dateien ist nicht ganz so einfach wie früher, aber auch wesentlich flexibler. Es werden zwei Objekte unterschieden: Zum ersten gibt es Objekte, die sagen, mit wohin Daten geschrieben werden (Datei, Netzwerk, String etc.). Zum zweiten gibt es Objekte, die sagen, wie die Daten geschrieben werden (als Zeichenkette, Einzelbyteweise etc.).

• Hier geht es nur um Textdateien. BufferedReader und BufferedWriter sorgen für die Ein- und Ausgabe von Strings, FileReader und FileWriter für die Kommunikation mit Dateien.

• Das Öffnen einer Datei geschieht durch das Erzeugen der Objekte, das Schließen mit dem Befehl close.

• Dateien werden durch ein Objekt der File-Klasse dargestellt.• Das Schreiben in eine Datei geschieht somit in folgender Reihenfolge: File-Objekt mit

Dateinamen erzeugen, FileWriter mit Fileobjekt erzeugen und am Ende BufferedWriter mit FileWriterobjekt erzeugen. Dann kann man mittels write in die Datei schreiben.

• Sieh dir dazu das Beispielprogramm 200_schreiben an.• Das Lesen geschieht analog. Aber nun erzeugt man FileReader und BufferedReader-

Objekte.• Gelesen werden die Daten mit readLine. Ist das Ende der Datei erreicht, wird null

zurückgegeben.• Bei Lese- und Schreibfehlern schaue zuerst nach, ob die Datei nicht bereits (z.B. mit einem

Texteditor) geöffnet ist. Dann erhältst du keinen Zugriff.

Aufgaben

• Erweitere das Programm 200_schreiben so, dass alle Zahlen von 1 bis 10 in die Datei geschrieben werden.

• Schreibe ein Programm, welches die Datei test.txt ausliest und im Fenster (TextArea) darstellt. Verändere den Inhalt der Datei mit einem Texteditor und prüfe erneut.

• Schreibe das Programm so um, dass es Laden und Speichern gibt und beim Speichern der Inhalt des Textbereiches in die Datei geschrieben wird.

Kontrolle

• 201_schreiben• 202_lesen• 203_lesen_schreiben

24

Page 25: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 21 – Dateiarbeit II: Auswahlboxen

Wissen

• Dateinamen ermittelt man am besten einer Auswahlbox (Dateirequester). Das Objekt stammt von der Klasse JFileChooser ab und kann Dialoge zum Laden (OpenDialog) und Speichern (SaveDialog) anzeigen.

• Man erfragt, ob OK gedrückt wurde (APPROVE_OPTION) und erhält dann die ausgewählte Datei gleich als File-Objekt:JFileChooser fChooser = new JFileChooser();int ret = fChooser.showSaveDialog(this);if (ret == JFileChooser.APPROVE_OPTION){ File datei = fChooser.getSelectedFile(); ... hier weiter wie bisher ...

• Das Öffnen eines Ladedialogs geschieht analog.

Aufgaben

• Erweitere das Programm 203_lesen_schreiben um Auswahlboxen.

Kontrolle

• 210_dialog

25

Page 26: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 22 – Zeichenketten IV

Wissen

• In Verbindung mit Dateiarbeit steht oft auch das Zerlegen von Zeichenketten, weil Daten in Textdateien meist durch Leerzeichen oder Komma (CSV-Dateien) getrennt sind. Das Zerlegen einer Zeichenkette wird von Java unterstützt.

• Dies kann man mit einem StringTokenizer, aber auch mit der split-Methode der Stringklasse erledigen. Hier soll letztere Variante vorgestellt werden.

• zuerst empfiehlt es sich, mit der trim-Methode unliebsame Whitespaces zu entfernen. Ein Aufruf von split mit Angabe des Trennzeichens gibt ein Array mit den Einzelteilen zurück:String eingabe = jTextField1.getText();eingabe = eingabe.trim();if (eingabe.length() > 0){ String[] einzelTeile = eingabe.split(" "); ... und hier geht es weiter ....

• Bei dieser Gelegenheit sei auch auf die foreach-Schleife verwiesen, die das einfache Auslesen aller Inhalte einer Datenstruktur, z.B. eines Arrays erlaubt:for (String s : einzelTeile){ ... in s steht nun bei jedem Durchlauf das naechste Element des Arrays ...}

Aufgaben

• Schreibe ein Programm, welches eine Eingabezeile mit Zahlen, die durch Leerzeichen getrennt sind, zerlegt und die Zahlen addiert.

Kontrolle

• 220_zerlegung

26

Page 27: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 23 – Grafik III: Doublebuffering

Wissen

• Zeichenoperationen – ganz besonders in Java – sind nicht sehr schnell. Ein unangenehmes Flackern ist oftmals die Folge. Es wäre also schön, wenn jemand die Zeichenoperationen im Hintergrund (in einer zweiten Bitmap) ausführt und dann erst das Ergebnis darstellt.

• Dies erledigen Objekte der Klasse JPanel automatisch. Folglich sollten sie als Zeichenfläche genutzt werden.

• Weiterhin soll eine neue Variante vorgestellt werden, die sinnvoll ist, wenn alle Grafik in dieser Zeichenfläche geschieht. Genau so, wie wir bereits die Zeichenmethode paint() erweitert haben, kann man auch das paint() des JPanel-Objektes erweitern. Die Klasse JFrame hat eine paint-Methode. Das eigene Fenster ist eine Erweiterung (man spricht von Vererbung, die neue Klasse erbt also von JFrame). Ebenso erweitern wir nun JPanel und erweitern die Zeichenmethode, die in diesem Fall paintComponent heißt.

• Die neue Klasse platzieren wir in die Fenster-Klasse, damit das Objekt alle Attribute (also Variablen) des Fensters sehen kann. Weiterhin muss das Objekt erzeugt und an das Fenster angehängt werden.

• Sieh dir dazu das Programm 230_dbuffering an. Ab Zeile 33 findest du die Erzeugung des Panel-Objektes, die Klasse selbst ist am Ende zu finden, und zwar ab Zeile 79. Eigene Zeichenoperationen erfolgen nach oder an Stelle des Einfärbens des Hintergrundes.

Aufgaben

• Erweitere das Programm 230_dbuffering so, dass alle 200ms 500 bunte Rechtecke gezeichnet werden. Freue dich, weil nichts mehr flackert.

• Schreibe ein Programm, in dem sich vier Räder gleichmäßig drehen.

Kontrolle

• 231_rechtecke• 232_raeder

27

Page 28: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 24 – Zusätzliche Fenster

Wissen

• Sehr oft wird das Erzeugen und Öffnen zusätzlicher Fenster nachgefragt. Darauf soll hier eingegangen werden. Sollen nur kurze Hinweise ausgegeben werden, empfiehlt sich die Nutzung der Klasse JoptionPane:JOptionPane.showMessageDialog(null, "Du hast Computerverbot!");

• Ein neues Fenster erzeugt man wie gehabt mit Neu→Swing→JFrame und verändert es mit dem Designer. Beim Starten öffnet sich aber nur das erste Fenster.

• Im ersten Fenster muss das zweite Fenster erzeugt werden als ganz normales Objekt. Danach schaltet man es besser unsichtbar (fensterName.setVisible(false)).

• Möchte man das Fenster öffnen, so setzt man es einfach sichtbar mit fensterName.setvisible(true);

• Im Allgemeinen ist als Schließoperation EXIT eingestellt. Soll beim Schließen des zweiten Fensters nicht das Programm geschlossen werden, setzt man die Operation im Designer einfach auf HIDE.

• Das zweite Fenster ist ein eigenständiges Objekt, hat also keinen Zugriff auf die Attribute/Variablen des ersten Fensters. Daten müssen mit eigenen Methoden übergeben werden. So bekommt das zweite Fenster eine Methode setWert(...) und das erste Fenster kann dann fenster2.setWert(...) aufrufen, wenn es Daten übergeben möchte.

Aufgaben

• Schreibe ein Programm, welches auf Knopfdruck ein zweites Fenster öffnet. Wenn das zweite Fenster wieder geschlossen wird, soll das Programm noch nicht verlassen werden.

• Erweitere das Programm so, dass Daten übergeben werden, z.B. eine Zeichenkette.

• Schreibe ein Chatprogramm mit zwei Fenstern, wobei jeweils eine Mitteilung und der Absender übergeben werden.

Kontrolle

• 240_zwei_fenster• 241_daten_an_fenster• 242_chat

28

Page 29: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 25 – Rekursion

Wissen

• Rekursive Aufrufe sind eine elegante, aber auch nicht ganz simple Art, bestimmte Probleme zu lösen. Dabei ruft sich eine Methode immer wieder selbst auf, bis der Rückgabewert einfach berechenbar ist.

• Ein typischer Aufruf sieht so aus:public int methode(int wert){ ... Code ... int ret = methode(wert); ... Code ...}

• Dabei muss man darauf achten, dass die Aufruf-Kette irgendwann, also wenn sich eine Sache einfach berechnen lässt, unterbrochen wird. Andernfalls läuft das Programm immer weiter und es kommt zu einem sogenannten Stackoverflow.

• Ein Beispiel soll die Rekursion verdeutlichen. Du kennst die Fibonacci-Folge. fib(1) und fib(2) sind je 1, aber alle weiteren lassen sich als Summe der Vorgänger darstellen. Man kann also sagen: fib(x) = fib(x-1) + fib(x-2) und schon hat man einen rekursiven Aufruf1.

Aufgaben

• Schreibe ein Programm, welches rekursiv die n-te Fibonacci-Zahl ermittelt.

• Der Turm von Hanoi lässt sich ebenfalls rekursiv berechnen. Nutze das Grafikprogramm aus dem DoubleBuffering-Kapitel als Grundlage, um die Ergebnisse auch grafisch darzustellen.

Kontrolle

• 250_fib_rekursiv• 251_hanoi

1 Diese Art, die Fibonacci-Zahlen zu ermitteln, sit sehr übersichtlich und ein gutes Beispiel, um Rekursionen zu verstehen. In Sachen Rechenzeit ist dies jedoch eine Katastrophe!

29

Page 30: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Teil 26 - Eigene Klassen

Teil 27 – Mausereignisse

30

Page 31: Selbstlernmaterial JAVA - flemming-universum.deflemming-universum.de/dateien_fuer_buch/selbstlernen/02_selbstlern... · • Momentan lernt jeder am eigenen Programm, ... • Plane

FKG OpenBook Selbstlernmaterial Vorbereitungskurs Informatik

Andreas FlemmingAndreas–[email protected] Göttingen

31