<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stageing.freitagsrunde.org//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=130.149.17.40</id>
	<title>FreitagsrundenWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stageing.freitagsrunde.org//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=130.149.17.40"/>
	<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//Spezial:Beitr%C3%A4ge/130.149.17.40"/>
	<updated>2026-10-28T19:11:35Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.45.6</generator>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben&amp;diff=15830</id>
		<title>Javakurs/Übungsaufgaben</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben&amp;diff=15830"/>
		<updated>2011-03-22T11:21:25Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Die Aufgaben */ Mehr lösungen!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wir haben jeder Aufgabe eine Einschätzung ihrer Schwierigkeit auf einer Skala von 1 bis 10 vorangestellt. Bei dieser Einschätzung sind wir von einem Gehirn ausgegangen, für welches das jeweilige Themengebiet völlig neu ist, das jedoch schon ein ganz gutes Verständnis dafür hat wie eine Programmiersprache denn so funktioniert. &lt;br /&gt;
Entsprechend kann eine schwer bewertete Aufgabe aus einem frühen Themengebiet für manch einen sehr einfach oder eine leicht bewertete aus einem späten Themengebiet für einen anderen sehr schwer sein. Es ist nur ein Wert, der euch helfen soll eure nächste Aufgabe zu wählen. Einen kleinen Überblick zu den Schwierigkeitsgraden findet ihr ganz unten auf dieser Seite.&lt;br /&gt;
&lt;br /&gt;
Falls ihr Anmerkungen zu den Aufgaben habt, könnt ihr die Diskussionsseiten der jeweiligen Aufgaben nutzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Die Aufgaben ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;2&amp;quot;&lt;br /&gt;
 |- bgcolor=&amp;quot;#D8D8D8&amp;quot;&lt;br /&gt;
 !Aufgabe&lt;br /&gt;
 !Schwierigkeit&lt;br /&gt;
 !Vorwissen&lt;br /&gt;
 !Lerneffekte&lt;br /&gt;
 !Überprüfer(Status)&lt;br /&gt;
 !Musterlösung&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Von der Console zum HelloWorld | Vom Arbeiten mit der Konsole bis &amp;quot;Hallo Welt&amp;quot;]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |1&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |1. VL&lt;br /&gt;
 | Einfaches Arbeiten mit der Kommandozeile &amp;lt;br&amp;gt; Kompilieren und Ausführen von Javacode&lt;br /&gt;
 | &lt;br /&gt;
 |[[Javakurs/Übungsaufgaben/Von der Console zum HelloWorld/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Variablen_und_Zuweisungen | Variablen und Zuweisungen]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |1&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |1. VL&lt;br /&gt;
 | Deklarieren und definieren von Variablen&amp;lt;br&amp;gt;Grundlegende Regeln der Codeformatierung&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Variablen_und_Zuweisungen/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Cowsay | Cowsay oder &amp;quot;Wie macht die Kuh?&amp;quot;]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |1. VL&lt;br /&gt;
 | etwas mehr Bildschirmausgabe&amp;lt;br&amp;gt;schöne Graphiken&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Cowsay/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Kassenbon | Erstellen eines Kassenbons]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |1. VL&lt;br /&gt;
 | Arbeiten mit Variablen&amp;lt;br&amp;gt;Fallunterscheidungen&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Kassenbon/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Javamenue | Ein eigenes Menü]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |1. VL&lt;br /&gt;
 | Lesen von Benutzereingaben über die Konsole&amp;lt;br&amp;gt;Fallunterscheidungen&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Javamenue/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Glücksspiel | Glücksspiel]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |1. VL&lt;br /&gt;
 | Anwenden von Fallunterscheidungen &lt;br /&gt;
 |&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Glücksspiel/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Arrays | Quickies Arrays]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |1&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2. VL&lt;br /&gt;
 | Verwenden von Arrays&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Arrays/Musterloesung | Musterlösung ]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Verschachtelte_Schleifen | Verschachtelte Schleifen]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2. VL&lt;br /&gt;
 | Umgang mit mehreren verschachtelten Schleifen&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Verschachtelte Schleifen/Musterloesung|Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Primzahlenaufgabe | Primzahlen]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2-5&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2. VL&lt;br /&gt;
 | Geschicktes Einsetzen von Schleifen und Arrays&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Primzahlenaufgabe/Musterloesung|Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Wetterstation | Wetterstation]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |4&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2. VL&lt;br /&gt;
 | Schleifen und Arrays&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Wetterstation/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Geometrie | Geometrie]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2. VL&lt;br /&gt;
 | Volumenberechnung&amp;lt;br&amp;gt;Lesen von Programmargumenten&lt;br /&gt;
 | &lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Zweierpotenzen | Zweierpotenzen]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2. VL&lt;br /&gt;
 | Schleifen und Arrays&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Zweierpotenzen/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Schleifen_und_Modulo | Schleifen und Modulo]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2. VL&lt;br /&gt;
 | Verwendung von Schleifen&amp;lt;br&amp;gt;Benutzung des Modulo-Operators&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Schleifen_und_Modulo/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Methoden | Quickies zu Methoden]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | Zusammenfassung der Vorlesung&lt;br /&gt;
 | &lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/MathematischeMethoden | Mathematische Methoden]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | Schreiben eigener Methoden&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/MathematischeMethoden/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Schaltjahr | Schaltjahr]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | Schreiben von Methoden&amp;lt;br&amp;gt;Fallunterscheidungen&amp;lt;br&amp;gt;Benutzerinteraktion&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Schaltjahr/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Crack_the_Password | Crack the Password]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2/3. VL&lt;br /&gt;
 | Passwörter knacken ;-)&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Crack_the_Password/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Rekursion_vs._Iteration | Rekursion vs. Iteration]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | Fehler finden&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Rekursion_vs._Iteration/Musterloesung | Mister Lösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Lineare_Funktionen | Lineare Funktionen]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | Verwendung von Methoden&amp;lt;br&amp;gt;Schleifen und Arrays&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Lineare_Funktionen/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Fibonacci | Fibonaccizahlen]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |4&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | Schleifen und Arrays&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Fibonacci/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Brainfuck | Brainfuck vs Turingmaschine]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |6&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | Arbeiten mit Arrays&amp;lt;br&amp;gt;Allgemeinwissen :-)&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Brainfuck/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Gau%C3%9F-Algorithmus | Gauß-Algorithmus]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |6&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | Arrays und Matrizen&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Gau%C3%9F-Algorithmus/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Zahlenumrechner | Zahlenumrechner]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |4&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | Arbeiten mit Methoden&amp;lt;br&amp;gt;mathematisches Denken&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Zahlenumrechner/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Democracy | Der Fehler im System]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | Fehler finden&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Democracy/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Quersumme | Spaß mit Quersummen]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5 - 7&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | Benutzung des Modulo-Operators&amp;lt;br&amp;gt;Auslagern von Funktionalität in Methoden&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Quersumme/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Appleman | Appleman und Fraktale]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |7&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | Schleifen, Umgang mit Fließkommazahlen&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Appleman/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/DiffusionLimitedAggregation | Diffusion Limited Aggregation]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |7&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | 2-dimensionale Arrays, Methoden, Schleifen, Grafische Ausgabe&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/DiffusionLimitedAggregation/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Palindrome | Palindrome]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |4. VL&lt;br /&gt;
 | Entwurf von Programmen&amp;lt;br&amp;gt;Parameterübergabe beim Programmaufruf&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Palindrome/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/DDDText | DDDText]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 4. VL&lt;br /&gt;
 | Ausgabe von Buchstaben als 3D Buchstaben&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/DDDText/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Hangman | Hangman]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |4. VL&lt;br /&gt;
 | Entwurf von Programmen&amp;lt;br&amp;gt;Arbeiten mit Methoden&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Hangman/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/SelectionSort | Selection Sort]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |4. VL&lt;br /&gt;
 | Verstehen von komplexeren Algorithmen&amp;lt;br&amp;gt;Schleifen und Arrays&amp;lt;br&amp;gt;(Hilfs-)Methoden&lt;br /&gt;
 | &lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/SelectionSort/Musterloesung | Musterlösung]]&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Cäsar-Chiffre | Chiffrierung/Dechiffrierung (Cäsar)]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |7&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |4. VL&lt;br /&gt;
 | Eigenständiges Problemlösen. &amp;lt;br&amp;gt; Alle Konzepte des Kurses&lt;br /&gt;
 | &lt;br /&gt;
 | &lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Abzaehlspiel | Abzählspiel]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |8&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |4. VL&lt;br /&gt;
 | Analyse von Aufgabenstellungen&amp;lt;br&amp;gt;Entwurf eines komplexen Programms von Grund auf&lt;br /&gt;
 | &lt;br /&gt;
 | &lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Rennschnecke | Schneckenrennen]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5. VL&lt;br /&gt;
 | Objektorientierte Programmierung&lt;br /&gt;
 | &lt;br /&gt;
 | &lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Studentendatenbank | Studentendatenbank]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |4&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5. VL&lt;br /&gt;
 | Vertiefung in objektorientiertes Programmieren&lt;br /&gt;
 | &lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Kassenbon++ | Erstellen eines Kassenbons mit Kapselung]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5. VL&lt;br /&gt;
 | Arbeiten mit Klassen&amp;lt;br&amp;gt;Kapselung&amp;lt;br&amp;gt;JavaAPI&lt;br /&gt;
 | &lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Multiarray| Mehrdimensionale Arrays]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5-9&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5. VL&lt;br /&gt;
 | Methoden, Schleifen, Arrays&amp;lt;br&amp;gt;Objektorientierung&lt;br /&gt;
 | &lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Canvas | Virtuelles Canvas mit 3D-Objekten]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |6. VL&lt;br /&gt;
 | Arbeiten mit Methoden&amp;lt;br&amp;gt;mathematisches Denken&lt;br /&gt;
 | &lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Doom | ASCII DOOM ]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |7-10&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |6. VL&lt;br /&gt;
 | Vertiefung in objektorientierte Programmierung&amp;lt;br&amp;gt;Benutzung der Java-API&lt;br /&gt;
 | &lt;br /&gt;
 | &lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/Textwordcount | Texte lesen und analysieren]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |7&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |6. VL&lt;br /&gt;
 | Eigenständiges Problemlösen &amp;lt;br&amp;gt; Goethe vs. Karl May&lt;br /&gt;
 | &lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/OOPStateCharts | StateCharts ]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |6. VL&lt;br /&gt;
 | Zustandsdiagramme (StateCharts) und OOP&lt;br /&gt;
 | &lt;br /&gt;
 | &lt;br /&gt;
&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Javakurs/Übungsaufgaben/AsciiCraft | ASCII Craft ]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5-10&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |1-6. VL&lt;br /&gt;
 | CodeLesen, Zusammenfassung, [http://www.minecraft.net minecraft] in 2D und ASCII&lt;br /&gt;
 | &lt;br /&gt;
 | &amp;lt;nicht anwendbar&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Schwierigkeitsgrade ==&lt;br /&gt;
&lt;br /&gt;
#  Reines Tutorial. Man muss nicht viel selbst denken&lt;br /&gt;
#  ...&lt;br /&gt;
#  Leichte Übungsaufgabe. Studies, die noch eher unsicher sind werden hier gut begleitet.&lt;br /&gt;
#  ...&lt;br /&gt;
#  Typische Aufgabe. Man muss den Kopf benutzen, bekommt an schwierigen Stellen aber Hilfestellungen.&lt;br /&gt;
#  ...&lt;br /&gt;
#  Herausfordernd, eher etwas für Studies die etwas fitter sind.&lt;br /&gt;
#  ...&lt;br /&gt;
#  Auch erfahrene Programmierer weden hier ein bis zwei Übungen beschäftigt sein&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#  Tja, die Idee war da. Wir finden sie auch gut, aber es könnte wirklich anstrengend werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kleine und große Probleme ==&lt;br /&gt;
&lt;br /&gt;
- Die Tubit-Accounts haben nicht /bin/bash als shell, so dass die &amp;lt;strong&amp;gt;Cursortasten&amp;lt;/strong&amp;gt; nicht funktionieren. Workaround: als erstes Kommando &#039;bash&#039; eingeben, man sieht dann auch in welchem Verzeichnis man gerade ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Javakurs_2011/Feedback|Feedback zum Kurs 2011]]&lt;br /&gt;
* [[Javakurs_2010/Feedback|Feedback zum Kurs 2010]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Java_Aufgaben]]&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/ckdu&amp;diff=14951</id>
		<title>C-Kurs/ckdu</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/ckdu&amp;diff=14951"/>
		<updated>2010-09-17T15:03:56Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: Alles besser :-)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Aufgabe ist eine besondere Aufgabe. Sie wird/wurde in der 7. Vorlesung live fast komplett implementiert. Da dies sehr viel ist und damit wichtige Fragen dort geklaert werden koennen, probiert diese Aufgabe zu Hause &#039;&#039;&#039;übers Wochenende&#039;&#039;&#039; doch schon mal &#039;&#039;&#039;selbst zu implementieren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Aufbau dieser Seite =&lt;br /&gt;
Es gibt mehrere Stufen. Das heißt wir haben diese große Aufgabe schon für euch in kleine Happen geteilt. Wenn ihr also &#039;&#039;wirklich&#039;&#039; nicht weiterkommt, könnt ihr euch in der Vorgabe (base1.c bis base 3.c) der nächst höheren Stufe angucken wie wir es gelöst haben. Aber bedenke: Jede Stufe wird ein bisschen anspruchsvoller!&lt;br /&gt;
&lt;br /&gt;
= Funktion =&lt;br /&gt;
ckdu soll wie das Tool &#039;&#039;du&#039;&#039; auch, eine Auflistung aller Dateien/Ordner und deren Größe. Zusätzlich soll ckdu diese Liste auch sortieren und menschlich Lesbar gestalten (in KB, MB, GB).&lt;br /&gt;
&lt;br /&gt;
= Stufen =&lt;br /&gt;
== 1. Stufe ==&lt;br /&gt;
Ordnerinhalt einlesen und ausgeben.&lt;br /&gt;
Ähnliche wie:  ls -1s&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    4 img&lt;br /&gt;
29832 HelloWorld.pdf&lt;br /&gt;
    0 HelloWorld.snm&lt;br /&gt;
   36 HelloWorld.tex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* [http://git.goodpoint.de/?p=ckdu-live.git;a=blob_plain;f=base1.c;hb=HEAD Download (base1.c)]&lt;br /&gt;
&lt;br /&gt;
== 2. Stufe ==&lt;br /&gt;
Refactoring !&lt;br /&gt;
Eingelesene Inhalte in einer Liste speichern.&lt;br /&gt;
Diese Liste wieder Ausgaben.&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* [http://git.goodpoint.de/?p=ckdu-live.git;a=blob_plain;f=base2.c;hb=HEAD Download (base2.c)]&lt;br /&gt;
&lt;br /&gt;
== 3. Stufe ==&lt;br /&gt;
&lt;br /&gt;
Ordnerinhalte rekursiv aufaddieren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  0.0M HelloWorld.snm&lt;br /&gt;
 30.0M HelloWorld.pdf&lt;br /&gt;
 36.0K HelloWorld.tex&lt;br /&gt;
153.0M img/&lt;br /&gt;
 12.0M   uebung.png&lt;br /&gt;
 24.0M   vortrag.png&lt;br /&gt;
 86.0M   world2.png&lt;br /&gt;
  3.0M   world.png&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* [http://git.goodpoint.de/?p=ckdu-live.git;a=blob_plain;f=base3.c;hb=HEAD Download (base3.c)]&lt;br /&gt;
&lt;br /&gt;
== 4. Stufe ==&lt;br /&gt;
sortieren nach Groesse (absteigend)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
153.0M img/&lt;br /&gt;
 12.0M   uebung.png&lt;br /&gt;
 24.0M   vortrag.png&lt;br /&gt;
 86.0M   world2.png&lt;br /&gt;
  3.0M   world.png&lt;br /&gt;
 30.0M HelloWorld.pdf&lt;br /&gt;
 36.0K HelloWorld.tex&lt;br /&gt;
  0.0M HelloWorld.snm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* &#039;&#039;Absichtlich keine Vorgabe. Bitte erweitert eure Lösung von Stufe 3.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 5. Stufe ==&lt;br /&gt;
In dieser Stufe folgen alle wichtigen Sachen, die man noch beachten &#039;&#039;&#039;muss&#039;&#039;&#039;, wenn man auf dem Dateisystem operiert.&lt;br /&gt;
Außerdem bieten wir einige Ideen mit denen du dein ckdu erweiteren kannst :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Symlinks nur einmal folgen (Parameter)&lt;br /&gt;
* Hardlinks nur einmal folgen&lt;br /&gt;
* Oredntliches Fehler-handling&lt;br /&gt;
* du-parameter-kompatible:&lt;br /&gt;
** &amp;quot;--max-depth&amp;quot;&lt;br /&gt;
** basierend auf getopt&lt;br /&gt;
** Device verlassen verbieten&lt;br /&gt;
* Wird nicht von den Betreuern betreut:&lt;br /&gt;
** Farbige Ausgabe&lt;br /&gt;
** Interaktivität&lt;br /&gt;
** Einlesen mit mehreren Threads?&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* &#039;&#039;Absichtlich keine Vorgabe. Bitte erweitert eure Lösung von Stufe 4.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/ckdu&amp;diff=14950</id>
		<title>C-Kurs/ckdu</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/ckdu&amp;diff=14950"/>
		<updated>2010-09-17T15:00:04Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* 3. Stufe */ Stufe 3 Output anpassen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Aufgabe ist eine besondere Aufgabe. Sie wird/wurde in der 7. Vorlesung live fast komplett implementiert. Da dies sehr viel ist und damit wichtige Fragen dort geklaert werden koennen, probiert diese Aufgabe zu Hause &#039;&#039;&#039;übers Wochenende&#039;&#039;&#039; doch schon mal &#039;&#039;&#039;selbst zu implementieren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Aufbau dieser Seite =&lt;br /&gt;
Es gibt mehrere Stufen. Das heißt wir haben diese große Aufgabe schon für euch in kleine Happen geteilt. Wenn ihr also &#039;&#039;wirklich&#039;&#039; nicht weiterkommt, könnt ihr euch in der Vorgabe (base1.c bis base 3.c) der nächst höheren Stufe angucken wie wir es gelöst haben. Aber bedenke: Jede Stufe wird ein bisschen anspruchsvoller!&lt;br /&gt;
&lt;br /&gt;
= Funktion =&lt;br /&gt;
ckdu soll wie das Tool &#039;&#039;du&#039;&#039; auch, eine Auflistung aller Dateien/Ordner und deren Größe. Zusätzlich soll ckdu diese Liste auch sortieren und menschlich Lesbar gestalten (in KB, MB, GB).&lt;br /&gt;
&lt;br /&gt;
= Stufen =&lt;br /&gt;
== 1. Stufe ==&lt;br /&gt;
Ordnerinhalt einlesen und ausgeben.&lt;br /&gt;
Ähnliche wie:  ls -1s&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    4 img&lt;br /&gt;
29832 HelloWorld.pdf&lt;br /&gt;
    0 HelloWorld.snm&lt;br /&gt;
   36 HelloWorld.tex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* [http://git.goodpoint.de/?p=ckdu-live.git;a=blob_plain;f=base1.c;hb=HEAD Download (base1.c)]&lt;br /&gt;
&lt;br /&gt;
== 2. Stufe ==&lt;br /&gt;
Refactoring !&lt;br /&gt;
Eingelesene Inhalte in einer Liste speichern.&lt;br /&gt;
Diese Liste wieder Ausgaben.&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* [http://git.goodpoint.de/?p=ckdu-live.git;a=blob_plain;f=base2.c;hb=HEAD Download (base2.c)]&lt;br /&gt;
&lt;br /&gt;
== 3. Stufe ==&lt;br /&gt;
&lt;br /&gt;
Ordnerinhalte rekursiv aufaddieren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
153.0M img/&lt;br /&gt;
 12.0M   uebung.png&lt;br /&gt;
 24.0M   vortrag.png&lt;br /&gt;
 86.0M   world2.png&lt;br /&gt;
  3.0M   world.png&lt;br /&gt;
 30.0M HelloWorld.pdf&lt;br /&gt;
  0.0M HelloWorld.snm&lt;br /&gt;
 36.0K HelloWorld.tex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* [http://git.goodpoint.de/?p=ckdu-live.git;a=blob_plain;f=base3.c;hb=HEAD Download (base3.c)]&lt;br /&gt;
&lt;br /&gt;
== 4. Stufe ==&lt;br /&gt;
sortieren nach Groesse (absteigend)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
153M img/&lt;br /&gt;
   86,1M img/world2.png&lt;br /&gt;
   24,9M img/vortrag.png&lt;br /&gt;
   12,9M img/uebung.png&lt;br /&gt;
    3,9M img/world.png&lt;br /&gt;
 30M HelloWorld.pdf&lt;br /&gt;
 36K HelloWorld.tex&lt;br /&gt;
   0 HelloWorld.snm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* &#039;&#039;Absichtlich keine Vorgabe. Bitte erweitert eure Lösung von Stufe 3.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 5. Stufe ==&lt;br /&gt;
In dieser Stufe folgen alle wichtigen Sachen, die man noch beachten &#039;&#039;&#039;muss&#039;&#039;&#039;, wenn man auf dem Dateisystem operiert.&lt;br /&gt;
Ausserdem bieten wir einige Ideen mit denen du dein ckdu erweiteren kannst :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Symlinks nur einmal Folgen (parameter)&lt;br /&gt;
* Hardlinks nur einmal Folgen&lt;br /&gt;
&lt;br /&gt;
* Fehler-handling&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* du-parameter-kompatible:&lt;br /&gt;
** &amp;quot;--max-depth&amp;quot;&lt;br /&gt;
** getopt&lt;br /&gt;
** device verlassen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Wird nicht von den Betreuern betreut:&lt;br /&gt;
** Farbige ausgabe&lt;br /&gt;
** interaktive&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* &#039;&#039;Absichtlich keine Vorgabe. Bitte erweitert eure Lösung von Stufe 4.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/ckdu&amp;diff=14949</id>
		<title>C-Kurs/ckdu</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/ckdu&amp;diff=14949"/>
		<updated>2010-09-17T14:58:12Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Aufgabe ist eine besondere Aufgabe. Sie wird/wurde in der 7. Vorlesung live fast komplett implementiert. Da dies sehr viel ist und damit wichtige Fragen dort geklaert werden koennen, probiert diese Aufgabe zu Hause &#039;&#039;&#039;übers Wochenende&#039;&#039;&#039; doch schon mal &#039;&#039;&#039;selbst zu implementieren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Aufbau dieser Seite =&lt;br /&gt;
Es gibt mehrere Stufen. Das heißt wir haben diese große Aufgabe schon für euch in kleine Happen geteilt. Wenn ihr also &#039;&#039;wirklich&#039;&#039; nicht weiterkommt, könnt ihr euch in der Vorgabe (base1.c bis base 3.c) der nächst höheren Stufe angucken wie wir es gelöst haben. Aber bedenke: Jede Stufe wird ein bisschen anspruchsvoller!&lt;br /&gt;
&lt;br /&gt;
= Funktion =&lt;br /&gt;
ckdu soll wie das Tool &#039;&#039;du&#039;&#039; auch, eine Auflistung aller Dateien/Ordner und deren Größe. Zusätzlich soll ckdu diese Liste auch sortieren und menschlich Lesbar gestalten (in KB, MB, GB).&lt;br /&gt;
&lt;br /&gt;
= Stufen =&lt;br /&gt;
== 1. Stufe ==&lt;br /&gt;
Ordnerinhalt einlesen und ausgeben.&lt;br /&gt;
Ähnliche wie:  ls -1s&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    4 img&lt;br /&gt;
29832 HelloWorld.pdf&lt;br /&gt;
    0 HelloWorld.snm&lt;br /&gt;
   36 HelloWorld.tex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* [http://git.goodpoint.de/?p=ckdu-live.git;a=blob_plain;f=base1.c;hb=HEAD Download (base1.c)]&lt;br /&gt;
&lt;br /&gt;
== 2. Stufe ==&lt;br /&gt;
Refactoring !&lt;br /&gt;
Eingelesene Inhalte in einer Liste speichern.&lt;br /&gt;
Diese Liste wieder Ausgaben.&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* [http://git.goodpoint.de/?p=ckdu-live.git;a=blob_plain;f=base2.c;hb=HEAD Download (base2.c)]&lt;br /&gt;
&lt;br /&gt;
== 3. Stufe ==&lt;br /&gt;
&lt;br /&gt;
Ordnerinhalte rekursiv aufaddieren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
153M img/&lt;br /&gt;
   12,9M img/uebung.png&lt;br /&gt;
   24,9M img/vortrag.png&lt;br /&gt;
   86,1M img/world2.png&lt;br /&gt;
    3,9M img/world.png&lt;br /&gt;
 30M HelloWorld.pdf&lt;br /&gt;
   0 HelloWorld.snm&lt;br /&gt;
 36K HelloWorld.tex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* [http://git.goodpoint.de/?p=ckdu-live.git;a=blob_plain;f=base3.c;hb=HEAD Download (base3.c)]&lt;br /&gt;
&lt;br /&gt;
== 4. Stufe ==&lt;br /&gt;
sortieren nach Groesse (absteigend)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
153M img/&lt;br /&gt;
   86,1M img/world2.png&lt;br /&gt;
   24,9M img/vortrag.png&lt;br /&gt;
   12,9M img/uebung.png&lt;br /&gt;
    3,9M img/world.png&lt;br /&gt;
 30M HelloWorld.pdf&lt;br /&gt;
 36K HelloWorld.tex&lt;br /&gt;
   0 HelloWorld.snm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* &#039;&#039;Absichtlich keine Vorgabe. Bitte erweitert eure Lösung von Stufe 3.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 5. Stufe ==&lt;br /&gt;
In dieser Stufe folgen alle wichtigen Sachen, die man noch beachten &#039;&#039;&#039;muss&#039;&#039;&#039;, wenn man auf dem Dateisystem operiert.&lt;br /&gt;
Ausserdem bieten wir einige Ideen mit denen du dein ckdu erweiteren kannst :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Symlinks nur einmal Folgen (parameter)&lt;br /&gt;
* Hardlinks nur einmal Folgen&lt;br /&gt;
&lt;br /&gt;
* Fehler-handling&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* du-parameter-kompatible:&lt;br /&gt;
** &amp;quot;--max-depth&amp;quot;&lt;br /&gt;
** getopt&lt;br /&gt;
** device verlassen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Wird nicht von den Betreuern betreut:&lt;br /&gt;
** Farbige ausgabe&lt;br /&gt;
** interaktive&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* &#039;&#039;Absichtlich keine Vorgabe. Bitte erweitert eure Lösung von Stufe 4.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/ckdu&amp;diff=14946</id>
		<title>C-Kurs/ckdu</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/ckdu&amp;diff=14946"/>
		<updated>2010-09-17T14:51:19Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: Fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Aufgabe ist eine besondere Aufgabe. Sie wird/wurde in der 7. Vorlesung live fast komplett implementiert. Da dies sehr viel ist und damit wichtige Fragen dort geklaert werden koennen, probiert diese Aufgabe zu Hause &#039;&#039;&#039;übers Wochenende&#039;&#039;&#039; doch schon mal &#039;&#039;&#039;selbst zu implementieren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Aufbau dieser Seite =&lt;br /&gt;
Es gibt mehrere Stufen. Das heißt wir haben diese große Aufgabe schon für euch in kleine Happen geteilt. Wenn ihr also &#039;&#039;wirklich&#039;&#039; nicht weiterkommt, könnt ihr euch in der Vorgabe (base1.c bis base 3.c) der nächst höheren Stufe angucken wie wir es gelöst haben. Aber bedenke: Jede Stufe wird ein bisschen anspruchsvoller!&lt;br /&gt;
&lt;br /&gt;
= Funktion =&lt;br /&gt;
ckdu soll wie das Tool &#039;&#039;du&#039;&#039; auch, eine Auflistung aller Dateien/Ordner und deren Groesse. Zusätzlich soll ckdu diese Liste auch sortieren und menschlich Lesbar gestalten (in KB, MB, GB).&lt;br /&gt;
&lt;br /&gt;
= Stufen =&lt;br /&gt;
== 1. Stufe ==&lt;br /&gt;
Ordnerinhalt einlesen und ausgeben.&lt;br /&gt;
Ähnliche wie:  ls -1s&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    4 img&lt;br /&gt;
29832 HelloWorld.pdf&lt;br /&gt;
    0 HelloWorld.snm&lt;br /&gt;
   36 HelloWorld.tex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* [http://git.goodpoint.de/?p=ckdu-live.git;a=blob_plain;f=base1.c;hb=HEAD Download (base1.c)]&lt;br /&gt;
&lt;br /&gt;
== 2. Stufe ==&lt;br /&gt;
Refactoring !&lt;br /&gt;
Eingelesene Inhalte in einer Liste speichern.&lt;br /&gt;
Diese Liste wieder Ausgaben.&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* [http://git.goodpoint.de/?p=ckdu-live.git;a=blob_plain;f=base2.c;hb=HEAD Download (base2.c)]&lt;br /&gt;
&lt;br /&gt;
== 3. Stufe ==&lt;br /&gt;
&lt;br /&gt;
Ordnerinhalte rekursiv aufaddieren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
153M img/&lt;br /&gt;
   12,9M img/uebung.png&lt;br /&gt;
   24,9M img/vortrag.png&lt;br /&gt;
   86,1M img/world2.png&lt;br /&gt;
    3,9M img/world.png&lt;br /&gt;
 30M HelloWorld.pdf&lt;br /&gt;
   0 HelloWorld.snm&lt;br /&gt;
 36K HelloWorld.tex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* [http://git.goodpoint.de/?p=ckdu-live.git;a=blob_plain;f=base3.c;hb=HEAD Download (base3.c)]&lt;br /&gt;
&lt;br /&gt;
== 4. Stufe ==&lt;br /&gt;
sortieren nach Groesse (absteigend)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
153M img/&lt;br /&gt;
   86,1M img/world2.png&lt;br /&gt;
   24,9M img/vortrag.png&lt;br /&gt;
   12,9M img/uebung.png&lt;br /&gt;
    3,9M img/world.png&lt;br /&gt;
 30M HelloWorld.pdf&lt;br /&gt;
 36K HelloWorld.tex&lt;br /&gt;
   0 HelloWorld.snm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* &#039;&#039;Absichtlich keine Vorgabe. Bitte erweitert eure Lösung von Stufe 3.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 5. Stufe ==&lt;br /&gt;
In dieser Stufe folgen alle wichtigen Sachen, die man noch beachten &#039;&#039;&#039;muss&#039;&#039;&#039;, wenn man auf dem Dateisystem operiert.&lt;br /&gt;
Ausserdem bieten wir einige Ideen mit denen du dein ckdu erweiteren kannst :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Symlinks nur einmal Folgen (parameter)&lt;br /&gt;
* Hardlinks nur einmal Folgen&lt;br /&gt;
&lt;br /&gt;
* Fehler-handling&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* du-parameter-kompatible:&lt;br /&gt;
** &amp;quot;--max-depth&amp;quot;&lt;br /&gt;
** getopt&lt;br /&gt;
** device verlassen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Wird nicht von den Betreuern betreut:&lt;br /&gt;
** Farbige ausgabe&lt;br /&gt;
** interaktive&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* &#039;&#039;Absichtlich keine Vorgabe. Bitte erweitert eure Lösung von Stufe 4.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/ckdu&amp;diff=14944</id>
		<title>C-Kurs/ckdu</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/ckdu&amp;diff=14944"/>
		<updated>2010-09-17T14:14:22Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: Vorgaben ausfüllen (Text und Links)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Aufgabe ist eine besondere Aufgabe. Sie wird(wurde) in der 7.Vorlesung fast komplett Implementiert. Da dies sehr viel ist - und damit wichtige Fragen dort geklaert werden koennen, probiert diese Aufgabe zu Hause uebers Wochenende doch schon mal selbst zu implementieren.&lt;br /&gt;
&lt;br /&gt;
= Aufbau dieser Seite =&lt;br /&gt;
Es gibt mehrere Stufen. D.h. wir haben diese grosse Aufgabe schon fuer euch in kleine Happen geteilt. Wenn ihr also _wirklich_ nicht weiterkommt, koennt ihr euch in der Vorgabe (base) der naechst hoeheren Stufe angucken wie wir es geloest haben. Aber bedenke: Jede Stufe wird anspruchsvoller!&lt;br /&gt;
&lt;br /&gt;
= Funktion =&lt;br /&gt;
ckdu soll wie das Tool &#039;&#039;du&#039;&#039; auch, eine Auflistung aller Dateien/Ordner und deren Groesse. Zusaetzlich soll ckdu diese Liste auch sortieren und menschlich Lesbar gestalten (in KB,MB,GB).&lt;br /&gt;
&lt;br /&gt;
= Stufen =&lt;br /&gt;
== 1. Stufe ==&lt;br /&gt;
Ordnerinhalt einlesen und ausgeben.&lt;br /&gt;
Aehnliche wie:  ls -1s&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    4 img&lt;br /&gt;
29832 HelloWorld.pdf&lt;br /&gt;
    0 HelloWorld.snm&lt;br /&gt;
   36 HelloWorld.tex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* [http://git.goodpoint.de/?p=ckdu-live.git;a=blob_plain;f=base1.c;hb=HEAD Download (base1.c)]&lt;br /&gt;
&lt;br /&gt;
== 2. Stufe ==&lt;br /&gt;
Refactoring !&lt;br /&gt;
Eingelesene Inhalte in einer Liste speichern.&lt;br /&gt;
Diese Liste wieder Ausgaben.&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* [http://git.goodpoint.de/?p=ckdu-live.git;a=blob_plain;f=base2.c;hb=HEAD Download (base2.c)]&lt;br /&gt;
&lt;br /&gt;
== 3. Stufe ==&lt;br /&gt;
&lt;br /&gt;
Ordnerinhalte rekursiv aufaddieren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
153M img/&lt;br /&gt;
   12,9M img/uebung.png&lt;br /&gt;
   24,9M img/vortrag.png&lt;br /&gt;
   86,1M img/world2.png&lt;br /&gt;
    3,9M img/world.png&lt;br /&gt;
 30M HelloWorld.pdf&lt;br /&gt;
   0 HelloWorld.snm&lt;br /&gt;
 36K HelloWorld.tex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* [http://git.goodpoint.de/?p=ckdu-live.git;a=blob_plain;f=base3.c;hb=HEAD Download (base3.c)]&lt;br /&gt;
&lt;br /&gt;
== 4. Stufe ==&lt;br /&gt;
sortieren nach Groesse (absteigend)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
153M img/&lt;br /&gt;
   86,1M img/world2.png&lt;br /&gt;
   24,9M img/vortrag.png&lt;br /&gt;
   12,9M img/uebung.png&lt;br /&gt;
    3,9M img/world.png&lt;br /&gt;
 30M HelloWorld.pdf&lt;br /&gt;
 36K HelloWorld.tex&lt;br /&gt;
   0 HelloWorld.snm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* &#039;&#039;Absichtlich keine Vorgabe. Bitte erweitert eure Lösung von Stufe 3.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 5. Stufe ==&lt;br /&gt;
In dieser Stufe folgen alle wichtigen Sachen, die man noch beachten &#039;&#039;&#039;muss&#039;&#039;&#039;, wenn man auf dem Dateisystem operiert.&lt;br /&gt;
Ausserdem bieten wir einige Ideen mit denen du dein ckdu erweiteren kannst :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Symlinks nur einmal Folgen (parameter)&lt;br /&gt;
* Hardlinks nur einmal Folgen&lt;br /&gt;
&lt;br /&gt;
* Fehler-handling&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* du-parameter-kompatible:&lt;br /&gt;
** &amp;quot;--max-depth&amp;quot;&lt;br /&gt;
** getopt&lt;br /&gt;
** device verlassen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Wird nicht von den Betreuern betreut:&lt;br /&gt;
** Farbige ausgabe&lt;br /&gt;
** interaktive&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* &#039;&#039;Absichtlich keine Vorgabe. Bitte erweitert eure Lösung von Stufe 4.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/ckdu&amp;diff=14943</id>
		<title>C-Kurs/ckdu</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/ckdu&amp;diff=14943"/>
		<updated>2010-09-17T14:09:48Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Vorgabe */ Link einfügen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Aufgabe ist eine besondere Aufgabe. Sie wird(wurde) in der 7.Vorlesung fast komplett Implementiert. Da dies sehr viel ist - und damit wichtige Fragen dort geklaert werden koennen, probiert diese Aufgabe zu Hause uebers Wochenende doch schon mal selbst zu implementieren.&lt;br /&gt;
&lt;br /&gt;
= Aufbau dieser Seite =&lt;br /&gt;
Es gibt mehrere Stufen. D.h. wir haben diese grosse Aufgabe schon fuer euch in kleine Happen geteilt. Wenn ihr also _wirklich_ nicht weiterkommt, koennt ihr euch in der Vorgabe (base) der naechst hoeheren Stufe angucken wie wir es geloest haben. Aber bedenke: Jede Stufe wird anspruchsvoller!&lt;br /&gt;
&lt;br /&gt;
= Funktion =&lt;br /&gt;
ckdu soll wie das Tool &#039;&#039;du&#039;&#039; auch, eine Auflistung aller Dateien/Ordner und deren Groesse. Zusaetzlich soll ckdu diese Liste auch sortieren und menschlich Lesbar gestalten (in KB,MB,GB).&lt;br /&gt;
&lt;br /&gt;
= Stufen =&lt;br /&gt;
== 1. Stufe ==&lt;br /&gt;
Ordnerinhalt einlesen und ausgeben.&lt;br /&gt;
Aehnliche wie:  ls -1s&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    4 img&lt;br /&gt;
29832 HelloWorld.pdf&lt;br /&gt;
    0 HelloWorld.snm&lt;br /&gt;
   36 HelloWorld.tex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* [http://git.goodpoint.de/?p=ckdu-live.git;a=blob_plain;f=base1.c;hb=HEAD Download (base1.c)]&lt;br /&gt;
&lt;br /&gt;
== 2. Stufe ==&lt;br /&gt;
Refactoring !&lt;br /&gt;
Eingelesene Inhalte in einer Liste speichern.&lt;br /&gt;
Diese Liste wieder Ausgaben.&lt;br /&gt;
&lt;br /&gt;
== 3. Stufe ==&lt;br /&gt;
&lt;br /&gt;
Ordnerinhalte rekursiv aufaddieren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
153M img/&lt;br /&gt;
   12,9M img/uebung.png&lt;br /&gt;
   24,9M img/vortrag.png&lt;br /&gt;
   86,1M img/world2.png&lt;br /&gt;
    3,9M img/world.png&lt;br /&gt;
 30M HelloWorld.pdf&lt;br /&gt;
   0 HelloWorld.snm&lt;br /&gt;
 36K HelloWorld.tex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. Stufe ==&lt;br /&gt;
sortieren nach Groesse (absteigend)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
153M img/&lt;br /&gt;
   86,1M img/world2.png&lt;br /&gt;
   24,9M img/vortrag.png&lt;br /&gt;
   12,9M img/uebung.png&lt;br /&gt;
    3,9M img/world.png&lt;br /&gt;
 30M HelloWorld.pdf&lt;br /&gt;
 36K HelloWorld.tex&lt;br /&gt;
   0 HelloWorld.snm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. Stufe ==&lt;br /&gt;
In dieser Stufe folgen alle wichtigen Sachen, die man noch beachten &#039;&#039;&#039;muss&#039;&#039;&#039;, wenn man auf dem Dateisystem operiert.&lt;br /&gt;
Ausserdem bieten wir einige Ideen mit denen du dein ckdu erweiteren kannst :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Symlinks nur einmal Folgen (parameter)&lt;br /&gt;
* Hardlinks nur einmal Folgen&lt;br /&gt;
&lt;br /&gt;
* Fehler-handling&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* du-parameter-kompatible:&lt;br /&gt;
** &amp;quot;--max-depth&amp;quot;&lt;br /&gt;
** getopt&lt;br /&gt;
** device verlassen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Wird nicht von den Betreuern betreut:&lt;br /&gt;
** Farbige ausgabe&lt;br /&gt;
** interaktive&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/ckdu&amp;diff=14940</id>
		<title>C-Kurs/ckdu</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/ckdu&amp;diff=14940"/>
		<updated>2010-09-17T14:06:10Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Aubau dieser Seite */ typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Aufgabe ist eine besondere Aufgabe. Sie wird(wurde) in der 7.Vorlesung fast komplett Implementiert. Da dies sehr viel ist - und damit wichtige Fragen dort geklaert werden koennen, probiert diese Aufgabe zu Hause uebers Wochenende doch schon mal selbst zu implementieren.&lt;br /&gt;
&lt;br /&gt;
= Aufbau dieser Seite =&lt;br /&gt;
Es gibt mehrere Stufen. D.h. wir haben diese grosse Aufgabe schon fuer euch in kleine Happen geteilt. Wenn ihr also _wirklich_ nicht weiterkommt, koennt ihr euch in der Vorgabe (base) der naechst hoeheren Stufe angucken wie wir es geloest haben. Aber bedenke: Jede Stufe wird anspruchsvoller!&lt;br /&gt;
&lt;br /&gt;
= Funktion =&lt;br /&gt;
ckdu soll wie das Tool &#039;&#039;du&#039;&#039; auch, eine Auflistung aller Dateien/Ordner und deren Groesse. Zusaetzlich soll ckdu diese Liste auch sortieren und menschlich Lesbar gestalten (in KB,MB,GB).&lt;br /&gt;
&lt;br /&gt;
= Stufen =&lt;br /&gt;
== 1. Stufe ==&lt;br /&gt;
Ordnerinhalt einlesen und ausgeben.&lt;br /&gt;
Aehnliche wie:  ls -1s&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    4 img&lt;br /&gt;
29832 HelloWorld.pdf&lt;br /&gt;
    0 HelloWorld.snm&lt;br /&gt;
   36 HelloWorld.tex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vorgabe ===&lt;br /&gt;
* &#039;&#039;hier Link zur Vorgabe einfuegen&#039;&#039;&lt;br /&gt;
== 2. Stufe ==&lt;br /&gt;
Refactoring !&lt;br /&gt;
Eingelesene Inhalte in einer Liste speichern.&lt;br /&gt;
Diese Liste wieder Ausgaben.&lt;br /&gt;
&lt;br /&gt;
== 3. Stufe ==&lt;br /&gt;
&lt;br /&gt;
Ordnerinhalte rekursiv aufaddieren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
153M img/&lt;br /&gt;
   12,9M img/uebung.png&lt;br /&gt;
   24,9M img/vortrag.png&lt;br /&gt;
   86,1M img/world2.png&lt;br /&gt;
    3,9M img/world.png&lt;br /&gt;
 30M HelloWorld.pdf&lt;br /&gt;
   0 HelloWorld.snm&lt;br /&gt;
 36K HelloWorld.tex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 4. Stufe ==&lt;br /&gt;
sortieren nach Groesse (absteigend)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;so koennte das dann aussehen:&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
153M img/&lt;br /&gt;
   86,1M img/world2.png&lt;br /&gt;
   24,9M img/vortrag.png&lt;br /&gt;
   12,9M img/uebung.png&lt;br /&gt;
    3,9M img/world.png&lt;br /&gt;
 30M HelloWorld.pdf&lt;br /&gt;
 36K HelloWorld.tex&lt;br /&gt;
   0 HelloWorld.snm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. Stufe ==&lt;br /&gt;
In dieser Stufe folgen alle wichtigen Sachen, die man noch beachten &#039;&#039;&#039;muss&#039;&#039;&#039;, wenn man auf dem Dateisystem operiert.&lt;br /&gt;
Ausserdem bieten wir einige Ideen mit denen du dein ckdu erweiteren kannst :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Symlinks nur einmal Folgen (parameter)&lt;br /&gt;
* Hardlinks nur einmal Folgen&lt;br /&gt;
&lt;br /&gt;
* Fehler-handling&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* du-parameter-kompatible:&lt;br /&gt;
** &amp;quot;--max-depth&amp;quot;&lt;br /&gt;
** getopt&lt;br /&gt;
** device verlassen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Wird nicht von den Betreuern betreut:&lt;br /&gt;
** Farbige ausgabe&lt;br /&gt;
** interaktive&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs_2009/forschleife/Musterl%C3%B6sung&amp;diff=12586</id>
		<title>C-Kurs 2009/forschleife/Musterlösung</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs_2009/forschleife/Musterl%C3%B6sung&amp;diff=12586"/>
		<updated>2009-09-24T09:22:09Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: Die Seite wurde neu angelegt: „Die Forschleife im Programm überschreitet beim Schreiben auf das Array a die Arraygrenze. Es wird damit die Speicherstelle nach dem Array überschrieben. Bei ein...“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Forschleife im Programm überschreitet beim Schreiben auf das Array a die Arraygrenze.&lt;br /&gt;
Es wird damit die Speicherstelle nach dem Array überschrieben.&lt;br /&gt;
Bei einigen Rechnerarchitekturen befindet sich dort die Zählervariable i,&lt;br /&gt;
die daraufhin wieder auf 0 gesetzt wird.&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/%C3%9Cbungsaufgaben&amp;diff=12581</id>
		<title>C-Kurs/Übungsaufgaben</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/%C3%9Cbungsaufgaben&amp;diff=12581"/>
		<updated>2009-09-24T09:00:05Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Die Aufgaben */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wir haben jeder Aufgabe eine Einschätzung ihrer Schwierigkeit auf einer Skala von 1 bis 10 vorangestellt. Bei dieser Einschätzung sind wir von einem Gehirn ausgegangen, für welches das jeweilige Themengebiet völlig neu ist, das jedoch schon ein ganz gutes Verständnis dafür hat wie eine Programmiersprache denn so funktioniert. &lt;br /&gt;
Entsprechend kann eine schwer bewertete Aufgabe aus einem frühen Themengebiet für manch einen sehr einfach oder eine leicht bewertete aus einem späten Themengebiet für einen anderen sehr schwer sein. Es ist nur ein Wert, der euch helfen soll eure nächste Aufgabe zu wählen. &lt;br /&gt;
&lt;br /&gt;
Falls ihr Anmerkungen zu den Aufgaben habt, könnt ihr die Diskussionsseiten der jeweiligen Aufgaben nutzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schwierigkeitsgrade ==&lt;br /&gt;
&lt;br /&gt;
#  Reines Tutorial. Man muss nicht viel selbst denken&lt;br /&gt;
#  ...&lt;br /&gt;
#  Leichte Übungsaufgabe. Studies, die noch eher unsicher sind werden hier gut begleitet.&lt;br /&gt;
#  ...&lt;br /&gt;
#  Typische Aufgabe. Man muss den Kopf benutzen, bekommt an schwierigen Stellen aber Hilfestellungen.&lt;br /&gt;
#  ...&lt;br /&gt;
#  Herausfordernd, eher etwas für Studies die etwas fitter sind.&lt;br /&gt;
#  ...&lt;br /&gt;
#  Auch erfahrene Programmierer werden hier ein bis zwei Übungen beschäftigt sein&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#  Tja, die Idee war da. Wir finden sie auch gut, aber es könnte wirklich anstrengend werden.&lt;br /&gt;
&lt;br /&gt;
== Die Aufgaben ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;2&amp;quot;&lt;br /&gt;
 |- bgcolor=&amp;quot;#D8D8D8&amp;quot;&lt;br /&gt;
 !Aufgabe&lt;br /&gt;
 !Schwierigkeit&lt;br /&gt;
 !Vorwissen&lt;br /&gt;
 !Lerneffekte&lt;br /&gt;
 !Bearbeiter&lt;br /&gt;
 !Korrektur gelesen&lt;br /&gt;
 !Musterlösung&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Von der Konsole zum HelloWorld | Von der Konsole zum HelloWorld]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |1&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |1. VL&lt;br /&gt;
 | Konsole benutzen, Hello World&lt;br /&gt;
 | Sebastian D.&lt;br /&gt;
 | [[Benutzer:Mario|Mario]]&lt;br /&gt;
 | &lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Fakultät | Fakultät]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |1. VL&lt;br /&gt;
 | Schleifen&lt;br /&gt;
 | Sebastian D.&lt;br /&gt;
 | Daniel&lt;br /&gt;
 |  &lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Base64 | Base64]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |6&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |1. VL&lt;br /&gt;
 | Operatoren&lt;br /&gt;
 | Sebastian D.&lt;br /&gt;
 | &lt;br /&gt;
 | [[Ckurs2009/Base64/Musterlösung | Base64]]&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/EingabeAusgabe | Ein- und Ausgabe]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |1&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2. VL&lt;br /&gt;
 | Einlesen von Benutzereingaben&amp;lt;br&amp;gt;Ausgabe derselben&lt;br /&gt;
 | [[Benutzer:Mario|Mario]]&lt;br /&gt;
 | nion&lt;br /&gt;
 | [[Ckurs2009/EingabeAusgabe/Musterlösung | Ein- und Ausgabe]]&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Taschenrechner | Taschenrechner]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2. VL&lt;br /&gt;
 | Eingabe+Ausgabe&amp;lt;br&amp;gt;Mathematische Operatoren&lt;br /&gt;
 | [[Benutzer:Mario|Mario]]&lt;br /&gt;
 | [[Benutzer:Tkroenert|TKroenert]]&lt;br /&gt;
 | [[Ckurs2009/Taschenrechner/Musterlösung | Taschenrechner]]&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/VerschachtelteSchleifen | Verschachtelte Schleifen]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2. VL&lt;br /&gt;
 | Umgang mit mehreren verschachtelten Schleifen&lt;br /&gt;
 | [[Benutzer:Dank|Daniel K.]]&lt;br /&gt;
 | AlexanderK&lt;br /&gt;
 |&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Glückspiel | Glücksspiel]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2. VL&lt;br /&gt;
 | Anwenden von Fallunterscheidungen und Einlesen von Werten aus der Konsole&lt;br /&gt;
 | [[Benutzer:Dank|Daniel K.]]&lt;br /&gt;
 | AlexanderK&lt;br /&gt;
 | [[Ckurs2009/Glückspiel/Musterlösung | Glückspiel]]&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Wochentag | Wochentagsrechnung]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2. VL&lt;br /&gt;
 | Einlesen von Benutzereingaben&amp;lt;br&amp;gt;Mathematikverständniss&lt;br /&gt;
 | [[Benutzer:Mario|Mario]]&lt;br /&gt;
 | nion (Musterlösung noch nicht vorhanden)&lt;br /&gt;
 | &lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Taschenrechner2.0 | Taschenrechner &#039;&#039;2.0&#039;&#039;]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |8&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2. VL&lt;br /&gt;
 | Knobeln&amp;lt;br&amp;gt;Komplexes Aufgaben lösen&lt;br /&gt;
 | [[Benutzer:Mario|Mario]]&lt;br /&gt;
 | Martin K.&lt;br /&gt;
 | [[Ckurs2009/Taschenrechner2.0/Musterlösung | Taschenrechner &#039;&#039;2.0&#039;&#039;]]&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Call by reference | Call by reference]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |4&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | Einfache Anwendung von &amp;amp;/*&lt;br /&gt;
 | sping&lt;br /&gt;
 | nion&lt;br /&gt;
 | [[Ckurs2009/Call by reference/Musterlösung | Call by reference]]&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Text processing | Text processing]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |4, 6&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | Strings&amp;lt;br&amp;gt;Pointer-Arithmetik&amp;lt;br&amp;gt;Pointer auf Pointer&amp;lt;br&amp;gt;Refactoring&lt;br /&gt;
 | sping&lt;br /&gt;
 | [[Benutzer:Mario|Mario]]&lt;br /&gt;
 | [[Ckurs2009/Text processing/Musterlösung | Text processing]]&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Palindrome | Palindrome]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |4&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | Pointer und Strings&lt;br /&gt;
 | [[Benutzer:Dank|Daniel K.]]&lt;br /&gt;
 |&lt;br /&gt;
 | &lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/(Pointer) Swapping | (Pointer) Swapping]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | Pointer und Arrays benutzen, generisches swap&lt;br /&gt;
 | Katrin&lt;br /&gt;
 |&lt;br /&gt;
 | &lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Matrizenmultiplikation | Matrizenmultiplikation]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |6&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3. VL&lt;br /&gt;
 | Mehrdimensionale Arrays&amp;lt;br&amp;gt;const correctness&lt;br /&gt;
 | sping&lt;br /&gt;
 | [[Benutzer:Mario|Mario]]&lt;br /&gt;
 | [[Ckurs2009/Matrizenmultiplikation/Musterlösung | Matrizenmultiplikation]]&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Arrayuebergabe | Arrayuebergabe]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |4/5&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 4. VL&lt;br /&gt;
 | Einlesen von Benutzereingaben&amp;lt;br&amp;gt;Pointer und Pointerarithmetik&lt;br /&gt;
 | nion&lt;br /&gt;
 | Martin K.&lt;br /&gt;
 | [[Ckurs2009/Arrayuebergabe/Musterlösung | Arrayuebergabe]]&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Studentendatenbank | Studentendatenbank]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |4&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 4. VL&lt;br /&gt;
 | struct, Pointer, Arrays&lt;br /&gt;
 | AlexanderK&lt;br /&gt;
 |&lt;br /&gt;
 | [[Ckurs2009/Studentendatenbank/Musterlösung | Studentendatenbank]]&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Sammelbestellung | Sammelbestellung]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |2-5&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |4. VL&lt;br /&gt;
 | Listen, Pointer, Speicherverwaltung&lt;br /&gt;
 | Florian S.&lt;br /&gt;
 | [[Benutzer:Mario|Mario]]&lt;br /&gt;
 |  [[Ckurs2009/Sammelbestellung/Musterlösung | Eine Lösung]] &lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Zahlen_sagen | Zahlen sagen]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |4. VL&lt;br /&gt;
 | Umgang mit Zeichenketten&lt;br /&gt;
 | Martin K.&lt;br /&gt;
 | &lt;br /&gt;
 | [[Ckurs2009/Zahlen_sagen/Musterlösung | Zahlen sagen]]&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Compiler, Präprozessor, Header Files | Compiler, Präprozessor, Header Files]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5. VL&lt;br /&gt;
 | Arbeiten mit mehreren Quellcode-Dateien, Kompilieren und Linken, Header-Dateien und #include, debugging-Makro verwenden&lt;br /&gt;
 | Katrin&lt;br /&gt;
 | &lt;br /&gt;
 | siehe Folien&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Bus Error | Bus Error]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |8&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5. VL&lt;br /&gt;
 | Pointer, wie entsteht ein bus error&lt;br /&gt;
 | Katrin&lt;br /&gt;
 | &lt;br /&gt;
 |&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/BubbleSortDebug | BubbleSort Debugging]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 6. VL&lt;br /&gt;
 | Debuggen eines Programmes mit gdb&lt;br /&gt;
 | aeichner&lt;br /&gt;
 |&lt;br /&gt;
 | vorhanden&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Debug | Debugging]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 1-8&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 6. VL&lt;br /&gt;
 | Debuggen einer Anwendung nach Wahl&lt;br /&gt;
 | aeichner&lt;br /&gt;
 |&lt;br /&gt;
 | gibt es nicht&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Code Layout | Code Layout]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |3&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |7. VL&lt;br /&gt;
 | Kleinere Codeschipsel mit kleinen Unsauberkeiten&lt;br /&gt;
 | Daniel&lt;br /&gt;
 | &lt;br /&gt;
 |&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Refactoring | Refactoring]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |5-9&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; |7. VL&lt;br /&gt;
 | Wie verbessere ich den Quellcode eines Programmes.&lt;br /&gt;
 | Daniel&lt;br /&gt;
 | &lt;br /&gt;
 | vorhanden&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Cat | Cat]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 6&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | ....&lt;br /&gt;
 | Arbeiten mit Dateien&amp;lt;br&amp;gt;Kommandozeilenparameter&lt;br /&gt;
 | nion&lt;br /&gt;
 | sping&lt;br /&gt;
 | vorhanden&lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Pong | Pong]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 7&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | ...&lt;br /&gt;
 | allgemeiner Programmablauf, fortgeschrittene Konsolenausgaben/eingaben&lt;br /&gt;
 | AlexanderK&lt;br /&gt;
 |&lt;br /&gt;
 | vorhanden &lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/Buchhaltung | Buchhaltung]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 6&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | ....&lt;br /&gt;
 | Lesen aus Dateien&lt;br /&gt;
 | reiner&lt;br /&gt;
 | &lt;br /&gt;
 | &lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Ckurs2009/StringArraySortieren | StringArraySortieren]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 7&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | ...&lt;br /&gt;
 | Konsolparameter, Funktionspointer, stdlib&lt;br /&gt;
 | reiner&lt;br /&gt;
 |&lt;br /&gt;
 | vorhanden&lt;br /&gt;
 |- bgcolor=&amp;quot;#E8E8E8&amp;quot;&lt;br /&gt;
 | [[Ckurs/integral | integral]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | ....&lt;br /&gt;
 | Funktionspointer&lt;br /&gt;
 | reiner&lt;br /&gt;
 | &lt;br /&gt;
 | vorhanden &lt;br /&gt;
 |- bgcolor=&amp;quot;#F5F5F5&amp;quot;&lt;br /&gt;
 | [[Ckurs/forschleife | forschleife]]&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | ...&lt;br /&gt;
 | Bug&lt;br /&gt;
 | reiner&lt;br /&gt;
 | nion&lt;br /&gt;
 | vorhanden&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Kleine und große Probleme ==&lt;br /&gt;
&lt;br /&gt;
* Die Tubit-Accounts haben nicht /bin/bash als shell, so dass die &amp;lt;strong&amp;gt;Cursortasten&amp;lt;/strong&amp;gt; nicht funktionieren. Workaround: als erstes Kommando &#039;bash&#039; eingeben, man sieht dann auch in welchem Verzeichnis man gerade ist.&lt;br /&gt;
* wenn man nur den Promt &#039;bash-0.12&#039; oder so erhält, also ohne das Verzeichnis in dem man ist, folgendes Kommando eingeben: &amp;lt;tt&amp;gt;export PS1=&#039;\u@\h:\w$ &#039;&amp;lt;/tt&amp;gt; oder zum dauerhaften Speichern: &amp;lt;tt&amp;gt; echo &amp;quot;export PS1=&#039;\u@\h:\w$ &#039;&amp;quot; &amp;gt;&amp;gt; ~/.bashrc &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Musterlösungen ==&lt;br /&gt;
Die Lösungen zu den Aufgaben werden nach den jeweiligen Übungen hier veröffentlicht. Falls dies nicht geschieht, bitte den zuständigen Tutor fragen.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[Ckurs2009/Feedback|Feedback zum Kurs 2009]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:CKurs]]&lt;br /&gt;
[[Kategorie:CKurs Aufgaben]]&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/StringArraySortieren/Musterl%C3%B6sung&amp;diff=12579</id>
		<title>C-Kurs/StringArraySortieren/Musterlösung</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/StringArraySortieren/Musterl%C3%B6sung&amp;diff=12579"/>
		<updated>2009-09-24T08:56:59Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: Die Seite wurde neu angelegt: „ #include &amp;lt;string.h&amp;gt;  #include &amp;lt;stdlib.h&amp;gt;  #include &amp;lt;stdio.h&amp;gt;    int cmp_lex(void *a, void *b)  { return strcmp(*(char **)a,*(char **)b);}    int cmp_std(void *a,...“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int cmp_lex(void *a, void *b)&lt;br /&gt;
 { return strcmp(*(char **)a,*(char **)b);}&lt;br /&gt;
 &lt;br /&gt;
 int cmp_std(void *a, void *b)&lt;br /&gt;
 {int len_diff=strlen(*(char **)a)-strlen(*(char **)b);&lt;br /&gt;
   if(len_diff) return len_diff;&lt;br /&gt;
   else&lt;br /&gt;
    return strcmp(*(char **)a,*(char **)b);}&lt;br /&gt;
 &lt;br /&gt;
 int main(int argc,char **argv)&lt;br /&gt;
 { int i;&lt;br /&gt;
 &lt;br /&gt;
   if(argc &amp;lt; 2) {&lt;br /&gt;
     printf(&amp;quot;Program sortiert Argumente der Komandozeile\n&amp;quot;);&lt;br /&gt;
     printf(&amp;quot;Usage: %s arg1 arg2 ...\n&amp;quot;,argv[0]);&lt;br /&gt;
     return 0;}&lt;br /&gt;
 &lt;br /&gt;
   qsort(argv+1,argc-1,sizeof(char *),&amp;amp;cmp_lex);&lt;br /&gt;
   &lt;br /&gt;
   printf(&amp;quot;Argumente sortiert nach lex. Ordnung\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
  for(i=1;i&amp;lt;argc;i++) printf(&amp;quot;%s\n&amp;quot;,argv[i]);&lt;br /&gt;
   printf(&amp;quot;Argumente sortiert nach Standart- Ordnung\n&amp;quot;);&lt;br /&gt;
  qsort(argv+1,argc-1,sizeof(char *),&amp;amp;cmp_std);&lt;br /&gt;
  for(i=1;i&amp;lt;argc;i++) printf(&amp;quot;%s\n&amp;quot;,argv[i]);&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/integral/Musterl%C3%B6sung&amp;diff=12577</id>
		<title>C-Kurs/integral/Musterlösung</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/integral/Musterl%C3%B6sung&amp;diff=12577"/>
		<updated>2009-09-24T08:48:30Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: Die Seite wurde neu angelegt: „ #include &amp;lt;stdio.h&amp;gt;  #include &amp;lt;math.h&amp;gt;    double hoch2(double x){return x*x;}  double integral(double (*fp)(double),double a,double b,double h)  {    double erg=0...“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;math.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 double hoch2(double x){return x*x;}&lt;br /&gt;
 double integral(double (*fp)(double),double a,double b,double h)&lt;br /&gt;
 {&lt;br /&gt;
   double erg=0.0;&lt;br /&gt;
   for(;a&amp;lt;b;a+=h) erg+=(*fp)(a); &lt;br /&gt;
   return erg*h;&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 int main(){&lt;br /&gt;
 &lt;br /&gt;
   printf(&amp;quot;%lf \n&amp;quot;,integral(&amp;amp;hoch2,0.0,3.0,0.005));&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Eclipsekurs_2008/Tag_2&amp;diff=11383</id>
		<title>Eclipsekurs 2008/Tag 2</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Eclipsekurs_2008/Tag_2&amp;diff=11383"/>
		<updated>2008-11-15T13:08:12Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Subversion Repository */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Aufgabe: Grundlagen ==&lt;br /&gt;
* Falls du noch etwas Übung in Java brauchst, dann besuche den [[Javakurs2008/Übungspool | Übungspool des Javakurses 2008]] und mache einfach von dort noch einige Aufgaben.&lt;br /&gt;
* Die folgenden Aufgaben beschäftigen sich weniger mit der Programmierung von Java. Viel mehr stehen die Features von Eclipse im Vordergrund.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Aufgabe: Importieren und Exportieren ==&lt;br /&gt;
* Lade dir Marios [http://docs.freitagsrunde.org/Veranstaltungen/eclipsekurs_2008/tutorial/Visualizer.jar Framework für Formen] herunter&lt;br /&gt;
* Informiere dich über den Allgemeinen [[Eclipsekurs_2008/Tag2/VisualizerFramework | Aufbau des Frameworks]]&lt;br /&gt;
* Erstelle ein neues Projekt&lt;br /&gt;
* Lade das JAR in das Projekt (BuildPath -&amp;gt; Add Jars)&lt;br /&gt;
* Schreibe eine &#039;&#039;&#039;main&#039;&#039;&#039; Methode, die den Visualizer erstellt (&#039;&#039;&#039;addVisualElement()&#039;&#039;&#039;) und anzeigt (&#039;&#039;&#039;visualize()&#039;&#039;&#039;)&lt;br /&gt;
* Wie wäre es, wenn du nach dem [[WhishfullThinking | WhishfullThinking-Prinzip]] versuchst weitere VisualElements zu schreiben? Beispielsweise ein Rechteck oder ein Dreieck? Oder gar eine bunte Form?&lt;br /&gt;
** Gibt es eine Möglichkeit, diese mit anderen Studierenden auszutauschen?&lt;br /&gt;
** Wenn ja, dann tue dies doch einfach ...&lt;br /&gt;
&lt;br /&gt;
== Subversion Repository ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Folgende Aufgabe kann leider nur von Benutzern mit einem CS-Account bearbeitet werden! &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Wir haben für dich und die anderen Teilnehmer ein Subversion-Repository im CS-Netz angelegt, das ihr für die folgenden Aufgaben nutzen könnt. &lt;br /&gt;
&lt;br /&gt;
* Check dir ein eigenes Verzeichnis davon aus und füge deine Lösungen hinzu.&lt;br /&gt;
* Stell sicher, dass dein eclipse mit dem [http://subclipse.tigris.org/ Subclipse-Plugin] versehen ist. Wenn du eclipse im cs-Netz nutzt, fügst du einfach die &amp;quot;Repository Location&amp;quot; wie auf dem Beipackzettel beschrieben hinzu. Falls nicht, füge es über &amp;quot;Help-&amp;gt;Software Updates&amp;quot; hinzu.&lt;br /&gt;
* Erstelle ein neues Java-SVN-Projekt. (RMB auf PackageExplorer -&amp;gt; new Project -&amp;gt; SVN)&lt;br /&gt;
 svn+ssh://cs.tu-berlin.de/home/theclaw/eclipse2008/svn/[NUMMER]&lt;br /&gt;
* Gebe als Repository Location den obigen Text ein&lt;br /&gt;
* Lass dir von einem Tutor eine Nummer zwischen 0 und 9 geben&lt;br /&gt;
* Trage diese als [NUMMER] ein.&lt;br /&gt;
* gebe deinen CS Benutzernamen und dein CS Passwort ein&lt;br /&gt;
* klicke danach auf &#039;&#039;&#039;Next&#039;&#039;&#039; - noch nicht auf &#039;&#039;&#039;Finish&#039;&#039;&#039;:&lt;br /&gt;
* Folge den weiteren Schritten des Dialoges, und bearbeite die Aufgabe, die im SVN als README.txt gestellt wurde&lt;br /&gt;
* Schau dir auch die CommitKommentare (LogMessages) an, evtl.findest du weitere Aufgaben ....&lt;br /&gt;
&lt;br /&gt;
==Aufgabe: Refactoring ==&lt;br /&gt;
&lt;br /&gt;
Herzlichen Glückwunsch, du wurdest bei der &amp;quot;Luft- und Bodenverkehr AG&amp;quot; eingestellt! Deine erste Aufgabe als neuer Entwickler der firmeneigenen Software ist es, diese in einen wartbaren und besser verständlichen Zustand zu bringen. Dein Vorgänger, ein Java-Crack, der auf den Programmier-Editor HackPad schwört, musste aufgrund geringer Produktivität leider von dieser Aufgabe abgezogen werden. Nun darfst du dich mit Eclipse daran versuchen!&lt;br /&gt;
&lt;br /&gt;
* Importiere die folgende Zip-Datei in ein leeres Projekt [http://docs.freitagsrunde.org/Veranstaltungen/eclipsekurs_2007/Verkehr.zip Verkehr.zip].&lt;br /&gt;
* Zu deinem Schrecken findest du ein Chaos vor. Bringe zuerst die Klassen in eine sinnvolle Ordnung, indem du sie per Drag-and-Drop in die richtigen Java-Packages einordnest.&lt;br /&gt;
* Dir wird aufgefallen sein, dass einige Klassen sehr seltsame und/oder falsch geschriebene Namen haben. Gib diesen Klassen bessere Namen. Benutze dafür die Refactoring-Funktion &#039;&#039;Rename&#039;&#039;.&lt;br /&gt;
* Beim Durchsehen der Klassen ist dir bestimmt folgendes aufgefallen:&lt;br /&gt;
** Die Klassen mit den (ehemaligen) Namen &#039;&#039;Farrad&#039;&#039; und &#039;&#039;MeinAuto&#039;&#039; enthalten beide Code, der die Anzahl der Räder zurückgibt. Benutze die Refactoring-Funktion &#039;&#039;Pull Up&#039;&#039;, so dass in einem Schritt der identische Code von &#039;&#039;anzahl()&#039;&#039; aus beiden Klassen entfernt und in die gemeinsame Superklasse verschoben wird. Führt Eclipse diese Aktion aus, ohne sich zu beschweren? Falls nicht, nicht nutze das von Eclipse erzeugte Preview um das Problem zu erkennen. Dann gehe zurück im Refactoring-Dialog und versuche das Problem zu beseitigen.&lt;br /&gt;
*** &#039;&#039;Tipp:&#039;&#039; Es hat mit dem Attribut &amp;quot;anzahlRaeder&amp;quot; zu tun!&lt;br /&gt;
** Alle Klassen, die ein Verkehrsmittel modellieren (Auto, Fahrrad, Flugzeug, ...), haben Funktionen um die Farbe zurückzuliefern. Verschiebe diese zusammen mit dem Attribut &amp;quot;farbe&amp;quot; in die gemeinsame Superklasse.&lt;br /&gt;
** In der (ehemaligen) Klasse &#039;&#039;MeinAuto&#039;&#039; kommt Code mehrfach vor. Benutze die Refactoring-Funktion &#039;&#039;Extract Method&#039;&#039; um dieses Problem zu beseitigen.&lt;br /&gt;
** Während du den soeben extrahierten Code durchliest, fällt dir auf, dass er viel verständlicher wäre, wenn die Variablen sprechende Namen hätten. Nutze erneut die Refactoring-Funktion &#039;&#039;Rename&#039;&#039; um dies zu erreichen.&lt;br /&gt;
&lt;br /&gt;
==Aufgabe: Standardnormalverteilung (einfach)==&lt;br /&gt;
* Lade die Datei [http://docs.freitagsrunde.org/Veranstaltungen/eclipsekurs_2006/StandardNormalVerteilung.java StandardNormalVerteilung.java] herunter und importiere sie in das Projekt &amp;quot;Einstein&amp;quot;.&lt;br /&gt;
* Setze einen Breakpoint in der main-Methode (siehe TODO) und starte das Programm im Debug-Modus.&lt;br /&gt;
* Benutze die &#039;&#039;&#039;Step into/Step over/Run to return/Resume&#039;&#039;&#039; Buttons im Debugger, um Folgendes herauszufinden:&lt;br /&gt;
** Im ersten Aufruf von &#039;&#039;normalVerteilung()&#039;&#039;:&lt;br /&gt;
*** Welcher Wert wird &#039;&#039;xi&#039;&#039;  im 2. Durchlauf der 1. Schleife zugewiesen?&lt;br /&gt;
*** Welcher Wert wird &#039;&#039;summe&#039;&#039; im 2. Durchlauf der 2. Schleife zugewiesen? &lt;br /&gt;
*** &#039;&#039;Tipp:&#039;&#039; Um letzteres herauszufinden kannst du &#039;&#039;zur Laufzeit des Programms&#039;&#039; noch einen Breakpoint einfügen!&lt;br /&gt;
** Im zweiten Aufruf von &#039;&#039;normalVerteilung()&#039;&#039;:&lt;br /&gt;
*** Welchen Wert hat &#039;&#039;summe&#039;&#039; am Ende des Methodenaufrufs? Ermittle dies &#039;&#039;&#039;innerhalb&#039;&#039;&#039; des Aufrufs von &#039;&#039;normalVerteilung()&#039;&#039;!&lt;br /&gt;
*** &#039;&#039;Tipp:&#039;&#039; Auch hier kannst du zur Laufzeit wieder Breakpoints einfügen und entfernen!&lt;br /&gt;
** Lass das Programm bis zum Ende laufen (es erscheint eine Ausgabe auf der Konsole).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Aufgabe: Micki Maus im Labyrinth (etwas schwerer)==&lt;br /&gt;
&lt;br /&gt;
* Bei dieser Aufgabe geht es auch darum, den Eclipse Debugger ein wenig kennenzulernen.&lt;br /&gt;
* Lade dir die Aufgabe unter [http://docs.freitagsrunde.org/eclipsekurs2008/MickiMaus.jar MickiMaus.jar] herunter und importiere diese wie in Aufgabe 1.&lt;br /&gt;
&lt;br /&gt;
Micki die Maus, befindet sich in einem Labyrinth und muss den Käse finden. Du sollst nun &lt;br /&gt;
ihren Weg mit Hilfe des Debuggers verfolgen. Setze dazu einen Breakpoint auf den Methodenaufruf von &#039;&#039;&#039;Mouse.dfs()&#039;&#039;&#039;,&lt;br /&gt;
also in Zeile 30 und in Zeile 40 am &#039;&#039;&#039;return&#039;&#039;&#039;. Starte den Debugger, indem du auf das Käfer-Symbol&lt;br /&gt;
klickst. Um zu sehen, welchen Weg Micki wählt, schau dir in der &#039;&#039;&#039;Variables View&#039;&#039;&#039; die Variable &#039;&#039;&#039;this.currentNode an&#039;&#039;&#039;. Micki sollte auf den Koordinaten (1,1) stehen. Nun könnt ihr mit der Funktion &#039;&#039;&#039;Resume&#039;&#039;&#039; einen Schritt weitergehen. (Es ist normal, dass sich Micki beim ersten Schritt nicht bewegt :-). Probiert auch mal die anderen Debugger-Funktionen &#039;&#039;&#039;Step into&#039;&#039;&#039;, &#039;&#039;&#039;Step over&#039;&#039;&#039; und &#039;&#039;&#039;Step return&#039;&#039;&#039; aus. Am Ende sollte Micki den Käse gefunden haben.&lt;br /&gt;
&lt;br /&gt;
Das Labyrinth sieht folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
    01234567 &lt;br /&gt;
  0 ########&lt;br /&gt;
  1 #M#   ##&lt;br /&gt;
  2 # #K#  #&lt;br /&gt;
  3 # #### #&lt;br /&gt;
  4 # #### #&lt;br /&gt;
  5 #   X  #&lt;br /&gt;
  6 #### ###&lt;br /&gt;
  7 ########&lt;br /&gt;
&lt;br /&gt;
Die Stelle &#039;&#039;&#039;X&#039;&#039;&#039; ist beipielsweise mit den Koordinaten (4,5) beschrieben. Micki befindet sich anfangs bei (1,1) also &#039;&#039;&#039;M&#039;&#039;&#039; und der Käse ist mit einem &#039;&#039;&#039;K&#039;&#039;&#039; markiert also (3,2). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wer macht was ===&lt;br /&gt;
Zur Erinnerung: Der Debugger bietet dir mehrere Möglichkeiten, dein Programm fortzusetzen:&lt;br /&gt;
* Terminate: Beendet das Programm sofort&lt;br /&gt;
* Step Into: Überspringt die Methode nicht (F5)&lt;br /&gt;
* Step Over: Überspringt die Beobachtung einer Methode (F6)&lt;br /&gt;
* Step Return: Führt die Methode bis zum Ende aus (F7)&lt;br /&gt;
* Resume: Setzt das Programm bis zum nächsten Haltepunkt fort (F8)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Zusatzaufgaben =&lt;br /&gt;
&lt;br /&gt;
== Refactoring II ==&lt;br /&gt;
Verwende für diese Aufgabe das Projekt &#039;&#039;&#039;Verkehr&#039;&#039;&#039; von der ersten Refactoring Aufgabe. Im Folgenden sind ein paar Vorschläge von Refactoring Aktionen, die du noch durchführen kannst:&lt;br /&gt;
* In der (ehemaligen) Klasse &#039;&#039;MyHupschrauber&#039;&#039;:&lt;br /&gt;
** Benenne die Instanzvariable &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;, &#039;&#039;z&#039;&#039; und &#039;&#039;blabla&#039;&#039; um, so dass sie aussagekräftige Namen haben. Ihre Bedeutung erfährst du aus den JavaDoc-Kommentaren&lt;br /&gt;
** Kapsle die (ehemaligen) Instanzariablen &#039;&#039;x&#039;&#039;, &#039;&#039;y&#039;&#039;, &#039;&#039;z&#039;&#039; und &#039;&#039;blabla&#039;&#039; (immer nur eine auf einmal). Was bewirkt dies? Dazu schaue dir in der Vorschau den Unterschied an. Warum könnte das sinnvoll sein?&lt;br /&gt;
** Wende die Refactoring-Funktion &#039;&#039;Extract Interface&#039;&#039; auf &#039;&#039;MyHupschrauber&#039;&#039; an. Was bewirkt sie und was bewirken die einzelnen Einstellungen?&lt;br /&gt;
* In der (ehemaligen) Klasse &#039;&#039;MyFlugzeug&#039;&#039;: Lies dir kurz den Code der Klasse durch (man beachte die Warnungen). Benutze die Refactoring-Funktion &#039;&#039;Infer Generic Type Arguments&#039;&#039; und schau was passiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Debugging II ==&lt;br /&gt;
* Lade dir die Datei [http://docs.freitagsrunde.org/Veranstaltungen/eclipsekurs_2006/Calc.java Calc.java] runter. Erstelle ein Java-Projekt &#039;&#039;Einstein&#039;&#039; und importiere die Datei in das Projekt und führe es aus.&lt;br /&gt;
* Im Quellcode wurden zwei Stellen markiert, an denen du den aktuellen Wert einer Variable auslesen sollst. Dies lässt sich sehr einfach mit Hilfe von Breakpoints lösen.&lt;br /&gt;
       &lt;br /&gt;
* Setze eine Watch Expression auf die Variable &#039;&#039;b&#039;&#039; und beobachte wie sie sich im Laufe des Programms verändert.&lt;br /&gt;
    &lt;br /&gt;
* Exportiere das Programm als JAR-Datei. Damit die Datei später über die Konsole ausgeführt werden kann, gehst du wie folgt vor:&lt;br /&gt;
** Der komplette Projektordner muss exportiert werden&lt;br /&gt;
** Wähle einen Namen für die Datei und einen Ordner als Exportziel.&lt;br /&gt;
** Klicke zweimal auf &#039;&#039;&#039;Next&#039;&#039;&#039; und wähle die Hauptklasse des Projekts aus.&lt;br /&gt;
** Um zu testen, ob du Alles richtig gemacht hast, öffne eine Konsole, wechsle in den Ordner, in dem die JAR-Datei liegt und führe den Befehl &#039;&#039;java -jar filename.jar&#039;&#039; aus. (filename.jar ist der Name der JAR ...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Aufgabe: Eclipse Plug-Ins==&lt;br /&gt;
&lt;br /&gt;
* Informiere dich über die Massen an PlugIns, die es für eclipse gibt über [http://www.eclipseplugincentral.com/ Eclipse Plugin Central].&lt;br /&gt;
* Findest du ein Plugin, mit dem du Sokoban in Eclipse Spielen kannst?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eigenes Subversion-Repository im Fakultätsnetz ==&lt;br /&gt;
&lt;br /&gt;
Richte in deinem eigenen Verzeichnis im CS-Netz ein SVN-Repository ein und lade deine Gruppenmitglieder aus MPGI3 oder MPGI4 in eine eigene Gruppe ein. Setze für diese Gruppe die entsprechenden Rechte im Respository. Checke dieses Verzeichnis mit Subclipse aus und lade eure fertigen und angefangenen Hausaufgaben darin hoch.&lt;br /&gt;
&lt;br /&gt;
Hinweise zur Einrichtung findet ihr im Artikel [[Subversion im CS-Netz]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Eclipsekurs 2008|Zurück zu Eclipsekurs 2008]]&lt;br /&gt;
&lt;br /&gt;
PS: Wenn du Fehler in den Aufgaben findest, benutze den &amp;quot;Bearbeiten&amp;quot;-Link oben auf der Seite. Oder spreche einfach mit einem der Tutoren ...&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Informatik-Rechnerbetrieb&amp;diff=820</id>
		<title>Informatik-Rechnerbetrieb</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Informatik-Rechnerbetrieb&amp;diff=820"/>
		<updated>2008-04-22T12:01:16Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: Rechtschreibfehlerchen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Informatik-Rechnerbetrieb (IRB) hält das [[UNIX]]- und PC-Rechnernetz am laufen. Im IRB-Sekretariat [[FR]] 5091 erhaltet Ihr Euren [[UNIX-Account]], der für das weitere Studium sehr wichtig ist.&lt;br /&gt;
&lt;br /&gt;
== Häufig gestellte Fragen ==&lt;br /&gt;
&lt;br /&gt;
* Wie komme ich von Zuhause auf die IRB-Server/in das IRB-Netz?&lt;br /&gt;
** Mittels [[SSH]].&lt;br /&gt;
** Mit dem [[IRB VPN]].&lt;br /&gt;
* Wie kann ich meinen IRB-Email-Account von zu Hause aus benutzen?&lt;br /&gt;
** Siehe [[Email]].&lt;br /&gt;
* Wo ist finde ich meinen USB-Stick nach dem einstoepseln?&lt;br /&gt;
** USB Geraete erscheinen in dem Verzeichnis /tmp/SUNWut/mnt/$USER/ und koennen mit dem utdiskadm Befehl verwaltet werden.&lt;br /&gt;
* Wie kann ich KDE Programme (z.B. Kate) aus der Shell starten?&lt;br /&gt;
** Dazu muss der Shell verraten werden, wo KDE zu finden ist:&lt;br /&gt;
 echo &amp;quot;kde::sol10::/opt/csw/kde-gcc/bin:/opt/csw/kde-gcc/man:: KDE&amp;quot; &amp;gt;&amp;gt; ~/.applications&lt;br /&gt;
 echo kde &amp;gt;&amp;gt; ~/.applrc&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
[http://irb.cs.tu-berlin.de/ Offizielle Website des IRB]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: Fakultäts-ABC]]&lt;br /&gt;
[[Kategorie: Überleben im Fakultätsnetz]]&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Informatik-Rechnerbetrieb&amp;diff=819</id>
		<title>Informatik-Rechnerbetrieb</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Informatik-Rechnerbetrieb&amp;diff=819"/>
		<updated>2008-04-22T11:44:21Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: Hinweis zum Starten von KDE Programmen aus der Shell&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Informatik-Rechnerbetrieb (IRB) hält das [[UNIX]]- und PC-Rechnernetz am laufen. Im IRB-Sekretariat [[FR]] 5091 erhaltet Ihr Euren [[UNIX-Account]], der für das weitere Studium sehr wichtig ist.&lt;br /&gt;
&lt;br /&gt;
== Häufig gestellte Fragen ==&lt;br /&gt;
&lt;br /&gt;
* Wie komme ich von Zuhause auf die IRB-Server/in das IRB-Netz?&lt;br /&gt;
** Mittels [[SSH]].&lt;br /&gt;
** Mit dem [[IRB VPN]].&lt;br /&gt;
* Wie kann ich meinen IRB-Email-Account von zu Hause aus benutzen?&lt;br /&gt;
** Siehe [[Email]].&lt;br /&gt;
* Wo ist finde ich meinen USB-Stick nach dem einstoepseln?&lt;br /&gt;
** USB Geraete erscheinen in dem Verzeichnis /tmp/SUNWut/mnt/$USER/ und koennen mit dem utdiskadm Befehl verwaltet werden.&lt;br /&gt;
* Wie kann ich KDE Programme (z.B. Kate) aus der Shell starten?&lt;br /&gt;
** Dazu muss der Shell veraten werden, wo KDE zu finden ist:&lt;br /&gt;
 echo &amp;quot;kde::sol10::/opt/csw/kde-gcc/bin:/opt/csw/kde-gcc/man:: KDE&amp;quot; &amp;gt;&amp;gt; ~/.applications&lt;br /&gt;
 echo kde &amp;gt;&amp;gt; ~/.applrc&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
[http://irb.cs.tu-berlin.de/ Offizielle Website des IRB]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: Fakultäts-ABC]]&lt;br /&gt;
[[Kategorie: Überleben im Fakultätsnetz]]&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Informatik-Rechnerbetrieb&amp;diff=818</id>
		<title>Informatik-Rechnerbetrieb</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Informatik-Rechnerbetrieb&amp;diff=818"/>
		<updated>2008-04-22T11:33:21Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: Hinweis wohin USB Geraete gemountet werden&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Informatik-Rechnerbetrieb (IRB) hält das [[UNIX]]- und PC-Rechnernetz am laufen. Im IRB-Sekretariat [[FR]] 5091 erhaltet Ihr Euren [[UNIX-Account]], der für das weitere Studium sehr wichtig ist.&lt;br /&gt;
&lt;br /&gt;
== Häufig gestellte Fragen ==&lt;br /&gt;
&lt;br /&gt;
* Wie komme ich von Zuhause auf die IRB-Server/in das IRB-Netz?&lt;br /&gt;
** Mittels [[SSH]].&lt;br /&gt;
** Mit dem [[IRB VPN]].&lt;br /&gt;
* Wie kann ich meinen IRB-Email-Account von zu Hause aus benutzen?&lt;br /&gt;
** Siehe [[Email]].&lt;br /&gt;
* Wo ist finde ich meinen USB-Stick nach dem einstoepseln?&lt;br /&gt;
** USB Geraete erscheinen in dem Verzeichnis /tmp/SUNWut/mnt/$USER/ und koennen mit dem utdiskadm Befehl verwaltet werden.&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
[http://irb.cs.tu-berlin.de/ Offizielle Website des IRB]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: Fakultäts-ABC]]&lt;br /&gt;
[[Kategorie: Überleben im Fakultätsnetz]]&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Democracy&amp;diff=9849</id>
		<title>Javakurs/Übungsaufgaben/Democracy</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Democracy&amp;diff=9849"/>
		<updated>2008-04-10T10:37:18Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Fehler im System */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Fehler im System ===&lt;br /&gt;
&lt;br /&gt;
Führende PolitikwissenschaftlerInnen haben festgestellt, dass Demokratie einfach nicht funktioniert. Deshalb haben sie sich überlegt, dass es klüger wäre, wenn einfach der/die Älteste entscheidet. Sie haben ein Programm geschrieben, das unter den Parteivorsitzenden der großen Parteien, den/die älteste heraussucht. Leider sind sie keine gelernten Java-Programmierer und haben es nicht geschafft, lauffähigen Code zu produzieren. Findest du die Fehler im System?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public class DemocracyV2 {&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		String[] names = String[5]; &lt;br /&gt;
		int[] ages = int[5];&lt;br /&gt;
		&lt;br /&gt;
		generateNamesAndAges(names, ages);&lt;br /&gt;
		System.out.println(whosTheOldest(names, ages));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	private static void generateNamesAndAges(String[] names, int[] ages) {&lt;br /&gt;
		names[0] = Angela; &lt;br /&gt;
		ages[0] =  52;&lt;br /&gt;
		&lt;br /&gt;
		names[1] = Kurt;&lt;br /&gt;
		ages[1] = 58;&lt;br /&gt;
		&lt;br /&gt;
		names[2] = Lothar;&lt;br /&gt;
		ages[2] = 66;&lt;br /&gt;
&lt;br /&gt;
		names[3] = Doppelspitze Claudia und Reinhard;&lt;br /&gt;
		ages[3] = 51 + 54;&lt;br /&gt;
		&lt;br /&gt;
		names[4] = Guido;&lt;br /&gt;
		ages[4] = 45;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	private static void whosTheOldest(String[] names, int[] ages) { &lt;br /&gt;
		int oldest;	&lt;br /&gt;
		for(int i; i &amp;lt;= 5; i++) { &lt;br /&gt;
			if ( oldest &amp;lt; ages[i] ) { &lt;br /&gt;
				int indexOfOldest = i; &lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		return &amp;quot;Oldest and wisest person is &amp;quot; + names[indexOfOldest] + &amp;quot; with an age of &amp;quot; + ages[indexOfOldest]  + &amp;quot;.&amp;quot;; &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem du die Fehler gefunden hast, wie könntest du sie beseitigen und so die Gesellschaft vor ihrem Untergang bewahren?&lt;br /&gt;
Wie könnte mit dem Fall umgegangen werden, dass zwei PolitikerInnen gleich alt sind?&lt;br /&gt;
&lt;br /&gt;
== Kommentare ==&lt;br /&gt;
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf &amp;quot;bearbeiten&amp;quot; und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Als kleine Starthilfe folgt ein Beispiel, wie so ein Kommentar formatiert sein könnte. Mit &amp;quot;Vorschau zeigen&amp;quot; kannst du dir ansehen, was deine Änderung bewirken würde, ohne wirklich etwas zu ändern.&lt;br /&gt;
Du musst übrigens außerhalb dieses auskommentieren Bereichs schreiben ;)&lt;br /&gt;
&lt;br /&gt;
==== Robert ====&lt;br /&gt;
Na mal schauen, ob irgendjemand diese Funktion wirklich benutzt. Ich fände es jedenfalls toll.&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Methoden&amp;diff=9791</id>
		<title>Javakurs/Übungsaufgaben/Methoden</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Methoden&amp;diff=9791"/>
		<updated>2008-04-08T12:55:04Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Argumente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Alle in diese Übung verwendeten Klassen findest du auch als Vorgabedateien unter http://docs.freitagsrunde.org/Veranstaltungen/javakurs_2007/vorgaben/Methoden.tar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Argumente ==&lt;br /&gt;
* Überlege dir, was der folgende Code macht. Was erwartest du als Ausgabe?&lt;br /&gt;
* Führe den Code aus und vergleiche das Ergebnis mit deinen Erwartungen. &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Beispiel {&lt;br /&gt;
	public static void main ( String [] arguments ) {&lt;br /&gt;
		ausgabe( 1, &amp;quot;Martin&amp;quot; );&lt;br /&gt;
		ausgabe( 2, &amp;quot;Arthur&amp;quot; );&lt;br /&gt;
		ausgabe( 3, &amp;quot;Florian&amp;quot; );&lt;br /&gt;
		ausgabe( 4, &amp;quot;Robert&amp;quot; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	static void ausgabe ( int zahl, String name ) {&lt;br /&gt;
		System.out.println( zahl + &amp;quot;: &amp;quot; + name );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rückgabewert ==&lt;br /&gt;
* Überlege dir, was der folgende Code in den folgenden Beispielen macht. Was erwartest du als Ausgabe?&lt;br /&gt;
* Führe den Code jeweils aus und vergleiche das Ergebnis mit deinen Erwartungen. &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
//file: Methoden1.java&lt;br /&gt;
class Methoden1 {&lt;br /&gt;
    public static void main ( String[] arguments ) {&lt;br /&gt;
        System.out.println( gibMirNeZahl() );&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static double gibMirNeZahl() {&lt;br /&gt;
        return 15.3;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
//file: Methoden2.java&lt;br /&gt;
class Methoden2 {&lt;br /&gt;
    public static void main ( String[] arguments ) {&lt;br /&gt;
        System.out.println( mathematik( 1, 2 ) );&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static boolean mathematik ( int argument1, int argument2 ) {&lt;br /&gt;
        return ( argument1 + 5 ) &amp;lt; ( argument2 * 2 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
//file: Methoden3.java&lt;br /&gt;
class Methoden3 {&lt;br /&gt;
    public static void main ( String[] arguments ) {&lt;br /&gt;
        System.out.println ( mathematik( 1, 2 ) );&lt;br /&gt;
        System.out.println ( mathematik( 1, 5 ) );&lt;br /&gt;
        System.out.println ( mathematik( 3, 4 ) );&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static boolean mathematik ( int argument1, int argument2 ) {&lt;br /&gt;
        return ( argument1 + 5 ) &amp;lt; ( argument2 * 2 );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
//file: Methoden4.java&lt;br /&gt;
class Methoden4 {&lt;br /&gt;
    public static void main ( String[] arguments ) {&lt;br /&gt;
        int eineZahl = 2;&lt;br /&gt;
        System.out.println ( mathematik( 4, eineZahl ) );&lt;br /&gt;
        eineZahl = 5;&lt;br /&gt;
        System.out.println ( mathematik( 2, eineZahl ) );&lt;br /&gt;
        System.out.println ( mathematik( eineZahl, 4 ) );&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static boolean mathematik(int argument1, int argument2) {&lt;br /&gt;
        return (argument1 + 5) &amp;lt; (argument2 * 2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kommentare ==&lt;br /&gt;
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf &amp;quot;bearbeiten&amp;quot; und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Als kleine Starthilfe folgt ein Beispiel, wie so ein Kommentar formatiert sein könnte. Mit &amp;quot;Vorschau zeigen&amp;quot; kannst du dir ansehen, was deine Änderung bewirken würde, ohne wirklich etwas zu ändern.&lt;br /&gt;
Du musst übrigens außerhalb dieses auskommentieren Bereichs schreiben ;)&lt;br /&gt;
&lt;br /&gt;
==== Robert ====&lt;br /&gt;
Na mal schauen, ob irgendjemand diese Funktion wirklich benutzt. Ich fände es jedenfalls toll.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Ran====&lt;br /&gt;
das:&lt;br /&gt;
 //file: Methoden2.java&lt;br /&gt;
 class Methoden3 &lt;br /&gt;
&lt;br /&gt;
soll so:&lt;br /&gt;
 //file: Methoden2.java&lt;br /&gt;
 class Methoden2 {&lt;br /&gt;
sein...&lt;br /&gt;
&lt;br /&gt;
====Robert====&lt;br /&gt;
Danke, ist geändert. -- [[Benutzer:Buchholz|Robert Buchholz]] 11:20, 11. Apr. 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Mario====&lt;br /&gt;
Jetzt auch den Fehler im Archiv verändert ... -- [[Benutzer:Mario|Mario Bodemann]] 11:26, 08. Apr. 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
====Fehler?====&lt;br /&gt;
&amp;lt;strike&amp;gt;Beispiel.java werden die Methoden  mit falscher Reihenfolge der Parameter aufgerufen:&lt;br /&gt;
&lt;br /&gt;
ausgabe(&amp;quot;Arthur&amp;quot;, 2); -&amp;gt; fehler&lt;br /&gt;
&lt;br /&gt;
ausgabe(&amp;quot;Robert&amp;quot;, 4); -&amp;gt; fehler&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fixed, siehe oben -- Mario&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Variablen_und_Zuweisungen&amp;diff=9672</id>
		<title>Javakurs/Übungsaufgaben/Variablen und Zuweisungen</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Variablen_und_Zuweisungen&amp;diff=9672"/>
		<updated>2008-04-07T10:18:29Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Kommentare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Alle in diese Übung verwendeten Klassen findest du auch als Vorgabedateien unter [http://docs.freitagsrunde.org/Veranstaltungen/javakurs_2007/vorgaben/VariablenUndZuweisungen.tar http://docs.freitagsrunde.org/Veranstaltungen/javakurs_2007/vorgaben/VariablenUndZuweisungen.tar]&lt;br /&gt;
&lt;br /&gt;
(Die Datei wird mit dem Kommando tar -xf entpackt)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Deklaration und Initialisierung ==&lt;br /&gt;
&lt;br /&gt;
* An welcher Stelle im folgenden Programm wird die Variable &#039;&#039;aWholeNumber&#039;&#039; deklariert?&lt;br /&gt;
* An welcher Stelle im folgenden Programm wird die Variable &#039;&#039;aWholeNumber&#039;&#039; initialisiert?&lt;br /&gt;
* Beantworte diese Fragen auch für die Variablen: &#039;&#039;notAWholeNumber&#039;&#039;, &#039;&#039;aString&#039;&#039;, &#039;&#039;anotherWholeNumber&#039;&#039;, &#039;&#039;anotherNotSoWholeNumber&#039;&#039;, &#039;&#039;anotherString&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Erkläre deine Meinung einem Tutor oder diskutiere sie mit der Person am Rechner nebenan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class DeklarationUndInitialisierung {&lt;br /&gt;
	public static void main(String [] ignored) {&lt;br /&gt;
		int aWholeNumber;&lt;br /&gt;
		double notAWholeNumber;&lt;br /&gt;
		String aString;&lt;br /&gt;
&lt;br /&gt;
		aWholeNumber = 0;&lt;br /&gt;
		notAWholeNumber = 0.0;&lt;br /&gt;
		aString = &amp;quot;&amp;quot;;&lt;br /&gt;
		System.out.println(aWholeNumber);&lt;br /&gt;
		System.out.println(notAWholeNumber);&lt;br /&gt;
		System.out.println(aString);&lt;br /&gt;
&lt;br /&gt;
		int anotherWholeNumber = 0;&lt;br /&gt;
		double anotherNotSoWholeNumber = 0;&lt;br /&gt;
		String anotherString = &amp;quot;&amp;quot;;&lt;br /&gt;
		System.out.println(anotherWholeNumber);&lt;br /&gt;
		System.out.println(anotherNotSoWholeNumber);&lt;br /&gt;
		System.out.println(anotherString);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Selber Deklarationen und Definitionen durchführen ==&lt;br /&gt;
&lt;br /&gt;
* Realisiere die Kommentare im folgenden Codestück. &lt;br /&gt;
* Teste deinen Code.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class SelbstDeklarierenUndDefinieren {&lt;br /&gt;
	public static void main(String [] ignored) {&lt;br /&gt;
		// deklariere eine Variable &amp;quot;birnen&amp;quot;  vom Typ int&lt;br /&gt;
		&lt;br /&gt;
		// weise ihr den Wert drei zu&lt;br /&gt;
&lt;br /&gt;
//		System.out.println(&amp;quot;3 erwartet: &amp;quot; + birnen);&lt;br /&gt;
		// addiere fuenf zu dem Wert&lt;br /&gt;
&lt;br /&gt;
//		System.out.println(&amp;quot;8 erwartet: &amp;quot; + birnen);&lt;br /&gt;
		// deklariere eine Variable &amp;quot;aepfel&amp;quot; und weise ihr den Wert fuenf zu&lt;br /&gt;
&lt;br /&gt;
//		System.out.println(&amp;quot;5 erwartet: &amp;quot; + aepfel);&lt;br /&gt;
		// subtrahiere zwei von dem Wert&lt;br /&gt;
&lt;br /&gt;
//		System.out.println(&amp;quot;3 erwartet: &amp;quot; + aepfel);&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zuweisung an Variablen ==&lt;br /&gt;
&lt;br /&gt;
* Überlege dir, was für eine Ausgabe der folgende Code erzeugen würde.&lt;br /&gt;
* Compiliere den Code, führe ihn aus und vergleiche das Resultat mit deinen Erwartungen.&lt;br /&gt;
* Was sind die Unterschiede?&lt;br /&gt;
* Diskutiere die Unterschiede mit der Person am Rechner nebenan, oder einem Tutor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class ZuweisungenAnVariablen {&lt;br /&gt;
	public static void main(String [] ignored) {&lt;br /&gt;
		System.out.println(0);&lt;br /&gt;
		int zero = 0;&lt;br /&gt;
		System.out.println(zero);&lt;br /&gt;
		int one = 1;&lt;br /&gt;
		int whatsThis = zero;&lt;br /&gt;
		System.out.println(whatsThis);&lt;br /&gt;
		whatsThis = one;&lt;br /&gt;
		System.out.println(whatsThis);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variablen ändern ihre Werte ==&lt;br /&gt;
&lt;br /&gt;
* Überlege dir, was für eine Ausgabe der folgende Code erzeugen würde.&lt;br /&gt;
* Compiliere den Code, führe ihn aus und vergleiche das Resultat mit deinen Erwartungen.&lt;br /&gt;
* Was sind die Unterschiede?&lt;br /&gt;
* Diskutiere die Unterschiede mit der Person am Rechner nebenan, oder einem Tutor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class VariablenAendernIhreWerte {&lt;br /&gt;
	public static void main(String [] ignored) {&lt;br /&gt;
		int number = 1;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
		number = 1;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
		number = 2;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
		number = 3;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
		number = 1;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
		number = 17;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Formatierung und Namen ==&lt;br /&gt;
&lt;br /&gt;
* Wieso haben wir die Code-Beispiele nach den geschweiften Klammern eingerückt und die Variablen so benannt, wie wir es taten und nicht so:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class _{static long _&lt;br /&gt;
(long __,long  ___) {&lt;br /&gt;
return __==0 ?___+ 1:&lt;br /&gt;
___==0?_(__-1,1):_(__&lt;br /&gt;
-1,_(__, ___-1)) ;  }&lt;br /&gt;
static  {int _=2 ,___&lt;br /&gt;
= 2;System.out.print(&lt;br /&gt;
&amp;quot;a(&amp;quot;+_+’,’+___+ &amp;quot;)=&amp;quot;+&lt;br /&gt;
_ (_,  ___) ) ;System&lt;br /&gt;
.exit(1);}}//(C) Ulli&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Etwas weniger Extrem: Was ist im folgenden Beispiel bei der Formatierung schief gelaufen?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Formatierung1 {public static void main&lt;br /&gt;
	(String [] ignored) {&lt;br /&gt;
	System.out.println(0); int zero = 0;&lt;br /&gt;
			System.out.println(zero);&lt;br /&gt;
		int one = 1;&lt;br /&gt;
		int whatsThis = zero;&lt;br /&gt;
			System.out.&lt;br /&gt;
		println(whatsThis);&lt;br /&gt;
	whatsThis = one;		System.out.println(whatsThis)&lt;br /&gt;
;}}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Warum ist der folgende Code so schlecht lesbar?&lt;br /&gt;
* Woran erinnert er dich?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class b {&lt;br /&gt;
	public static void main(String [] i) {&lt;br /&gt;
		System.out.println(0);&lt;br /&gt;
		int a = 0;&lt;br /&gt;
		System.out.println(a);&lt;br /&gt;
		int b = 1;&lt;br /&gt;
		int c = a;&lt;br /&gt;
		System.out.println(c);&lt;br /&gt;
		c = b;&lt;br /&gt;
		System.out.println(c);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kommentare ==&lt;br /&gt;
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf &amp;quot;bearbeiten&amp;quot; und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Als kleine Starthilfe folgt ein Beispiel, wie so ein Kommentar formatiert sein könnte. Mit &amp;quot;Vorschau zeigen&amp;quot; kannst du dir ansehen, was deine Änderung bewirken würde, ohne wirklich etwas zu ändern.&lt;br /&gt;
Du musst übrigens außerhalb dieses auskommentieren Bereichs schreiben ;)&lt;br /&gt;
&lt;br /&gt;
==== Robert ====&lt;br /&gt;
Na mal schauen, ob irgendjemand diese Funktion wirklich benutzt. Ich fände es jedenfalls toll.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
hallo alle freitagsrunde Team,&lt;br /&gt;
&lt;br /&gt;
diese lehrveranstaltung finde ich persönlich super megageil, aber ich wünsche,dass die Musterlösungen von solchen schweren Aufgaben im Netz gestellt werden.&lt;br /&gt;
&lt;br /&gt;
ich wünsche Euch viel Erfolg und weiterso...:-)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Aufgabe funktioniert auch gut, wenn man&lt;br /&gt;
Code mit copy+past von der Website kopiert&lt;br /&gt;
Reiner --&amp;gt;&lt;br /&gt;
Bisher laeuft alles ganz klasse, weiter so!&lt;br /&gt;
&lt;br /&gt;
Die erste Aufgabe &amp;quot;SelbstDeklarieren und Definieren&amp;quot; ist etwas unverständlich. Das mit den eingebauten &amp;quot;Testfunktionen&amp;quot; kapiert man als Anfänger nicht unbedingt, also dass man da zum testen die Kommentarzeichen löschen muss.&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Kassenbon&amp;diff=9472</id>
		<title>Javakurs/Übungsaufgaben/Kassenbon</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Kassenbon&amp;diff=9472"/>
		<updated>2008-04-07T09:19:29Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Kommentare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Kassenbon ==&lt;br /&gt;
Es soll ein Programm geschrieben werden, dass einen Kassenbon auf der Konsole anzeigt (mit &#039;&#039;System.out.println&#039;&#039;).&lt;br /&gt;
Am Anfang des Programmes werden in Form von Variablen folgende Werte festgelegt:&lt;br /&gt;
&lt;br /&gt;
* Anzahl von mindestens vier verschiedenen Waren, die gekauft werden sollen.&lt;br /&gt;
* Einzelpreise der Waren. (Ja, jede Warensorte hat einen anderen Preis)&lt;br /&gt;
* Inhalt der Brieftasche.&lt;br /&gt;
&lt;br /&gt;
Das Programm soll den Gesamtpreis der eingangs festgelegten Waren ermitteln. Übersteigt der&lt;br /&gt;
Gesamtpreis den Inhalt der Brieftasche, wird der Benutzer auf den fehlenden Betrag hingewiesen.&lt;br /&gt;
Reicht der Inhalt der Brieftasche für den Einkauf aus, wird ein Kassenbon ausgegeben, der&lt;br /&gt;
die gekauften Waren mit Anzahl und Preis sowie am Ende den Gesamtpreis auflistet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Erstellt zuerst die Ausgabe des Kassenbons und füllt sie anschließend mit Berechnungen und der Fallunterscheidung.&lt;br /&gt;
&lt;br /&gt;
== Kassenbon + automatischer Einkauf ==&lt;br /&gt;
Erstellt eine Kopie eures soeben geschriebenden Programmes.&lt;br /&gt;
Verändert das Programm so, dass nun der Kassenbon solange mit Waren gefüllt wird, bis der&lt;br /&gt;
Inhalt der Brieftasche für keine weiteren Einkäufe ausreicht. Betrachtet der Einfachheit halber&lt;br /&gt;
mehrere Produkte eines Typs als einen Einkauf.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Viele, viele Fallunterscheidungen!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kommentare ==&lt;br /&gt;
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf &amp;quot;bearbeiten&amp;quot; und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)   /// RETTET DIE WALE !!! /// &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Als kleine Starthilfe folgt ein Beispiel wie so ein Kommentar formatiert sein könnte. Mit &amp;quot;Vorschau zeigen&amp;quot; kannst du dir ansehen was deine Änderung bewirken würde, ohne wirklich etwas zu ändern.&lt;br /&gt;
Du musst übrigens außerhalb dieses auskommentieren Bereichs schreiben ;)&lt;br /&gt;
&lt;br /&gt;
==== Robert ====&lt;br /&gt;
Na mal schaun ob irgend jemand diese Funktion wirklich benutzt. Ich fände es jedenfalls toll.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Unknown User ====&lt;br /&gt;
hallo alle freitagsrunde Team, &lt;br /&gt;
&lt;br /&gt;
diese lehrveranstaltung finde ich persönlich super megageil, aber ich wünsche,dass die Musterlösungen von solchen schweren Aufgaben im Netz gestellt werden. &lt;br /&gt;
&lt;br /&gt;
ich wünsche Euch viel Erfolg und weiterso...:-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Robert ====&lt;br /&gt;
&lt;br /&gt;
Der Eine oder Andere hat darauf bestanden auf seinem Kassenbon keine Hundertstelcent ausgeben zu wollen. Diese entstehen mitunter dadurch, dass Doublewerte mit einer gewissen Toleranz gespeichert werden.&lt;br /&gt;
Hier ein Vorschlag für einen Workaround:&lt;br /&gt;
&lt;br /&gt;
 double kommazahl = 123.290402;&lt;br /&gt;
 	&lt;br /&gt;
 int ganzzahl = (int)kommazahl; // Nachkommastelle abschneiden&lt;br /&gt;
 int kommastelle = (int)(kommazahl * 100)%10 ; // zwei Nachkommastellen extrahieren&lt;br /&gt;
  &lt;br /&gt;
 System.out.println(&amp;quot;Preis=&amp;quot; + ganzzahl + &amp;quot;.&amp;quot; + kommastelle ); // Zahl in der Ausgabe zusammensetzen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ich ====&lt;br /&gt;
Wie ist das gemeint, mit Kassenbon automatisch füllen?&lt;br /&gt;
Man kann doch nicht &amp;quot;zufällig&amp;quot; einkaufen...&lt;br /&gt;
: Die Idee der Aufgabe war es, so lange dasselbe Produkt zu kaufen, wie du kannst. Aber (da am Anfang des Kurses) nicht mit einer Schleife, sondern mit mehreren if&#039;s. -- [[Benutzer:Buchholz|Robert Buchholz]] 02:13, 4. Jun. 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Studentendatenbank&amp;diff=9576</id>
		<title>Javakurs/Übungsaufgaben/Studentendatenbank</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Studentendatenbank&amp;diff=9576"/>
		<updated>2007-04-13T12:54:56Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Im Rahmen dieser Aufgabe wollen wir eine kleine &amp;quot;Studentendatenbank&amp;quot; erstellen.&lt;br /&gt;
&lt;br /&gt;
                                                    &lt;br /&gt;
&#039;&#039;&#039;1.1.&#039;&#039;&#039; Schreibe eine Klasse &#039;&#039;Student&#039;&#039;, die Informationen wie Name, Matrikelnummer etc. über einen Studenten speichert. Erzeuge ein Objekt dieser Klasse und belege die Objektvariablen mit Werten. Lies diese Werte aus den Objektvariablen wieder aus und gib sie auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.2.&#039;&#039;&#039; Schreibe einen Konstruktor für deine Klasse, der die Objektvariablen des erzeugten Objekts mit Werten füllt. Erzeuge mit Hilfe dieses Konstruktors ein Objekt, lies seine Werte aus und gib sie auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.3.&#039;&#039;&#039; Erweitere deine Klasse um eine Methode &#039;&#039;printMe()&#039;&#039;, die die Daten des Studentenobjekts auf dem Bildschirm ausgibt. Teste deine Methode!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.4.&#039;&#039;&#039; Lege ein Feld (Array) mit 100 Studentenobjekten an, die verschiedene Matrikelnummern haben und gib alle auf dem Bildschirm aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.5.&#039;&#039;&#039; Das in der vorherigen Aufgabe angelegte Feld ist schon eine Art Studentendatenbank. Schreibe daher eine neue Klasse &#039;&#039;StudentDatabase&#039;&#039;, die ein Feld von Studentenobjekten enthält. Die Klasse soll einen Konstruktor haben, dem die Größe des zu erzeugenden Feldes übergeben wird. Implementiere auch eine Methode &#039;&#039;printMe()&#039;&#039;, die alle Datensätze ausgeben soll, sowie eine Methode &#039;&#039;addStudent()&#039;&#039;, die ein Studentenobjekt mit den zu übergebenen Daten anlegen soll und dieses in die Datenbank einfügen soll.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.6. Zusatzaufgabe:&#039;&#039;&#039; Erweitere die Studentendatenbank um eine Methode &#039;&#039;deleteStudent()&#039;&#039;, die das Studentenobjekt mit der übergebenen Matrikelnummer aus der Datenbank löschen soll. Funktionert nach dem Löschen einiger Objekte deine Ausgabemethode printMe() noch?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.7. Zusatzaufgabe:&#039;&#039;&#039; Erweitere die Studentendatenbank um eine Methode &#039;&#039;numberOfStudents()&#039;&#039;, die die Anzahl der in der Datenbank gespeicherten Studentenobjekte zurückliefert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.8. Zusatzaufgabe:&#039;&#039;&#039; Schreibe Methoden, die statistische Daten über die Studenten ermitteln. Beispiele sind: die Durchschnittsnote, das Durchschnittsalter . . .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kommentare ==&lt;br /&gt;
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf &amp;quot;bearbeiten&amp;quot; und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Als kleine Starthilfe folgt ein Beispiel, wie so ein Kommentar formatiert sein könnte. Mit &amp;quot;Vorschau zeigen&amp;quot; kannst du dir ansehen, was deine Änderung bewirken würde, ohne wirklich etwas zu ändern.&lt;br /&gt;
Du musst übrigens außerhalb dieses auskommentieren Bereichs schreiben ;)&lt;br /&gt;
&lt;br /&gt;
==== Robert ====&lt;br /&gt;
Na mal schauen, ob irgendjemand diese Funktion wirklich benutzt. Ich fände es jedenfalls toll.&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Informatik_4_(StuPO90)/Stichpunkte_zur_Klausur_SoSe_2006&amp;diff=7802</id>
		<title>Informatik 4 (StuPO90)/Stichpunkte zur Klausur SoSe 2006</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Informatik_4_(StuPO90)/Stichpunkte_zur_Klausur_SoSe_2006&amp;diff=7802"/>
		<updated>2006-07-21T10:12:46Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Aufgabe 1: Allgemeine Fragen */  fernaufrufpunkt erklärt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Allgemeines ==&lt;br /&gt;
Diese Seite sammelt die Information vom &amp;quot;Pre-Release&amp;quot; der aktuellen [[Informatik 4|Info4]]-Klausur.&lt;br /&gt;
* Die Aufgaben sind vermutlich nicht ganz die gleichen, die in der Klausur vorkommen. Aber hoffentlich ähnlich. Insgesamt sind 50 Punkte zu erreichen. &lt;br /&gt;
&lt;br /&gt;
== Aufgabe 1: Allgemeine Fragen ==&lt;br /&gt;
&#039;&#039;5 Punkte.&#039;&#039;&lt;br /&gt;
# Unterschied zwischen 2 gegebenen Assemblerbefehlen erklären&lt;br /&gt;
# Welche Methoden der Javaklasse ... werden für die Realisierung des Methodenfernaufrufs benötigt.&lt;br /&gt;
# Bestimmtes Verhalten bei Monitoren&lt;br /&gt;
# Verbindungsanfrage eines Clients an einem Server ausprogrammieren in Java&lt;br /&gt;
# Spezielles Verhalten zu Semaphoren&lt;br /&gt;
&lt;br /&gt;
== Aufgabe 2: Assembler ==&lt;br /&gt;
&#039;&#039;9 Punkte.&#039;&#039;&lt;br /&gt;
# Textaufgabe, Algorithmus realisieren&lt;br /&gt;
# Kellerspeicher aufzeichnen&lt;br /&gt;
&lt;br /&gt;
== Aufgabe 3: Semaphore ==&lt;br /&gt;
&#039;&#039;11 Punkte.&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
# 2 Prozesse, die sich nach vorgegebenen Regeln verhalten programmieren&lt;br /&gt;
# ein weiterer Prozess kommt hinzu - ausprogrammieren&lt;br /&gt;
&lt;br /&gt;
== Aufgabe 4: Monitore ==&lt;br /&gt;
&#039;&#039;12 Punkte.&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Gegeben ist die Beschreibung eines Synchronisierungsproblems.&lt;br /&gt;
3 Threads schreiben, in Java ausprogrammieren&lt;br /&gt;
&lt;br /&gt;
== Aufgabe 5: Nachrichtenaustausch ==&lt;br /&gt;
&#039;&#039;12 Punkte.&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Sockets benutzen, Java programmieren, Nachrichtenaustausch&lt;br /&gt;
&lt;br /&gt;
== Aufgabe 6: Speicherverwaltung ==&lt;br /&gt;
&#039;&#039;4 Punkte.&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Strategien bei seitenverwalteten Systemen&lt;br /&gt;
# Konkrete Speicherverwaltung&lt;br /&gt;
# Anfragen in der Speicherverwaltung behandeln&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Rennschnecke&amp;diff=7284</id>
		<title>Javakurs/Übungsaufgaben/Rennschnecke</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Rennschnecke&amp;diff=7284"/>
		<updated>2006-05-06T11:43:49Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Rennschnecke */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Javakurs2006| &amp;lt;- Zurück zur Übersicht]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rennschnecke ==&lt;br /&gt;
#Erstelle eine Klasse &amp;quot;Rennschnecke&amp;quot;&lt;br /&gt;
#:&lt;br /&gt;
#Rennschnecken sollen folgende Eigenschaften(Objektvariablen) besitzen:&lt;br /&gt;
#* einen Namen&lt;br /&gt;
#* eine Rasse&lt;br /&gt;
#* eine Maximalgeschwindigkeit&lt;br /&gt;
#* die Schnecke soll wissen welchen Weg sie bereits zurück gelegt hat&lt;br /&gt;
#:&lt;br /&gt;
# Erstelle für die Klasse Rennschnecke einen [[Javakurs2006/Java_Kurzreferenz#Konstruktor|Konstruktor]], der den Instanzvariablen beim Erstellen einer neuen Instanz(Objekt zu dieser Klasse) Werte zuweist.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennschnecke&amp;quot; eine Methode &amp;quot;krieche()&amp;quot; an, welche die Schnecke abhängig von ihrer Maximalgeschwindigkeit eine zufällige Strecke weiter bewegt.&lt;br /&gt;
#* Tipp: Schaut euch die Methode Math.random() aus der Java API an.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennschnecke&amp;quot; eine Methode &amp;quot;public String toString()&amp;quot; an, welche die Daten der Schnecke mit return als String zurückgibt.&lt;br /&gt;
#:&lt;br /&gt;
# Teste deine Klasse, indem du probehalber ein Rennschneckenobjekt erzeugst und seine Daten auf der Konsole ausgibst. &lt;br /&gt;
#*Tipp:Verwende zum Ausgeben der Daten die toString() Methode der Rennschnecke.&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
&lt;br /&gt;
== Rennen ==&lt;br /&gt;
&lt;br /&gt;
#Erstelle eine Klasse &amp;quot;Rennen&amp;quot;&lt;br /&gt;
#:&lt;br /&gt;
#Ein Rennen hat folgende Eigenschaften:&lt;br /&gt;
#*einen Namen&lt;br /&gt;
#*die Anzahl der teilnehmenden Schnecken&lt;br /&gt;
#*die teilnemenden Schnecken selbst (z.B. in einer ArrayList)&lt;br /&gt;
#*die Länge der zu kriechenden Strecke&lt;br /&gt;
#:&lt;br /&gt;
#Überlege dir, welche dieser Werte bereits im Konstructor gesetzt werden sollten.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;void addRennschnecke(Rennschnecke neueSchnecke)&amp;quot; an, welche dem Rennen eine Schnecke hinzufügt.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;void removeRennschnecke(String name)&amp;quot; an, welche eine Schnecke aus dem Rennen entfernt.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;public String toString()&amp;quot; an, welche die Daten des Rennens mit return als String zurückgibt. &lt;br /&gt;
#*Tipp: Um die Daten der beteiligten Schnecken zurückzugeben, könnt ihr deren toString() Funktion benutzen.&lt;br /&gt;
#:&lt;br /&gt;
#Teste deine Klasse vom Hauptprogramm aus!&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;Rennschnecke ermittleGewinner()&amp;quot; an, welche &#039;&#039;&#039;null&#039;&#039;&#039; zurückliefert, wenn noch keine der teilnemenden Schnecken das Ziel erreicht hat und anderenfalls die Gewinnerschnecke zurückgibt.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;void lasseSchneckenKriechen()&amp;quot; an, welche alle teilnemenden Schnecken einmal kriechen lässt.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;void durchfuehren()&amp;quot; an, welche so lange lasseSchneckenKriechen() aufruft, bis eine der Schnecken das Ziel erreicht hat.&lt;br /&gt;
#* Tipp: Ob eine Schnecke im Ziel angekommen ist, kannst du mit deiner Methode ermittleGewinner() herrausfinden.&lt;br /&gt;
&lt;br /&gt;
== Wettbüro ==&lt;br /&gt;
&lt;br /&gt;
#Erstelle eine Klasse Wettbuero.&lt;br /&gt;
#:&lt;br /&gt;
#:Ein Wettbuero hat die folgenden Eigenschaften:&lt;br /&gt;
#* Es weiß, für welches Rennen es seine Wetten entgegennimmt.&lt;br /&gt;
#* Es verfügt über eine Liste (z.B. eine Arraylist) von angenommenden Wetten.&lt;br /&gt;
#* Es hat einen festen Faktor, mit welchem Wetteinsätze bei einem Gewinn multipliziert werden.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Wettbuero&amp;quot; eine Methode &amp;quot;wetteAnnehmen(String schneckenName, int wetteinsatz, String spieler)&amp;quot; an, welche eine Wette entgegennimmt. Die Wette ist bezogen auf eine Schnecke für das Rennen, das von dem Büro bearbeitet wird.&lt;br /&gt;
#* Um die einzelnen Wetten speichern zu können, sollten ihre Daten in eigenen Objekten der Klasse &amp;quot;Wette&amp;quot; gespeichert werden. Erstellt euch diese Klasse selbst. &lt;br /&gt;
#* Tipp: Denkt an toString().&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Wettbuero&amp;quot; eine Methode &amp;quot;rennenDurchfueren()&amp;quot; an, welche das betreute Rennen durchfuert.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Wettbuero&amp;quot; eine Methode &amp;quot;toString()&amp;quot; an, welche die Daten des Wettbueros, die Daten des Rennens sowie sämtliche abgeschlossende Wetten als String zurückgibt.&lt;br /&gt;
#:&lt;br /&gt;
# Teste dein Programm!&lt;br /&gt;
#:&lt;br /&gt;
# Tausche die Klasse Rennen mit einem Kommilitonen, der ebenfalls bereits fertig ist.&lt;br /&gt;
#* Sollten eure Programme immer noch laufen?&lt;br /&gt;
#* Treten Fehler auf? Wenn ja: ändert eure Programme so ab, dass ihr problemlos Klassen austauschen könnt.&lt;br /&gt;
&lt;br /&gt;
== Zusatz ==&lt;br /&gt;
&lt;br /&gt;
Es gibt noch ein paar Dinge, die in unserem Wettbüro nicht so laufen wie sie sollten. &lt;br /&gt;
Macht sie besser.&lt;br /&gt;
&lt;br /&gt;
* Dieselbe Schnecke kann in ein Rennen zweimal eingetragen werden.&lt;br /&gt;
* Es können negative Wetten abgeschlossen werden.&lt;br /&gt;
* Gehen zwei Schnecken gleichzeitig durchs Ziel, wird die Schnecke ausgegeben, auf die die Suche nach dem Gewinner zuerst stößt. Das ist ganz schön ungerecht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zusatz Vererbung ==&lt;br /&gt;
&lt;br /&gt;
* Wo Geld im Spiel ist wird auch betrogen. Aus diesem Grund wollen wir jezt auch gedopte Rennschnecken an unseren Rennen teilnehmen lassen. &lt;br /&gt;
** Erstelle eine Klasse &amp;quot;Dopingschnecke&amp;quot;, welche alle Attribute und Methoden der gemeinen &amp;quot;Rennschnecke&amp;quot; erbt.&lt;br /&gt;
** Überschreibe den geerbten Constructor, so das &amp;quot;Dopingschnecken&amp;quot; eine wesentlich höhere Maximalgeschwindigkeit erhalten als normale &amp;quot;Rennschnecken&amp;quot;.&lt;br /&gt;
** Überschreibe die geerbte Methode &amp;quot;String toString()&amp;quot; so dass Dopingschnecken anders ausgegeben werden als Rennschnecken (z.B. durch einen zusatz wie &amp;quot;rote Augen&amp;quot; oder ähnliches)&lt;br /&gt;
** Mische in einem Rennen Dopingschnecken unter deine Rennschnecken. Du musst dafür keinerlei Funktionalitäten änder. Dein Programm muss nicht wissen ob es sich um eine Dopingschnecke handelt, denn sie ist ja auch eine Rennschnecke.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Javakurs2006| &amp;lt;- Zurück zur Übersicht]]&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Rennschnecke&amp;diff=7283</id>
		<title>Javakurs/Übungsaufgaben/Rennschnecke</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Rennschnecke&amp;diff=7283"/>
		<updated>2006-05-06T11:33:55Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Rennschnecke */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Javakurs2006| &amp;lt;- Zurück zur Übersicht]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rennschnecke ==&lt;br /&gt;
#Erstelle eine Klasse &amp;quot;Rennschnecke&amp;quot;&lt;br /&gt;
#:&lt;br /&gt;
#Rennschnecken sollen folgende Eigenschaften(Objektvariablen) besitzen:&lt;br /&gt;
#* einen Namen&lt;br /&gt;
#* eine Rasse&lt;br /&gt;
#* eine Maximalgeschwindigkeit&lt;br /&gt;
#* die Schnecke soll wissen welchen Weg sie bereits zurück gelegt hat&lt;br /&gt;
#:&lt;br /&gt;
# Erstelle für die Klasse rennschnecke einen [[Javakurs2006/Java_Kurzreferenz#Konstruktor|Konstruktor]], der den Klassenvariablen beim Erstellen einer neuen Instanz(Objekt zu dieser Klasse) Werte zuweist.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennschnecke&amp;quot; eine Methode &amp;quot;krieche()&amp;quot; an, welche die Schnecke abhängig von ihrer Maximalgeschwindigkeit eine zufällige Strecke weiter bewegt.&lt;br /&gt;
#* Tipp: Schaut euch die Methode Math.random() aus der Java API an.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennschnecke&amp;quot; eine Methode &amp;quot;public String toString()&amp;quot; an, welche die Daten der Schnecke mit return als String zurückgibt.&lt;br /&gt;
#:&lt;br /&gt;
# Teste deine Klasse, indem du probehalber ein Rennschneckenobjekt erzeugst und seine Daten auf der Konsole ausgibst. &lt;br /&gt;
#*Tipp:Verwende zum Ausgeben der Daten die toString() Methode der Rennschnecke.&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
&lt;br /&gt;
== Rennen ==&lt;br /&gt;
&lt;br /&gt;
#Erstelle eine Klasse &amp;quot;Rennen&amp;quot;&lt;br /&gt;
#:&lt;br /&gt;
#Ein Rennen hat folgende Eigenschaften:&lt;br /&gt;
#*einen Namen&lt;br /&gt;
#*die Anzahl der teilnehmenden Schnecken&lt;br /&gt;
#*die teilnemenden Schnecken selbst (z.B. in einer ArrayList)&lt;br /&gt;
#*die Länge der zu kriechenden Strecke&lt;br /&gt;
#:&lt;br /&gt;
#Überlege dir, welche dieser Werte bereits im Konstructor gesetzt werden sollten.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;void addRennschnecke(Rennschnecke neueSchnecke)&amp;quot; an, welche dem Rennen eine Schnecke hinzufügt.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;void removeRennschnecke(String name)&amp;quot; an, welche eine Schnecke aus dem Rennen entfernt.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;public String toString()&amp;quot; an, welche die Daten des Rennens mit return als String zurückgibt. &lt;br /&gt;
#*Tipp: Um die Daten der beteiligten Schnecken zurückzugeben, könnt ihr deren toString() Funktion benutzen.&lt;br /&gt;
#:&lt;br /&gt;
#Teste deine Klasse vom Hauptprogramm aus!&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;Rennschnecke ermittleGewinner()&amp;quot; an, welche &#039;&#039;&#039;null&#039;&#039;&#039; zurückliefert, wenn noch keine der teilnemenden Schnecken das Ziel erreicht hat und anderenfalls die Gewinnerschnecke zurückgibt.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;void lasseSchneckenKriechen()&amp;quot; an, welche alle teilnemenden Schnecken einmal kriechen lässt.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;void durchfuehren()&amp;quot; an, welche so lange lasseSchneckenKriechen() aufruft, bis eine der Schnecken das Ziel erreicht hat.&lt;br /&gt;
#* Tipp: Ob eine Schnecke im Ziel angekommen ist, kannst du mit deiner Methode ermittleGewinner() herrausfinden.&lt;br /&gt;
&lt;br /&gt;
== Wettbüro ==&lt;br /&gt;
&lt;br /&gt;
#Erstelle eine Klasse Wettbuero.&lt;br /&gt;
#:&lt;br /&gt;
#:Ein Wettbuero hat die folgenden Eigenschaften:&lt;br /&gt;
#* Es weiß, für welches Rennen es seine Wetten entgegennimmt.&lt;br /&gt;
#* Es verfügt über eine Liste (z.B. eine Arraylist) von angenommenden Wetten.&lt;br /&gt;
#* Es hat einen festen Faktor, mit welchem Wetteinsätze bei einem Gewinn multipliziert werden.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Wettbuero&amp;quot; eine Methode &amp;quot;wetteAnnehmen(String schneckenName, int wetteinsatz, String spieler)&amp;quot; an, welche eine Wette entgegennimmt. Die Wette ist bezogen auf eine Schnecke für das Rennen, das von dem Büro bearbeitet wird.&lt;br /&gt;
#* Um die einzelnen Wetten speichern zu können, sollten ihre Daten in eigenen Objekten der Klasse &amp;quot;Wette&amp;quot; gespeichert werden. Erstellt euch diese Klasse selbst. &lt;br /&gt;
#* Tipp: Denkt an toString().&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Wettbuero&amp;quot; eine Methode &amp;quot;rennenDurchfueren()&amp;quot; an, welche das betreute Rennen durchfuert.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Wettbuero&amp;quot; eine Methode &amp;quot;toString()&amp;quot; an, welche die Daten des Wettbueros, die Daten des Rennens sowie sämtliche abgeschlossende Wetten als String zurückgibt.&lt;br /&gt;
#:&lt;br /&gt;
# Teste dein Programm!&lt;br /&gt;
#:&lt;br /&gt;
# Tausche die Klasse Rennen mit einem Kommilitonen, der ebenfalls bereits fertig ist.&lt;br /&gt;
#* Sollten eure Programme immer noch laufen?&lt;br /&gt;
#* Treten Fehler auf? Wenn ja: ändert eure Programme so ab, dass ihr problemlos Klassen austauschen könnt.&lt;br /&gt;
&lt;br /&gt;
== Zusatz ==&lt;br /&gt;
&lt;br /&gt;
Es gibt noch ein paar Dinge, die in unserem Wettbüro nicht so laufen wie sie sollten. &lt;br /&gt;
Macht sie besser.&lt;br /&gt;
&lt;br /&gt;
* Dieselbe Schnecke kann in ein Rennen zweimal eingetragen werden.&lt;br /&gt;
* Es können negative Wetten abgeschlossen werden.&lt;br /&gt;
* Gehen zwei Schnecken gleichzeitig durchs Ziel, wird die Schnecke ausgegeben, auf die die Suche nach dem Gewinner zuerst stößt. Das ist ganz schön ungerecht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zusatz Vererbung ==&lt;br /&gt;
&lt;br /&gt;
* Wo Geld im Spiel ist wird auch betrogen. Aus diesem Grund wollen wir jezt auch gedopte Rennschnecken an unseren Rennen teilnehmen lassen. &lt;br /&gt;
** Erstelle eine Klasse &amp;quot;Dopingschnecke&amp;quot;, welche alle Attribute und Methoden der gemeinen &amp;quot;Rennschnecke&amp;quot; erbt.&lt;br /&gt;
** Überschreibe den geerbten Constructor, so das &amp;quot;Dopingschnecken&amp;quot; eine wesentlich höhere Maximalgeschwindigkeit erhalten als normale &amp;quot;Rennschnecken&amp;quot;.&lt;br /&gt;
** Überschreibe die geerbte Methode &amp;quot;String toString()&amp;quot; so dass Dopingschnecken anders ausgegeben werden als Rennschnecken (z.B. durch einen zusatz wie &amp;quot;rote Augen&amp;quot; oder ähnliches)&lt;br /&gt;
** Mische in einem Rennen Dopingschnecken unter deine Rennschnecken. Du musst dafür keinerlei Funktionalitäten änder. Dein Programm muss nicht wissen ob es sich um eine Dopingschnecke handelt, denn sie ist ja auch eine Rennschnecke.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Javakurs2006| &amp;lt;- Zurück zur Übersicht]]&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Eclipsekurs_2006/Tag_1&amp;diff=7495</id>
		<title>Eclipsekurs 2006/Tag 1</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Eclipsekurs_2006/Tag_1&amp;diff=7495"/>
		<updated>2006-05-06T10:49:40Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Autocompletion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Erste Schritte ==&lt;br /&gt;
* Starte die Eclipse-Umgebung mit dem Kommando &#039;&#039;&#039;/home/pub/lib/eclipse/eclipse&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Projekt anlegen ===&lt;br /&gt;
* Erstelle ein Java-Projekt &amp;quot;eclipseTutorial&amp;quot; mit getrennten Ordnern für den Quellcode (&#039;&#039;src&#039;&#039;) und kompilierte class-Dateien (&#039;&#039;bin&#039;&#039;).&lt;br /&gt;
** Konfiguriere dabei Eclipse so, das es ab jetzt diese Einstellung als Standardwert verwendet.&lt;br /&gt;
&lt;br /&gt;
* Lege in diesem Projekt eine neue Klasse &amp;quot;Spielwiese&amp;quot; an, die eine &#039;&#039;main&#039;&#039;-Methode enthält.&lt;br /&gt;
* Erweitere die Klasse zu einem &amp;quot;Hello World&amp;quot;-Programm und führe dieses in Eclipse aus.&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Mit sysout [Strg+Leerzeichen] erzeugt die Eclipse-Autocompletion ein System.out.println();&lt;br /&gt;
&lt;br /&gt;
=== Aufruf mit Parametern ===&lt;br /&gt;
* Verändere das Programm so, dass es einen beim Start übergebenden Parameter auf dem Bildschirm ausgibt.&lt;br /&gt;
&#039;&#039;Tipp 1:&#039;&#039; Die Funktion main bekommt ihre Parameter als Array von Strings. Der Name des ersten übergebenen Parameters ist also args[0] .&lt;br /&gt;
&#039;&#039;Tipp 2:&#039;&#039; Die Parameter des Programms kannst du in der Run-Configuration einstellen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Autocompletion ===&lt;br /&gt;
* Lege eine neue Klasse &amp;quot;TinyObject&amp;quot; an, welche &#039;&#039;&#039;keine&#039;&#039;&#039; main Methode enthält.&lt;br /&gt;
* &amp;quot;TinyObject&amp;quot; soll drei Instanzvariablen enthalten. Wenn ein Objekt dieser Art erzeugt wird, sollen diese mit einem beliebigen Wert initialisiert werden.&lt;br /&gt;
* Erweitere &amp;quot;TinyObject&amp;quot; um eine Methode &amp;quot;void printYourselfAndThis(String text)&amp;quot;, die den übergebenen Text sowie den Inhalt der Instanzvariablen auf der Konsole ausgibt.&lt;br /&gt;
* Sieh dir an, was passiert, wenn du in dieser Funktion &amp;quot;this.&amp;quot; schreibst und anschließend kurz wartest oder die Autocompletion mit [Strg+Leerzeichen] aktivierst.&lt;br /&gt;
* Lege eine Instanzvariable &amp;quot;diesIstEinLangerName&amp;quot; an. Schreibe irgendwo in der Klasse &amp;quot;diesIst&amp;quot; und drücke [Strg+Leerzeichen]. &lt;br /&gt;
* Erzeuge in der &amp;quot;Spielwiese&amp;quot; ein &amp;quot;TinyObject&amp;quot; und teste deine Methode.&lt;br /&gt;
&lt;br /&gt;
=== Autokorrektur ===&lt;br /&gt;
* Baue Fehler in dein Programm ein (Semikolon löschen, Klammer löschen, Tippfehler) und sieh dir an, welche Korrekturvorschläge Eclipse anbietet. Spiele mit diesem Feature ein wenig herum. Du kannst Änderungen jederzeit rückgängig ([Strg+Z], Undo) machen.&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Beachte die &amp;quot;Problems&amp;quot;-Ansicht, sowie die Markierungen links und rechts vom Editorfenster. Manchmal muss man Änderungen allerdings erst speichern, damit die Anzeigen aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
*Unter &amp;quot;windows -&amp;gt; preferences -&amp;gt; java -&amp;gt; editor -&amp;gt; templates&amp;quot; findest du die Schlüsselwörter für alle Templates, die du in Eclipse mit [Schlüsselwort][Strg+Leerzeichen] einsetzen kannst. Probiere einige Schlüsselwörter, die dir bekannt vorkommen aus.&lt;br /&gt;
&lt;br /&gt;
=== Programmabbruch ===&lt;br /&gt;
* Lege eine Methode &amp;quot;void keepLooping()&amp;quot; an, welche eine Endlosschleife mit einer Konsolenausgabe (z.B. &amp;quot;still looping&amp;quot;) enthält. Führe diese Methode aus und brich die Ausführung mit dem roten Stop-Button ab.&lt;br /&gt;
&lt;br /&gt;
=== Navigieren im Projekt ===&lt;br /&gt;
* Sieh dir die &amp;quot;Outline&amp;quot;-Ansicht an und probiere aus, wie du mit ihr in deinen Klassen navigieren kannst.&lt;br /&gt;
* Halte die [Strg] Taste gedrückt und gehe mit der Maus über einen Funktionsaufruf. Klicke ihn an. Was ist passiert?&lt;br /&gt;
&#039;&#039;Tip:&#039;&#039; Am oberen Rand des Fensters gibt es gelbe Vorwärts- und Rückwärts-Knöpfe - mit ihnen kannst du wie in einem Web-Browser die Plätze, die du mit [Strg]-Klick angesprungen hast, wieder besuchen.&lt;br /&gt;
&lt;br /&gt;
=== Javadoc ===&lt;br /&gt;
* Kommentiere deinen beiden Funktionen mit Javadoc.&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; /**[Enter] in der Zeile vor einer Methode oder Klasse legt automatisch einen Javadoc-Rumpf mit allen benutzten Parametern an.&lt;br /&gt;
* Bewege den Cursor in deinem Hauptprogramm auf eine Stelle, an der du eine der kommentierten Funktionen verwendest, und sieh dir die Javadoc-Ansicht an.&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
&lt;br /&gt;
Du hast jetzt einige der kleinen Helfer kennengelernt, mit denen Eclipse dich beim Programmieren unterstützt. Übung im Umgang mit Eclipse bekommst du allerdings erst, wenn du es verwendest, wofür wir euch im Folgenden zwei Übungsaufgaben gebastelt haben. &lt;br /&gt;
Die Zeit hier im Tutorium wird vermutlich nicht ausreichen, um die Aufgeben fertig zu stellen, sie sollen nur eine Substanz bilden, an der ihr Eclipse ausprobieren könnt.&lt;br /&gt;
&lt;br /&gt;
Aufgabe 1 führt euch langsam durch ein kleines Projekt, bei dem ihr Gelegenheit habt, alle Features, die ihr eben kennengelernt habt, auszuprobieren. &lt;br /&gt;
&lt;br /&gt;
Aufgabe 2 ist ausschließlich für diejenigen, die schon einiges an Erfahrung in Java mitbringen und einfach nur ein wenig mit Eclipse programmieren wollen. &lt;br /&gt;
&lt;br /&gt;
Viel Spaß!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aufgabe1 (für alle) ===&lt;br /&gt;
&lt;br /&gt;
Für alle, die sie noch nicht kennen und alle, die sie noch einmal ordentlich schreiben wollen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; [[Javakurs2006/Rennschnecke| Die Rennschnecken]] &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufgabe 2 (für Experten) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cäsar-Chiffre&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im Folgenden soll ein Programm weitgehend selbstständig entwickelt werden. Lies dir das nötige Wissen zur [http://de.wikipedia.org/wiki/Caesar-Chiffre#Sicherheit Cäsar-Chiffre] im Web an und überleg dir selbst eine Struktur für dein Programm.&lt;br /&gt;
&lt;br /&gt;
Mache dir auch Gedanken darüber, wie du die einzelnen Teile frühzeitig testen kannst.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Erstelle ein Programm, das einen Text aus einer Datei einliest, mit einem Schlüssel (einer Zahl zwischen 1 und 25) durch eine [http://de.wikipedia.org/wiki/Caesar-Chiffre#Sicherheit Cäsar-Chiffre] verschlüsselt und in einer neuen Datei (z.B. mit anderer Endung) speichert.&lt;br /&gt;
#* Für mehr Komfort, aber nicht notwendig: Sowohl der Dateiname als auch der Schlüssel sollen über die Konsole eingegeben werden können.&lt;br /&gt;
#* &#039;&#039;&#039;Tipp:&#039;&#039;&#039; Das Programm wird einfacher, wenn man als erstes den Text in Kleinschreibung umwandelt. Sonderzeichen, Leerzeichen und Zahlen können unverändert übernommen werden.&lt;br /&gt;
#Erweitere dein Programm so, dass es einen Text entschlüsseln kann, der mit demselben Chiffrierverfahren verschlüsselt wurde. Der Schlüssel wird hierfür übergeben und der lesbare Text soll in einer separaten Datei gespeichert werden.&lt;br /&gt;
#Erweitere dein Programm so, dass es in der Lage ist, einen beliebigen mit einer [http://de.wikipedia.org/wiki/Caesar-Chiffre#Sicherheit Cäsar-Chiffre] verschlüsselten Text mit Hilfe von [http://de.wikipedia.org/wiki/H%C3%A4ufigkeitsanalyse Häufigkeitsanalyse] zu entschlüsseln, ohne den Schlüssel zu kennen. Gib auch den gefundenen Schlüssel aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Unsere Tutoren können dir bei allen auftretenden Javaproblemen helfen, wir können allerdings nicht garantieren, dass sie sich in ihrer Freizeit auch mit Kryptographie beschäftigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Verschlüsseln / Entschlüsseln&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
#Trage einen von dir verschlüsselten Text mit mind. 50 Zeichen hier im Wiki ein und verlinke ihn auf dieser Seite unter deinem Namen. Entschlüssle andere Texte, die hier verlinkt sind.&lt;br /&gt;
&lt;br /&gt;
Wenn du willst, kannst du deinen Chiffrieralgorithmus auch verändern oder einen anderen implementieren. Du solltest das aber im Link zu deinem verschlüsselten Texten aber auch kenntlich machen. Denke daran, dass du selbst in der Lage sein solltest, deine Texte bei gegebenem Schlüssel zu entschlüsseln ;)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Eclipsekurs 2006|Zurück zu Eclipse 2006]]&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Eclipsekurs_2006/Tag_1&amp;diff=7494</id>
		<title>Eclipsekurs 2006/Tag 1</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Eclipsekurs_2006/Tag_1&amp;diff=7494"/>
		<updated>2006-05-06T10:48:22Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Autocompletion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Erste Schritte ==&lt;br /&gt;
* Starte die Eclipse-Umgebung mit dem Kommando &#039;&#039;&#039;/home/pub/lib/eclipse/eclipse&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Projekt anlegen ===&lt;br /&gt;
* Erstelle ein Java-Projekt &amp;quot;eclipseTutorial&amp;quot; mit getrennten Ordnern für den Quellcode (&#039;&#039;src&#039;&#039;) und kompilierte class-Dateien (&#039;&#039;bin&#039;&#039;).&lt;br /&gt;
** Konfiguriere dabei Eclipse so, das es ab jetzt diese Einstellung als Standardwert verwendet.&lt;br /&gt;
&lt;br /&gt;
* Lege in diesem Projekt eine neue Klasse &amp;quot;Spielwiese&amp;quot; an, die eine &#039;&#039;main&#039;&#039;-Methode enthält.&lt;br /&gt;
* Erweitere die Klasse zu einem &amp;quot;Hello World&amp;quot;-Programm und führe dieses in Eclipse aus.&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Mit sysout [Strg+Leerzeichen] erzeugt die Eclipse-Autocompletion ein System.out.println();&lt;br /&gt;
&lt;br /&gt;
=== Aufruf mit Parametern ===&lt;br /&gt;
* Verändere das Programm so, dass es einen beim Start übergebenden Parameter auf dem Bildschirm ausgibt.&lt;br /&gt;
&#039;&#039;Tipp 1:&#039;&#039; Die Funktion main bekommt ihre Parameter als Array von Strings. Der Name des ersten übergebenen Parameters ist also args[0] .&lt;br /&gt;
&#039;&#039;Tipp 2:&#039;&#039; Die Parameter des Programms kannst du in der Run-Configuration einstellen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Autocompletion ===&lt;br /&gt;
* Lege eine neue Klasse &amp;quot;TinyObject&amp;quot; an, welche &#039;&#039;&#039;keine&#039;&#039;&#039; main Methode enthält.&lt;br /&gt;
* &amp;quot;TinyObject&amp;quot; soll drei Instanzvariablen enthalten. Wenn ein Objekt dieser Art erzeugt wird, sollen diese mit einem beliebigen Wert initialisiert werden.&lt;br /&gt;
* Erweitere &amp;quot;TinyObject&amp;quot; um eine Methode &amp;quot;void printYourselfAndThis(String text)&amp;quot;, die den übergebenen Text sowie den Inhalt der Klassenvariablen auf der Konsole ausgibt.&lt;br /&gt;
* Sieh dir an, was passiert, wenn du in dieser Funktion &amp;quot;this.&amp;quot; schreibst und anschließend kurz wartest oder die Autocompletion mit [Strg+Leerzeichen] aktivierst.&lt;br /&gt;
* Lege eine Klassenvariable &amp;quot;diesIstEinLangerName&amp;quot; an. Schreibe irgendwo in der Klasse &amp;quot;diesIst&amp;quot; und drücke [Strg+Leerzeichen]. &lt;br /&gt;
* Erzeuge in der &amp;quot;Spielwiese&amp;quot; ein &amp;quot;TinyObject&amp;quot; und teste deine Methode.&lt;br /&gt;
&lt;br /&gt;
=== Autokorrektur ===&lt;br /&gt;
* Baue Fehler in dein Programm ein (Semikolon löschen, Klammer löschen, Tippfehler) und sieh dir an, welche Korrekturvorschläge Eclipse anbietet. Spiele mit diesem Feature ein wenig herum. Du kannst Änderungen jederzeit rückgängig ([Strg+Z], Undo) machen.&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; Beachte die &amp;quot;Problems&amp;quot;-Ansicht, sowie die Markierungen links und rechts vom Editorfenster. Manchmal muss man Änderungen allerdings erst speichern, damit die Anzeigen aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
*Unter &amp;quot;windows -&amp;gt; preferences -&amp;gt; java -&amp;gt; editor -&amp;gt; templates&amp;quot; findest du die Schlüsselwörter für alle Templates, die du in Eclipse mit [Schlüsselwort][Strg+Leerzeichen] einsetzen kannst. Probiere einige Schlüsselwörter, die dir bekannt vorkommen aus.&lt;br /&gt;
&lt;br /&gt;
=== Programmabbruch ===&lt;br /&gt;
* Lege eine Methode &amp;quot;void keepLooping()&amp;quot; an, welche eine Endlosschleife mit einer Konsolenausgabe (z.B. &amp;quot;still looping&amp;quot;) enthält. Führe diese Methode aus und brich die Ausführung mit dem roten Stop-Button ab.&lt;br /&gt;
&lt;br /&gt;
=== Navigieren im Projekt ===&lt;br /&gt;
* Sieh dir die &amp;quot;Outline&amp;quot;-Ansicht an und probiere aus, wie du mit ihr in deinen Klassen navigieren kannst.&lt;br /&gt;
* Halte die [Strg] Taste gedrückt und gehe mit der Maus über einen Funktionsaufruf. Klicke ihn an. Was ist passiert?&lt;br /&gt;
&#039;&#039;Tip:&#039;&#039; Am oberen Rand des Fensters gibt es gelbe Vorwärts- und Rückwärts-Knöpfe - mit ihnen kannst du wie in einem Web-Browser die Plätze, die du mit [Strg]-Klick angesprungen hast, wieder besuchen.&lt;br /&gt;
&lt;br /&gt;
=== Javadoc ===&lt;br /&gt;
* Kommentiere deinen beiden Funktionen mit Javadoc.&lt;br /&gt;
&#039;&#039;Tipp:&#039;&#039; /**[Enter] in der Zeile vor einer Methode oder Klasse legt automatisch einen Javadoc-Rumpf mit allen benutzten Parametern an.&lt;br /&gt;
* Bewege den Cursor in deinem Hauptprogramm auf eine Stelle, an der du eine der kommentierten Funktionen verwendest, und sieh dir die Javadoc-Ansicht an.&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
&lt;br /&gt;
Du hast jetzt einige der kleinen Helfer kennengelernt, mit denen Eclipse dich beim Programmieren unterstützt. Übung im Umgang mit Eclipse bekommst du allerdings erst, wenn du es verwendest, wofür wir euch im Folgenden zwei Übungsaufgaben gebastelt haben. &lt;br /&gt;
Die Zeit hier im Tutorium wird vermutlich nicht ausreichen, um die Aufgeben fertig zu stellen, sie sollen nur eine Substanz bilden, an der ihr Eclipse ausprobieren könnt.&lt;br /&gt;
&lt;br /&gt;
Aufgabe 1 führt euch langsam durch ein kleines Projekt, bei dem ihr Gelegenheit habt, alle Features, die ihr eben kennengelernt habt, auszuprobieren. &lt;br /&gt;
&lt;br /&gt;
Aufgabe 2 ist ausschließlich für diejenigen, die schon einiges an Erfahrung in Java mitbringen und einfach nur ein wenig mit Eclipse programmieren wollen. &lt;br /&gt;
&lt;br /&gt;
Viel Spaß!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Aufgabe1 (für alle) ===&lt;br /&gt;
&lt;br /&gt;
Für alle, die sie noch nicht kennen und alle, die sie noch einmal ordentlich schreiben wollen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; [[Javakurs2006/Rennschnecke| Die Rennschnecken]] &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Aufgabe 2 (für Experten) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cäsar-Chiffre&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Im Folgenden soll ein Programm weitgehend selbstständig entwickelt werden. Lies dir das nötige Wissen zur [http://de.wikipedia.org/wiki/Caesar-Chiffre#Sicherheit Cäsar-Chiffre] im Web an und überleg dir selbst eine Struktur für dein Programm.&lt;br /&gt;
&lt;br /&gt;
Mache dir auch Gedanken darüber, wie du die einzelnen Teile frühzeitig testen kannst.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Erstelle ein Programm, das einen Text aus einer Datei einliest, mit einem Schlüssel (einer Zahl zwischen 1 und 25) durch eine [http://de.wikipedia.org/wiki/Caesar-Chiffre#Sicherheit Cäsar-Chiffre] verschlüsselt und in einer neuen Datei (z.B. mit anderer Endung) speichert.&lt;br /&gt;
#* Für mehr Komfort, aber nicht notwendig: Sowohl der Dateiname als auch der Schlüssel sollen über die Konsole eingegeben werden können.&lt;br /&gt;
#* &#039;&#039;&#039;Tipp:&#039;&#039;&#039; Das Programm wird einfacher, wenn man als erstes den Text in Kleinschreibung umwandelt. Sonderzeichen, Leerzeichen und Zahlen können unverändert übernommen werden.&lt;br /&gt;
#Erweitere dein Programm so, dass es einen Text entschlüsseln kann, der mit demselben Chiffrierverfahren verschlüsselt wurde. Der Schlüssel wird hierfür übergeben und der lesbare Text soll in einer separaten Datei gespeichert werden.&lt;br /&gt;
#Erweitere dein Programm so, dass es in der Lage ist, einen beliebigen mit einer [http://de.wikipedia.org/wiki/Caesar-Chiffre#Sicherheit Cäsar-Chiffre] verschlüsselten Text mit Hilfe von [http://de.wikipedia.org/wiki/H%C3%A4ufigkeitsanalyse Häufigkeitsanalyse] zu entschlüsseln, ohne den Schlüssel zu kennen. Gib auch den gefundenen Schlüssel aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Unsere Tutoren können dir bei allen auftretenden Javaproblemen helfen, wir können allerdings nicht garantieren, dass sie sich in ihrer Freizeit auch mit Kryptographie beschäftigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Verschlüsseln / Entschlüsseln&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
#Trage einen von dir verschlüsselten Text mit mind. 50 Zeichen hier im Wiki ein und verlinke ihn auf dieser Seite unter deinem Namen. Entschlüssle andere Texte, die hier verlinkt sind.&lt;br /&gt;
&lt;br /&gt;
Wenn du willst, kannst du deinen Chiffrieralgorithmus auch verändern oder einen anderen implementieren. Du solltest das aber im Link zu deinem verschlüsselten Texten aber auch kenntlich machen. Denke daran, dass du selbst in der Lage sein solltest, deine Texte bei gegebenem Schlüssel zu entschlüsseln ;)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Eclipsekurs 2006|Zurück zu Eclipse 2006]]&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Benutzer_Diskussion:Martin_H%C3%A4cker&amp;diff=5295</id>
		<title>Benutzer Diskussion:Martin Häcker</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Benutzer_Diskussion:Martin_H%C3%A4cker&amp;diff=5295"/>
		<updated>2006-04-06T07:15:18Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Danke für den Bindestrich!  --Jérôme&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Rennschnecke&amp;diff=7272</id>
		<title>Javakurs/Übungsaufgaben/Rennschnecke</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs/%C3%9Cbungsaufgaben/Rennschnecke&amp;diff=7272"/>
		<updated>2006-04-06T07:09:09Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Zusatz */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Rennschnecke ==&lt;br /&gt;
#Erstelle eine Klasse &amp;quot;Rennschnecke&amp;quot;&lt;br /&gt;
#:&lt;br /&gt;
#Rennschnecken sollen folgende Eigenschaften(Klassenvariablen) besitzen:&lt;br /&gt;
#* einen Namen&lt;br /&gt;
#* eine Rasse&lt;br /&gt;
#* eine Maximalgeschwindigkeit&lt;br /&gt;
#* die Schnecke soll wissen welchen Weg sie bereits zurück gelegt hat&lt;br /&gt;
#:&lt;br /&gt;
# Erstelle für die Klasse Schnecke einen Constructor, der den Klassenvariablen beim Erstellen einer neuen Instanz(Objekt zu dieser Klasse) Werte zuweist.&lt;br /&gt;
#:&lt;br /&gt;
#Lege für in der Klasse &amp;quot;Rennschnecke&amp;quot; eine Methode &amp;quot;krieche()&amp;quot; an, welche die Schnecke abhängig von ihrer Maximalgeschwindigkeit eine zufällige Strecke weiter bewegt.&lt;br /&gt;
#* Tipp: schaut euch die Methode Math.random() aus der Java API an.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennschnecke&amp;quot; eine Methode &amp;quot;String toString()&amp;quot; an, welche die Daten der Schnecke mit return als String zurückgibt.&lt;br /&gt;
#:&lt;br /&gt;
# Teste deine Klasse indem du probehalber ein Rennschneckenobjekt erzeugst und seine Daten auf der Console ausgibst. &lt;br /&gt;
#*Tipp:Verwende zum Ausgeben der Daten die toString() Methode der Rennschnecke.&lt;br /&gt;
#:&lt;br /&gt;
#:&lt;br /&gt;
== Rennen ==&lt;br /&gt;
&lt;br /&gt;
#Erstelle eine Klasse &amp;quot;Rennen&amp;quot;&lt;br /&gt;
#:&lt;br /&gt;
#Ein Rennen hat folgende Eigenschaften:&lt;br /&gt;
#*Einen Namen&lt;br /&gt;
#*Die Anzahl der teilnehmenden Schnecken&lt;br /&gt;
#*Die teilnemenden Schnecken selbst (z.B. in einer ArrayList)&lt;br /&gt;
#*die Länge der zu kriechenden Strecke&lt;br /&gt;
#:&lt;br /&gt;
#Überlege dir welche dieser Wetrte bereits im Constructor gesetzt werden sollten.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;void addRennschnecke(Rennschnecke neueSchnecke)&amp;quot; an, welche dem Rennen eine Schnecke hinzufügt.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;void removeRennschnecke(String name)&amp;quot; an, welche eine Schnecke aus dem Rennen entfernt.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;String toString()&amp;quot; an, welche die Daten des Rennens mit return als String zurückgibt. &lt;br /&gt;
#*Tipp: Um die Daten der beteiligten Schnecken zurückzugeben könnt ihr deren toString() Funktion benutzen.&lt;br /&gt;
#:&lt;br /&gt;
#Teste deine Klasse vom Hauptprogramm aus!&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;Rennschnecke ermittleGewinner()&amp;quot; an, welche &#039;&#039;&#039;null&#039;&#039;&#039; zurückliefert wenn noch keine der Teilnemenden Schnecken das Ziel erreicht und anderenfalls die &lt;br /&gt;
#:Gewinnerschnecke zurückgibt.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;void lasseSchneckenKriechen()&amp;quot; an, welche alle teilnemenden Schnecken einmal kriechen lässt.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Rennen&amp;quot; eine Methode &amp;quot;void durchfuehren()&amp;quot; an, welche so lange lasseSchneckenKriechen() aufruft, bis eine der Schnecken das Ziel erreicht hat.&lt;br /&gt;
#* Tipp: ob eine Schnecke im Ziel angekommen ist kannst du mit deiner Methode ermittleGewinner() herrausfinden.&lt;br /&gt;
&lt;br /&gt;
== Wettbüro ==&lt;br /&gt;
&lt;br /&gt;
#Erstelle eine Klasse Wettbuero.&lt;br /&gt;
#:&lt;br /&gt;
#:Ein Wettbuero hat die folgenden Eigenschaften:&lt;br /&gt;
#* es weiß für welches Rennen es seine Wetten entgegennimmt&lt;br /&gt;
#* es verfügt über eine Liste (z.B. eine Arraylist) von angenommenden Wetten&lt;br /&gt;
#* es hat einen festen Faktor, mit welchem Wetteinsätze bei einem Gewinn multipliziert werden&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Wettbuero&amp;quot; eine Methode &amp;quot;wetteAnnehmen(String schneckenName, int wetteinsatz, String spieler)&amp;quot; an, welche eine Wette auf eine Schnecke für das Rennen das von dem Büro bearbeitet wird entgegennimmt.&lt;br /&gt;
#* Um die einzelnden Wetten speichern zu können sollten ihre Daten in eigenden Objekten der Klasse &amp;quot;Wette&amp;quot; gespeichert werden. Erstellt euch diese Klasse selbst. &lt;br /&gt;
#* Tipp: denkt an toString()&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Wettbuero&amp;quot; eine Methode &amp;quot;rennenDurchfueren()&amp;quot; an, welche das betreute Rennen durchfuert.&lt;br /&gt;
#:&lt;br /&gt;
#Lege in der Klasse &amp;quot;Wettbuero&amp;quot; eine Methode &amp;quot;toString()&amp;quot; an, welche die Daten des Wettbueros, die Daten des Rennens sowie sämtliche abgeschlossende Wetten als String zurückgibt.&lt;br /&gt;
#:&lt;br /&gt;
# Teste dein Programm!&lt;br /&gt;
#:&lt;br /&gt;
# Tausche die Klasse Rennen mit einem Komilitonen der ebenfalls bereits fertig ist.&lt;br /&gt;
#* Sollten eure Programme immer noch laufen?&lt;br /&gt;
#* Treten Fehler auf? Wenn ja: ändert eure Programme so ab das ihr problemlos Klassen austauschen könnt.&lt;br /&gt;
&lt;br /&gt;
== Zusatz ==&lt;br /&gt;
&lt;br /&gt;
Es gibt noch ein paar Dinge die in unserem Wettbüro nicht so laufen wie sie sollten. &lt;br /&gt;
Macht sie besser.&lt;br /&gt;
&lt;br /&gt;
* Die selbe Schnecke kann in ein Rennen zwei mal eingetragen werden&lt;br /&gt;
* es können negative Wetten abgeschlossen werden.&lt;br /&gt;
* gehen zwei Schnecken gleichzeitig durchs Ziel wird die Schnecke ausgegeben auf die die Suche nach dem Gewinner zuerst stößt. Das ist ganz schön ungerecht.&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006&amp;diff=6569</id>
		<title>Javakurs2006</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006&amp;diff=6569"/>
		<updated>2006-04-05T11:17:20Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
Salve!&lt;br /&gt;
&lt;br /&gt;
Herzlich Willkommen beim Java Kurs der Freitagsrunde!&lt;br /&gt;
Dieser Kurs richtet sich an Studenten die gerade mit dem zweiten Semester beginnen. Das heißt, wir erwarten Grundkenntnisse in Opal - sonst aber nichts.&lt;br /&gt;
&lt;br /&gt;
Dieser Kurs wird von [[Javakurs2006/Veranstalter | Freiwilligen Studenten und Wissenschaftlichen Mitarbeitern]] in Ihrer Freizeit angeboten - zeigt uns also  wenn es euch gefällt. :)&lt;br /&gt;
&lt;br /&gt;
Der Kurs beginnt am 3.4.2006 und geht bis zum 7.4.2006.&lt;br /&gt;
&lt;br /&gt;
Wir haben die [http://docs.freitagsrunde.org/javakurs/Raeume_Teilnehmer_sort.pdf Zuordnung der Teilnehmer auf die Räume] zentral vorgenommen - und [http://docs.freitagsrunde.org/javakurs/Raeume_Teilnehmer_sort.pdf hier abgelegt].&lt;br /&gt;
&lt;br /&gt;
Wir versuchen außerdem, häufige Fehler auf folgender Seite zusammenzufassen:  [[Javakurs2006/Probleme]] und bieten für die einzelnen Themen [[Javakurs2006/Uebungsaufgaben| Wiederholungsaufgaben]] an.&lt;br /&gt;
&lt;br /&gt;
Ausserdem haben wir für euch eine [[Javakurs2006/Java_Kurzreferenz| Java-Kurzreferenz]] zusammengestellt.&lt;br /&gt;
&lt;br /&gt;
Bücher die sich lohnen: [http://www.galileocomputing.de/openbook/javainsel5/ Java ist auch eine Insel] [http://www.codeguru.com/java/tij/tij_c.shtml Thinking in Java] ([http://mindview.net/Books/DownloadSites/ als zip])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tagesplan ==&lt;br /&gt;
Wir beginnen immer Morgens  um 9:00 s.t. im MA043 - kommt also bitte morgens immer Pünktlich. Die Tutorien danach finden im Franklin-Gebäude im 5. und 6. Stock statt. In welchem Raum ihr eingeteilt seid, hängt im Vorlesungssaal aus.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;2&amp;quot;&lt;br /&gt;
 |- bgcolor=&amp;quot;#E0E0E0&amp;quot;&lt;br /&gt;
 !von&lt;br /&gt;
 !bis&lt;br /&gt;
 !was?&lt;br /&gt;
 |- bgcolor=&amp;quot;#F0F0F0&amp;quot;&lt;br /&gt;
 |9:00 s.t.&lt;br /&gt;
 |9:45&lt;br /&gt;
 |Vorlesung&lt;br /&gt;
 |- bgcolor=&amp;quot;#F8F8F8&amp;quot;&lt;br /&gt;
 |10:00&lt;br /&gt;
 |12:00&lt;br /&gt;
 |Übung&lt;br /&gt;
 |- bgcolor=&amp;quot;#F0F0F0&amp;quot;&lt;br /&gt;
 |12:00&lt;br /&gt;
 |12:45&lt;br /&gt;
 |Mittagspause&lt;br /&gt;
 |- bgcolor=&amp;quot;#F8F8F8&amp;quot;&lt;br /&gt;
 |13:00 s.t.&lt;br /&gt;
 |13:45&lt;br /&gt;
 |Vorlesung&lt;br /&gt;
 |- bgcolor=&amp;quot;#F0F0F0&amp;quot;&lt;br /&gt;
 |14:00&lt;br /&gt;
 |16:00&lt;br /&gt;
 |Übung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Am letzten Tag (Donnerstag) wird es nachmittags keine Vorlesung geben, sonder das Projekt beginnt gleich.&lt;br /&gt;
&lt;br /&gt;
== Einzelne Tage ==&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;2&amp;quot;&lt;br /&gt;
 |- bgcolor=&amp;quot;#E0E0E0&amp;quot;&lt;br /&gt;
 !Tag Nr.&lt;br /&gt;
 !Vormittag&lt;br /&gt;
 !Nachmittag&lt;br /&gt;
 |- bgcolor=&amp;quot;#F0F0F0&amp;quot;&lt;br /&gt;
 |[[{{PAGENAME}}/Tag 1|Tag 1]]&lt;br /&gt;
 |Hello, World!&lt;br /&gt;
 |Methoden und Schleifen&lt;br /&gt;
 |- bgcolor=&amp;quot;#F8F8F8&amp;quot;&lt;br /&gt;
 |[[{{PAGENAME}}/Tag 2|Tag 2]]&lt;br /&gt;
 |Modularisierung mit Klassen und Objekten&lt;br /&gt;
 |OO-Vertiefung und Klassenbibliothek&lt;br /&gt;
 |- bgcolor=&amp;quot;#F0F0F0&amp;quot;&lt;br /&gt;
 |[[{{PAGENAME}}/Tag 3|Tag 3]]&lt;br /&gt;
 |Programmieren&lt;br /&gt;
 |Programmieren&lt;br /&gt;
 |- bgcolor=&amp;quot;#F8F8F8&amp;quot;&lt;br /&gt;
 |[[{{PAGENAME}}/Tag 4|Tag 4]]&lt;br /&gt;
 |Programmieren&lt;br /&gt;
 |Programmieren&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bei Problemen ==&lt;br /&gt;
Wenn Du:&lt;br /&gt;
* noch nicht bezahlt oder noch keine Bestätigung von uns erhalten (bitte Bankbeleg im Zweifelsfall nicht vergessen!)&lt;br /&gt;
* nicht weißt in welchem Raum dein Tutorium stattfindet / wo du hinmusst&lt;br /&gt;
&lt;br /&gt;
Dann kann dir am ersten Tag (Montag) im FR5046 den ganzen Tag geholfen werden. Dorthin könnt ihr immer gehen bzw. anrufen unter der Nummer: 030-314-21386. An allen weiteren Tagen wird der Raum auf jeden Fall während der Mittagspause (12:00 - 12:45), besetzt sein - probieren kannst du es aber immer. Wir sind aber auch rund um die Uhr unter der email-Adresse javakurs06@freitagsrunde.org erreichbar.&lt;br /&gt;
&lt;br /&gt;
Wenn du:&lt;br /&gt;
* Keinen Account hier auf den Rechnern hast&lt;br /&gt;
* Probleme mit dem Einloggen hast&lt;br /&gt;
Dann kann dir der IRB helfen. Dazu gehe zuerst ins Sekretariat (5091). Wenn dort niemand ist, dann findet ihr im 5093 Hilfe.&lt;br /&gt;
&lt;br /&gt;
== Getränke ==&lt;br /&gt;
Von dem Geld das ihr uns Überwiesen habt haben wir Getränke besorgt. Damit kein Ärger entsteht (z.B. mit dem Rechnerbetrieb) haltet ihr euch bitte an diese Regeln:&lt;br /&gt;
* Getränkeausgabe ist jeden Tag während der Mittagspause im FR5046 und dem Nachbarraum&lt;br /&gt;
* Bitte keine Flaschen in die Rechnerräume mitnehmen. Wenn doch, dann bitte &#039;&#039;&#039;verschlossen&#039;&#039;&#039; auf den Boden stellen.&lt;br /&gt;
** Wenn jemand vom Rechnerbetrieb kommt und über irgend etwas meckert, dann habt ihr dem Folge zu leisten. (Nur zur erklärung: Wenn der Rechnerbetrieb sauer ist, können wir den Kurs nicht durchführen!)&lt;br /&gt;
* Gebt die Flaschen bitte abends ausgetrunken wieder bei uns ab. Wir geben die Flaschen ohne Pfand aus und wollen sie daher auch wieder haben!&lt;br /&gt;
* Nur eine Flasche pro Tag und pro Teilnehmer -&amp;gt; Wenn jemand anders sich schamlos bedient, dann weißt ihn doch bitte freundlich darauf hin das andere auch gerne etwas hätten.&lt;br /&gt;
* Gebt bitte auf die Flaschen, die Rechner und die Nerven eurer Mitstudenten acht - von allem ist nur sehr wenig da! :-)&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_3&amp;diff=7061</id>
		<title>Javakurs2006/Tag 3</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_3&amp;diff=7061"/>
		<updated>2006-04-05T08:01:05Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Javakurs2006| &amp;lt;- Zurück zur Übersicht]]&lt;br /&gt;
&lt;br /&gt;
Ab heute verändert sich der Tagesplan - wir veranstalten jetzt Vor- und Nachmittags Übungen.&lt;br /&gt;
&lt;br /&gt;
* Heute morgen sind zuerst restlichen Aufgaben von [http://docs.freitagsrunde.org/javakurs/blatt03.pdf Blatt 3] dran.&lt;br /&gt;
* Eine Kurzreferenz für Java [[Benutzer:Grey/Javakurzreferenz| ist seit gestern Online]].&lt;br /&gt;
* Wir haben ein [[Javakurs2006/Uebungsaufgaben| größeres Angebot an Beispiel-Aufgaben]] um bestimmte Themengebiete zu wiederholen. Diese Aufgaben sind nicht dafür da das man sie von vorne nach hinten durcharbeitet, sondern damit ihr euch ein Gebiet heraussucht und &lt;br /&gt;
* [http://docs.freitagsrunde.org/javakurs/AufgabenTDDv2.pdf Fortgeschrittene Aufgaben] für leute die sich für Test-Driven-Development interessieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Javakurs2006| &amp;lt;- Zurück zur Übersicht]]&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Diskussion:Hauptseite&amp;diff=1989</id>
		<title>Diskussion:Hauptseite</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Diskussion:Hauptseite&amp;diff=1989"/>
		<updated>2006-04-05T06:36:21Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: s/Javakurs Website/Javakurs-Website/ bitte tun&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;margin:0; border:1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#efefef; align:left;&amp;quot;&amp;gt;&lt;br /&gt;
=== Thementemplates ===&lt;br /&gt;
Zum ändern der einzelnen Themenboxen könnt ihr die Templates unter folgenden Links verwenden&lt;br /&gt;
*[[Vorlage:HauptseiteWillkommenBox | Willkommenbox]]&lt;br /&gt;
*[[Vorlage:HauptseiteHinweiseBox | Hinweisebox]]&lt;br /&gt;
*[[Vorlage:HauptseiteNewsBox | Newsbox]]&lt;br /&gt;
*[[Vorlage:HauptseiteWasWikiBietetBox | &amp;quot;Was euch dieses Wiki bietet&amp;quot;]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
kleiner test...&lt;br /&gt;
&lt;br /&gt;
Wie läuft das hier eigentlich mit der Rechtschreibung? Also &amp;quot;alt&amp;quot; oder &amp;quot;neu&amp;quot; oder &amp;quot;jeder so, wie er gerne möchte&amp;quot;? Eigentlich ist mir das ziemlich egal, ich finds nur halt etwas unglücklich, wenn in einem Text &amp;quot;dass&amp;quot; erst mehrfach mit &amp;quot;ss&amp;quot; und zwischendurch immer wieder mit &amp;quot;ß&amp;quot; geschrieben wird... -- [[Benutzer:FelixBrossmann|FelixBrossmann]]&lt;br /&gt;
&lt;br /&gt;
:Also ich schreibe so wie ich es in der Schule gelernt habe, so richtig schön nach der alten Rechtschreibung und &amp;quot;daß&amp;quot; natürlich ohne &amp;quot;ss&amp;quot;. :-) Aber Du hast natürlich recht, sieht ein wenig komisch aus, wenn auf einer Seite alte und neue Rechtschreibung gemischt wird. Dies global im ganzen Wiki einheitlich zu gestalten dürfte recht schwer werden, aber innerhalb eines Artikels sollte es schon möglichst konsistent sein (also entweder alles nach der alten oder neuen Rechtschreibung).&lt;br /&gt;
&lt;br /&gt;
:Letztlich bleibt es jedem selbst überlassen, irgendwelche Regeln werden wir nicht vorgeben. --[[Benutzer:Thomas|Thomas]] 22:12, 27. Okt 2004 (CEST)&lt;br /&gt;
&lt;br /&gt;
:Meine Rechtschreibung ist nicht so toll - daher bin ich sehr dafür zu haben das jeder der einen findet den einfach behält und korrigiert. Einwände? -- [[Benutzer:Martin Häcker|Martin Häcker]] 15:47, 10. Dez 2004 (CET)&lt;br /&gt;
&lt;br /&gt;
== Formatierungen ==&lt;br /&gt;
&lt;br /&gt;
Der Source-Code der Seiten die ein Boxen-Layout verwenden ist grausig. Ich bin dafür das wir die verschiednen &amp;quot;box-formate&amp;quot; die wir im Wiki verwenden in eine CSS-Datei auslagern, da ich glaube das das echt helfen könnte. Ausserdem müssen wir die Boxen nicht ständig neu per css-gestalten und können die so im wiki einheitlich &amp;quot;einfärben&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Wenn keiner einwände hat würde ich das nach weihnachten mal angehen. -- [[Benutzer:Martin Häcker|Martin Häcker]] 06:25, 11. Dez 2004 (CET)&lt;br /&gt;
&lt;br /&gt;
==Interwiki==&lt;br /&gt;
Wenn jemand folgende Datensätze in die MySQL-Tabelle &amp;lt;u&amp;gt;interwiki&amp;lt;/u&amp;gt; einfügen würde, könnte man die Interwiki-Links nutzen. Das würde z.B. im Artikel [[Geschichte der Fakultät]] den ein oder anderen Link direkt anklickbar machen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO `interwiki` VALUES (&#039;de&#039;, &#039;http://de.wikipedia.org/wiki/$1&#039;, 0);&lt;br /&gt;
INSERT INTO `interwiki` VALUES (&#039;en&#039;, &#039;http://en.wikipedia.org/wiki/$1&#039;, 0);&lt;br /&gt;
INSERT INTO `interwiki` VALUES (&#039;fr&#039;, &#039;http://fr.wikipedia.org/wiki/$1&#039;, 0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eventuell heißt die Tabelle auch PRAEFIX_interwiki o.ae.&lt;br /&gt;
[[Benutzer:Calmoxis|Calmoxis]] 16:29, 12. Sep 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
: Calmoxis: Bitte wende dich an Thomas, unseren Wiki-Sysop. Hilfreich wäre allerdings zu wissen, was das genau bringen würde. --[[Benutzer:Felix|Felix]] 21:55, 17. Sep 2005 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Bücherbörse ==&lt;br /&gt;
&lt;br /&gt;
Hi leute&lt;br /&gt;
&lt;br /&gt;
wollt ma fragen, ob jemand das buch &amp;quot;funktionale programmierung&amp;quot; gebraucht hat und verkaufen kann. die 30 € sind ehrlichgesagt teuer.&lt;br /&gt;
&lt;br /&gt;
falls ihr nicht genau wisst welches buch ich meine [http://www.amazon.de/exec/obidos/ASIN/3540436219/qid=1130347473/sr=8-1/ref=sr_8_xs_ap_i1_xgl/028-2955434-3257348 dann hier klicken]&lt;br /&gt;
&lt;br /&gt;
: jaaaaaa? Wer will das Buch denn kaufen? --[[Benutzer:Mutax|mutax]] 20:38, 3. Nov 2005 (CET)&lt;br /&gt;
&lt;br /&gt;
:::Das Buch gibt es gebraucht ab 18 Euro bei [http://www.abebooks.de/servlet/SearchResults?y=0&amp;amp;tn=funktionale+Programmierung&amp;amp;x=0&amp;amp;sortby=3 Abebooks] oder [http://www.zvab.com/ ZVAB]. [[Benutzer:Calmoxis|Calmoxis]] 17:53, 8. Nov 2005 (CET)&lt;br /&gt;
&lt;br /&gt;
==s/Javakurs Webseite/Javakurs-Webseite/==&lt;br /&gt;
&lt;br /&gt;
Bitte!  Danke! --Jérôme&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Java_Kurzreferenz&amp;diff=7235</id>
		<title>Javakurs2006/Java Kurzreferenz</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Java_Kurzreferenz&amp;diff=7235"/>
		<updated>2006-04-05T06:30:16Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* while-Schleife */ Korrekturen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier befindet sich eine kleine &#039;&#039;&#039;Referenz für Java&#039;&#039;&#039; speziell für den Javakurs der Freitagsrunde.&lt;br /&gt;
&lt;br /&gt;
== Kommentare ==&lt;br /&gt;
Ein &#039;&#039;&#039;Kommentar&#039;&#039;&#039; ist ein Abschnitt des Java-Codes, der vom Java-Compiler ignoriert wird.  Man kann in ein Kommentar also schreiben was man will.  Kommentare sind nützlich, um den Quellcode zu dokumentieren.  &lt;br /&gt;
&lt;br /&gt;
In Java gibt es zwei Arten von Kommentaren: &lt;br /&gt;
&lt;br /&gt;
===Kommentare über eine Zeile===&lt;br /&gt;
&lt;br /&gt;
 // Diese ganze Zeile wird vom Compiler ignoriert.&lt;br /&gt;
 int x= 5;  // Dieser  Kommentar beginnt mit »//«.  Alles davor wird vom Compiler nicht ignoriert.&lt;br /&gt;
&lt;br /&gt;
===Kommentare über mehrere Zeilen===&lt;br /&gt;
&lt;br /&gt;
 /* Dieser &lt;br /&gt;
    Kommentar&lt;br /&gt;
    erstreckt &lt;br /&gt;
    sich &lt;br /&gt;
    über&lt;br /&gt;
    mehrere&lt;br /&gt;
    Zeilen.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Zum Vergleich:  in Opal werden Kommentare mit -- eingeführt.&lt;br /&gt;
&lt;br /&gt;
== Datentypen (Variablen) ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;80%&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#F9F9F9; font-size:95%; empty-cells:show;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Typ &lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Speicherbedarf&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Bereich&lt;br /&gt;
|- &lt;br /&gt;
|int&lt;br /&gt;
|4 Byte&lt;br /&gt;
| -2.147.483.648 bis 2.147.483.647&lt;br /&gt;
|- &lt;br /&gt;
|short&lt;br /&gt;
|2 Byte&lt;br /&gt;
| -32.768 bis 32.787&lt;br /&gt;
|- &lt;br /&gt;
|long&lt;br /&gt;
|8 Byte&lt;br /&gt;
| -9.223.372.036.854.775.808L bis 9.223.372.036.854.775.807L&lt;br /&gt;
|- &lt;br /&gt;
|byte&lt;br /&gt;
|1 Byte&lt;br /&gt;
| -128 bis 127&lt;br /&gt;
|- &lt;br /&gt;
|float&lt;br /&gt;
|4 Byte&lt;br /&gt;
| +/-3,40282347E+38F&lt;br /&gt;
|- &lt;br /&gt;
|double&lt;br /&gt;
|8 Byte&lt;br /&gt;
| +/-1,79769313486231570E+308&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Boolsche Operatoren ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;80%&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#F9F9F9; font-size:95%; empty-cells:show;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Operator&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Beispiel&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Ergebnis des Beispiels&lt;br /&gt;
|- &lt;br /&gt;
| ==  &lt;br /&gt;
&#039;&#039;(gleich)&#039;&#039;&lt;br /&gt;
| 4 == 9&lt;br /&gt;
| false&lt;br /&gt;
|-&lt;br /&gt;
| !=  &lt;br /&gt;
&#039;&#039;(ungleich)&#039;&#039;&lt;br /&gt;
| 4 != 8&lt;br /&gt;
| true&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;&amp;amp;  &lt;br /&gt;
&#039;&#039;(logisches UND)&#039;&#039;&lt;br /&gt;
| false &amp;amp;&amp;amp; true&lt;br /&gt;
| false, es wird erst der linke Ausdruck ausgewertet. Wenn die Auswertung false ergibt, wird der rechte Ausdruck nicht mehr geprüft, da das Ergebnis nicht mehr true werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;  &lt;br /&gt;
&#039;&#039;(logisches ODER)&#039;&#039;&lt;br /&gt;
| true &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; false&lt;br /&gt;
| true,  es wird erst der linke Ausdruck ausgewertet. Wenn die Auswertung true ergibt, wird der rechte Ausdruck nicht mehr geprüft, da das Ergebnis nicht mehr false werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;, &amp;lt;=, &amp;gt;, &amp;gt;=, &amp;lt;&amp;gt;&lt;br /&gt;
| 1 &amp;lt; 3  &#039;&#039;(hier exempalrisch nur eins)&#039;&#039;&lt;br /&gt;
| true&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bitoperatoren ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;80%&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#F9F9F9; font-size:95%; empty-cells:show;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Operator&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Beschreibung&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;&lt;br /&gt;
| AND&lt;br /&gt;
| Wie das logische UND, jedoch werden auf jeden Fall beide Seiten ausgewertet.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| OR&lt;br /&gt;
| Wie das logische ODER, jedoch werden auf jeden Fall beide Seiten ausgewertet.&lt;br /&gt;
|-&lt;br /&gt;
| ^&lt;br /&gt;
| XOR&lt;br /&gt;
| XOR halt.&lt;br /&gt;
|-&lt;br /&gt;
| ~&lt;br /&gt;
| NOT&lt;br /&gt;
| Negation des Wertes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konstanten ==&lt;br /&gt;
* In Java werden Konstanten mit dem Schlüsselwort &#039;&#039;&#039;final&#039;&#039;&#039; bezeichnet. In Java gibt es die Konvention Konstanten komplett groß zu schreiben:&lt;br /&gt;
&lt;br /&gt;
 final double PI = 3.14;&lt;br /&gt;
&lt;br /&gt;
== Zuweisungen und Initialisierungen ==&lt;br /&gt;
Wenn man eine Variable erstellt und sie mit Werten füllen will, wird man auf folgende Syntax stoßen:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;Datentyp&#039;&#039; Variablenname = &#039;&#039;Initialisierungswert&#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei Möglichkeiten diese Aktion durchzuführen:&lt;br /&gt;
* lange Variante:&lt;br /&gt;
 int zahl;&lt;br /&gt;
 zahl = 23;&lt;br /&gt;
&lt;br /&gt;
* kurze Variante:&lt;br /&gt;
 int zahl = 23;&lt;br /&gt;
&lt;br /&gt;
== if-Anweisung ==&lt;br /&gt;
* Die einfachste Variante:&lt;br /&gt;
&lt;br /&gt;
 if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;	&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* Zusätlich hat diese Variante einen alternativen Anweisungsblock. Wenn &#039;&#039;condition&#039;&#039; nicht erfüllt gehe in den &#039;&#039;else&#039;&#039;-Zweig und führe dort die Anweisungen aus.&lt;br /&gt;
&lt;br /&gt;
 if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;	&lt;br /&gt;
 } else {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
 }&lt;br /&gt;
	&lt;br /&gt;
* Natürlich lassen sich beide Varianten schachteln. Man kann also auf zwei Bedingungen prüfen und bei nicht Eintreffen in den &#039;&#039;else&#039;&#039;-Zweig gehen.&lt;br /&gt;
		&lt;br /&gt;
 if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;	&lt;br /&gt;
 } else if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;			&lt;br /&gt;
 } else {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;		&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= for-Schleife =&lt;br /&gt;
* Um über Array&#039;s zu wandern bietet sich die for-Schleife an. Als erstes in der Klammer muß eine Laufvariable deklariert und mit einem Wert initialisiert werden (hier int i= 0). Danach muß eine Bedingung erfüllen, um festzulegen bis wann die Schleife ausgeführt wird (i &amp;lt; 10). Als letztes muß die Laufvariable verändert werden, so daß irgendwann der Abbruch eintritt (i++).&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
 &lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== while-Schleife ==&lt;br /&gt;
* Die while-Schleife wird meistens dafür benutzt, Anweisungen auszuführen bis irgendetwas eintrifft (z.B. EOF -End Of File). Für Arrays sollte man die for-Schleife nehmen. Die while-Schleife lässt sich auch als for-Schleife schreiben.&lt;br /&gt;
&lt;br /&gt;
 while (condition) {&lt;br /&gt;
     &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== switch-case ==&lt;br /&gt;
* Wenn man verschiedene Werte abfangen möchte, wie zum Beispiel verschiedene Zahlen (bei einem Menü). Gehen wir mal davon aus, daß wir drei Menüeinträge haben: &lt;br /&gt;
# &#039;&#039;1&#039;&#039;&lt;br /&gt;
# &#039;&#039;2&#039;&#039;&lt;br /&gt;
# &#039;&#039;0&#039;&#039; &lt;br /&gt;
&#039;&#039;1&#039;&#039; gibt die Zahl &#039;&#039;&#039;1&#039;&#039;&#039;, &#039;&#039;2&#039;&#039; gibt die Zahl &#039;&#039;&#039;2&#039;&#039;&#039; aus und &#039;&#039;0&#039;&#039; beendet das Programm, dann ist key zum Beispiel ein &#039;&#039;&#039;int&#039;&#039;&#039; und &#039;&#039;&#039;value&#039;&#039;&#039; würde den einzelnen Menüpunkten entsprechen. Das &#039;&#039;break&#039;&#039; bewirkt ein raussprigen aus dem switch-Konstrukt. Würde man das &#039;&#039;break&#039;&#039; weglassen, würden sämtliche Anweisungen die direkt darunter folgen, ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
 switch (key) {&lt;br /&gt;
    case value: {&lt;br /&gt;
       &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
       break;&lt;br /&gt;
    }&lt;br /&gt;
    default: {&lt;br /&gt;
       &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
       break;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Grundgerüst ==&lt;br /&gt;
&lt;br /&gt;
Da der Programmierer vom Kopieren lebt, schreibt er einmal eine Schablone und benutzt sie immer wieder, frei nach dem Motto: Man muß das Rad nicht zweimal erfinden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So sieht zum Beispiel ein simples Javaprogramm ohne Handlung aus:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 public class Klassenname {&lt;br /&gt;
 &lt;br /&gt;
 	/**&lt;br /&gt;
 	 * @param args&lt;br /&gt;
 	 */&lt;br /&gt;
 	public static void main(String[] args) {&lt;br /&gt;
 		// TODO Anweisungen&lt;br /&gt;
 &lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erläuterungen:&#039;&#039;&#039;&lt;br /&gt;
@param ist für das Dokumentationssystem Javadoc, wird im Javakurs vielleicht angesprochen, sollte aber erstmal zweitrangig sein. Dennoch ist Dokumentation wichtiger als der eigentliche Code und deshalb hier erwähnt.&lt;br /&gt;
&lt;br /&gt;
== Funktion (Methoden) ==&lt;br /&gt;
In Java programmiert man meistens Objektorientiert, es sei denn man belegt Info2. Funktionen heißen bei Java Methoden und Methoden sind Objekten zugeordnet, es sei denn man programmiert nicht Objektorientiert.&lt;br /&gt;
Eine Methode hat immer folgenden Aufbau:&lt;br /&gt;
&lt;br /&gt;
 Spezialoption &#039;&#039;Veröffentlichungsart&#039;&#039; &#039;&#039;&#039;Rückgabewert&#039;&#039;&#039; Funktionsname &#039;&#039;&#039;(&#039;&#039;&#039; Parametertyp &#039;&#039;Parametername&#039;&#039; &#039;&#039;&#039;)&#039;&#039;&#039; {&lt;br /&gt;
 &lt;br /&gt;
    Methodenrumpf_mit_Anweisungen;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Spezialoption:&lt;br /&gt;
* static&lt;br /&gt;
* final&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Veröffentlichungsart&#039;&#039;:&lt;br /&gt;
* public&lt;br /&gt;
* protected&lt;br /&gt;
* private&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rückgabewert&#039;&#039;&#039;:&lt;br /&gt;
* sämtliche oben aufgeführte Datentypen &lt;br /&gt;
* eigene Datentypen&lt;br /&gt;
&lt;br /&gt;
Funktionsname:&lt;br /&gt;
* einen für die Funktion bezeichnenden Namen aus Buchstaben, Zahlen und dem Underscore ( &#039;&#039;_&#039;&#039; )&lt;br /&gt;
* darf nicht mit eine Zahl beginnen&lt;br /&gt;
&lt;br /&gt;
Parametertyp:&lt;br /&gt;
* wie &#039;&#039;&#039;Rückgabewert&#039;&#039;&#039;, siehe oben&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Parametername&#039;&#039;:&lt;br /&gt;
* wie Funtionsname, siehe oben&lt;br /&gt;
&lt;br /&gt;
== Ausgabe ==&lt;br /&gt;
* Um Fehler finden zu können oder Ausgaben auf der Konsole zu machen, gibt es in Java &#039;&#039;print&#039;&#039;-Funktionen:&lt;br /&gt;
&lt;br /&gt;
 System.out.print(&amp;quot;Irgend ein String.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Gibt &#039;&#039;Irgend ein String.&#039;&#039; auf der Konsole aus ohne einen Zeilenumbruch.&lt;br /&gt;
&lt;br /&gt;
 System.out.println(&amp;quot;Noch ein String.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Gibt &#039;&#039;Noch ein String.&#039;&#039; auf der Konsole aus allerdings diesmal mit einem Zeilenumbruch.&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Java_Kurzreferenz&amp;diff=7234</id>
		<title>Javakurs2006/Java Kurzreferenz</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Java_Kurzreferenz&amp;diff=7234"/>
		<updated>2006-04-05T06:25:25Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Kommentare */ Vereinfachung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier befindet sich eine kleine &#039;&#039;&#039;Referenz für Java&#039;&#039;&#039; speziell für den Javakurs der Freitagsrunde.&lt;br /&gt;
&lt;br /&gt;
== Kommentare ==&lt;br /&gt;
Ein &#039;&#039;&#039;Kommentar&#039;&#039;&#039; ist ein Abschnitt des Java-Codes, der vom Java-Compiler ignoriert wird.  Man kann in ein Kommentar also schreiben was man will.  Kommentare sind nützlich, um den Quellcode zu dokumentieren.  &lt;br /&gt;
&lt;br /&gt;
In Java gibt es zwei Arten von Kommentaren: &lt;br /&gt;
&lt;br /&gt;
===Kommentare über eine Zeile===&lt;br /&gt;
&lt;br /&gt;
 // Diese ganze Zeile wird vom Compiler ignoriert.&lt;br /&gt;
 int x= 5;  // Dieser  Kommentar beginnt mit »//«.  Alles davor wird vom Compiler nicht ignoriert.&lt;br /&gt;
&lt;br /&gt;
===Kommentare über mehrere Zeilen===&lt;br /&gt;
&lt;br /&gt;
 /* Dieser &lt;br /&gt;
    Kommentar&lt;br /&gt;
    erstreckt &lt;br /&gt;
    sich &lt;br /&gt;
    über&lt;br /&gt;
    mehrere&lt;br /&gt;
    Zeilen.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Zum Vergleich:  in Opal werden Kommentare mit -- eingeführt.&lt;br /&gt;
&lt;br /&gt;
== Datentypen (Variablen) ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;80%&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#F9F9F9; font-size:95%; empty-cells:show;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Typ &lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Speicherbedarf&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Bereich&lt;br /&gt;
|- &lt;br /&gt;
|int&lt;br /&gt;
|4 Byte&lt;br /&gt;
| -2.147.483.648 bis 2.147.483.647&lt;br /&gt;
|- &lt;br /&gt;
|short&lt;br /&gt;
|2 Byte&lt;br /&gt;
| -32.768 bis 32.787&lt;br /&gt;
|- &lt;br /&gt;
|long&lt;br /&gt;
|8 Byte&lt;br /&gt;
| -9.223.372.036.854.775.808L bis 9.223.372.036.854.775.807L&lt;br /&gt;
|- &lt;br /&gt;
|byte&lt;br /&gt;
|1 Byte&lt;br /&gt;
| -128 bis 127&lt;br /&gt;
|- &lt;br /&gt;
|float&lt;br /&gt;
|4 Byte&lt;br /&gt;
| +/-3,40282347E+38F&lt;br /&gt;
|- &lt;br /&gt;
|double&lt;br /&gt;
|8 Byte&lt;br /&gt;
| +/-1,79769313486231570E+308&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Boolsche Operatoren ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;80%&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#F9F9F9; font-size:95%; empty-cells:show;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Operator&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Beispiel&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Ergebnis des Beispiels&lt;br /&gt;
|- &lt;br /&gt;
| ==  &lt;br /&gt;
&#039;&#039;(gleich)&#039;&#039;&lt;br /&gt;
| 4 == 9&lt;br /&gt;
| false&lt;br /&gt;
|-&lt;br /&gt;
| !=  &lt;br /&gt;
&#039;&#039;(ungleich)&#039;&#039;&lt;br /&gt;
| 4 != 8&lt;br /&gt;
| true&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;&amp;amp;  &lt;br /&gt;
&#039;&#039;(logisches UND)&#039;&#039;&lt;br /&gt;
| false &amp;amp;&amp;amp; true&lt;br /&gt;
| false, es wird erst der linke Ausdruck ausgewertet. Wenn die Auswertung false ergibt, wird der rechte Ausdruck nicht mehr geprüft, da das Ergebnis nicht mehr true werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;  &lt;br /&gt;
&#039;&#039;(logisches ODER)&#039;&#039;&lt;br /&gt;
| true &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; false&lt;br /&gt;
| true,  es wird erst der linke Ausdruck ausgewertet. Wenn die Auswertung true ergibt, wird der rechte Ausdruck nicht mehr geprüft, da das Ergebnis nicht mehr false werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;, &amp;lt;=, &amp;gt;, &amp;gt;=, &amp;lt;&amp;gt;&lt;br /&gt;
| 1 &amp;lt; 3  &#039;&#039;(hier exempalrisch nur eins)&#039;&#039;&lt;br /&gt;
| true&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bitoperatoren ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;80%&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#F9F9F9; font-size:95%; empty-cells:show;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Operator&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Beschreibung&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;&lt;br /&gt;
| AND&lt;br /&gt;
| Wie das logische UND, jedoch werden auf jeden Fall beide Seiten ausgewertet.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| OR&lt;br /&gt;
| Wie das logische ODER, jedoch werden auf jeden Fall beide Seiten ausgewertet.&lt;br /&gt;
|-&lt;br /&gt;
| ^&lt;br /&gt;
| XOR&lt;br /&gt;
| XOR halt.&lt;br /&gt;
|-&lt;br /&gt;
| ~&lt;br /&gt;
| NOT&lt;br /&gt;
| Negation des Wertes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konstanten ==&lt;br /&gt;
* In Java werden Konstanten mit dem Schlüsselwort &#039;&#039;&#039;final&#039;&#039;&#039; bezeichnet. In Java gibt es die Konvention Konstanten komplett groß zu schreiben:&lt;br /&gt;
&lt;br /&gt;
 final double PI = 3.14;&lt;br /&gt;
&lt;br /&gt;
== Zuweisungen und Initialisierungen ==&lt;br /&gt;
Wenn man eine Variable erstellt und sie mit Werten füllen will, wird man auf folgende Syntax stoßen:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;Datentyp&#039;&#039; Variablenname = &#039;&#039;Initialisierungswert&#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei Möglichkeiten diese Aktion durchzuführen:&lt;br /&gt;
* lange Variante:&lt;br /&gt;
 int zahl;&lt;br /&gt;
 zahl = 23;&lt;br /&gt;
&lt;br /&gt;
* kurze Variante:&lt;br /&gt;
 int zahl = 23;&lt;br /&gt;
&lt;br /&gt;
== if-Anweisung ==&lt;br /&gt;
* Die einfachste Variante:&lt;br /&gt;
&lt;br /&gt;
 if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;	&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* Zusätlich hat diese Variante einen alternativen Anweisungsblock. Wenn &#039;&#039;condition&#039;&#039; nicht erfüllt gehe in den &#039;&#039;else&#039;&#039;-Zweig und führe dort die Anweisungen aus.&lt;br /&gt;
&lt;br /&gt;
 if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;	&lt;br /&gt;
 } else {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
 }&lt;br /&gt;
	&lt;br /&gt;
* Natürlich lassen sich beide Varianten schachteln. Man kann also auf zwei Bedingungen prüfen und bei nicht Eintreffen in den &#039;&#039;else&#039;&#039;-Zweig gehen.&lt;br /&gt;
		&lt;br /&gt;
 if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;	&lt;br /&gt;
 } else if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;			&lt;br /&gt;
 } else {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;		&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= for-Schleife =&lt;br /&gt;
* Um über Array&#039;s zu wandern bietet sich die for-Schleife an. Als erstes in der Klammer muß eine Laufvariable deklariert und mit einem Wert initialisiert werden (hier int i= 0). Danach muß eine Bedingung erfüllen, um festzulegen bis wann die Schleife ausgeführt wird (i &amp;lt; 10). Als letztes muß die Laufvariable verändert werden, so daß irgendwann der Abbruch eintritt (i++).&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
 &lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== while-Schleife ==&lt;br /&gt;
* Die while-Schleife wird meistens dafür benutzt, Anweisungen auszuführen bis irgendetwas eintrifft (EOF -End Of File). Für Array&#039;s sollte man die for-Schleife nehmen. Die while-Schleife läßt isch auch als for-Schleife schreiben.&lt;br /&gt;
&lt;br /&gt;
 while (condition) {&lt;br /&gt;
     &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== switch-case ==&lt;br /&gt;
* Wenn man verschiedene Werte abfangen möchte, wie zum Beispiel verschiedene Zahlen (bei einem Menü). Gehen wir mal davon aus, daß wir drei Menüeinträge haben: &lt;br /&gt;
# &#039;&#039;1&#039;&#039;&lt;br /&gt;
# &#039;&#039;2&#039;&#039;&lt;br /&gt;
# &#039;&#039;0&#039;&#039; &lt;br /&gt;
&#039;&#039;1&#039;&#039; gibt die Zahl &#039;&#039;&#039;1&#039;&#039;&#039;, &#039;&#039;2&#039;&#039; gibt die Zahl &#039;&#039;&#039;2&#039;&#039;&#039; aus und &#039;&#039;0&#039;&#039; beendet das Programm, dann ist key zum Beispiel ein &#039;&#039;&#039;int&#039;&#039;&#039; und &#039;&#039;&#039;value&#039;&#039;&#039; würde den einzelnen Menüpunkten entsprechen. Das &#039;&#039;break&#039;&#039; bewirkt ein raussprigen aus dem switch-Konstrukt. Würde man das &#039;&#039;break&#039;&#039; weglassen, würden sämtliche Anweisungen die direkt darunter folgen, ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
 switch (key) {&lt;br /&gt;
    case value: {&lt;br /&gt;
       &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
       break;&lt;br /&gt;
    }&lt;br /&gt;
    default: {&lt;br /&gt;
       &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
       break;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Grundgerüst ==&lt;br /&gt;
&lt;br /&gt;
Da der Programmierer vom Kopieren lebt, schreibt er einmal eine Schablone und benutzt sie immer wieder, frei nach dem Motto: Man muß das Rad nicht zweimal erfinden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So sieht zum Beispiel ein simples Javaprogramm ohne Handlung aus:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 public class Klassenname {&lt;br /&gt;
 &lt;br /&gt;
 	/**&lt;br /&gt;
 	 * @param args&lt;br /&gt;
 	 */&lt;br /&gt;
 	public static void main(String[] args) {&lt;br /&gt;
 		// TODO Anweisungen&lt;br /&gt;
 &lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erläuterungen:&#039;&#039;&#039;&lt;br /&gt;
@param ist für das Dokumentationssystem Javadoc, wird im Javakurs vielleicht angesprochen, sollte aber erstmal zweitrangig sein. Dennoch ist Dokumentation wichtiger als der eigentliche Code und deshalb hier erwähnt.&lt;br /&gt;
&lt;br /&gt;
== Funktion (Methoden) ==&lt;br /&gt;
In Java programmiert man meistens Objektorientiert, es sei denn man belegt Info2. Funktionen heißen bei Java Methoden und Methoden sind Objekten zugeordnet, es sei denn man programmiert nicht Objektorientiert.&lt;br /&gt;
Eine Methode hat immer folgenden Aufbau:&lt;br /&gt;
&lt;br /&gt;
 Spezialoption &#039;&#039;Veröffentlichungsart&#039;&#039; &#039;&#039;&#039;Rückgabewert&#039;&#039;&#039; Funktionsname &#039;&#039;&#039;(&#039;&#039;&#039; Parametertyp &#039;&#039;Parametername&#039;&#039; &#039;&#039;&#039;)&#039;&#039;&#039; {&lt;br /&gt;
 &lt;br /&gt;
    Methodenrumpf_mit_Anweisungen;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Spezialoption:&lt;br /&gt;
* static&lt;br /&gt;
* final&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Veröffentlichungsart&#039;&#039;:&lt;br /&gt;
* public&lt;br /&gt;
* protected&lt;br /&gt;
* private&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rückgabewert&#039;&#039;&#039;:&lt;br /&gt;
* sämtliche oben aufgeführte Datentypen &lt;br /&gt;
* eigene Datentypen&lt;br /&gt;
&lt;br /&gt;
Funktionsname:&lt;br /&gt;
* einen für die Funktion bezeichnenden Namen aus Buchstaben, Zahlen und dem Underscore ( &#039;&#039;_&#039;&#039; )&lt;br /&gt;
* darf nicht mit eine Zahl beginnen&lt;br /&gt;
&lt;br /&gt;
Parametertyp:&lt;br /&gt;
* wie &#039;&#039;&#039;Rückgabewert&#039;&#039;&#039;, siehe oben&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Parametername&#039;&#039;:&lt;br /&gt;
* wie Funtionsname, siehe oben&lt;br /&gt;
&lt;br /&gt;
== Ausgabe ==&lt;br /&gt;
* Um Fehler finden zu können oder Ausgaben auf der Konsole zu machen, gibt es in Java &#039;&#039;print&#039;&#039;-Funktionen:&lt;br /&gt;
&lt;br /&gt;
 System.out.print(&amp;quot;Irgend ein String.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Gibt &#039;&#039;Irgend ein String.&#039;&#039; auf der Konsole aus ohne einen Zeilenumbruch.&lt;br /&gt;
&lt;br /&gt;
 System.out.println(&amp;quot;Noch ein String.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Gibt &#039;&#039;Noch ein String.&#039;&#039; auf der Konsole aus allerdings diesmal mit einem Zeilenumbruch.&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Java_Kurzreferenz&amp;diff=7233</id>
		<title>Javakurs2006/Java Kurzreferenz</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Java_Kurzreferenz&amp;diff=7233"/>
		<updated>2006-04-05T06:17:14Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: wikifikation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier befindet sich eine kleine &#039;&#039;&#039;Referenz für Java&#039;&#039;&#039; speziell für den Javakurs der Freitagsrunde.&lt;br /&gt;
&lt;br /&gt;
== Kommentare ==&lt;br /&gt;
Ein wichtiges Instrumentarium in Java (natürlich auch in anderen Sprachen, wie z.B. OPAL [&#039;&#039;-- Kommantar&#039;&#039;]) sind Kommentare. In Java gibt es zwei Arten von Kommentaren: &lt;br /&gt;
* Kommentare über eine Zeile&lt;br /&gt;
&lt;br /&gt;
 //dies ist ein Kommentar&lt;br /&gt;
&lt;br /&gt;
* Kommentare über mehrere Zeilen&lt;br /&gt;
&lt;br /&gt;
 /* dies&lt;br /&gt;
  sind&lt;br /&gt;
  mehrere&lt;br /&gt;
  Kommentare&lt;br /&gt;
  über&lt;br /&gt;
  mehrere&lt;br /&gt;
  Zeilen&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datentypen (Variablen) ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;80%&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#F9F9F9; font-size:95%; empty-cells:show;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Typ &lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Speicherbedarf&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Bereich&lt;br /&gt;
|- &lt;br /&gt;
|int&lt;br /&gt;
|4 Byte&lt;br /&gt;
| -2.147.483.648 bis 2.147.483.647&lt;br /&gt;
|- &lt;br /&gt;
|short&lt;br /&gt;
|2 Byte&lt;br /&gt;
| -32.768 bis 32.787&lt;br /&gt;
|- &lt;br /&gt;
|long&lt;br /&gt;
|8 Byte&lt;br /&gt;
| -9.223.372.036.854.775.808L bis 9.223.372.036.854.775.807L&lt;br /&gt;
|- &lt;br /&gt;
|byte&lt;br /&gt;
|1 Byte&lt;br /&gt;
| -128 bis 127&lt;br /&gt;
|- &lt;br /&gt;
|float&lt;br /&gt;
|4 Byte&lt;br /&gt;
| +/-3,40282347E+38F&lt;br /&gt;
|- &lt;br /&gt;
|double&lt;br /&gt;
|8 Byte&lt;br /&gt;
| +/-1,79769313486231570E+308&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Boolsche Operatoren ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;80%&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#F9F9F9; font-size:95%; empty-cells:show;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Operator&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Beispiel&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Ergebnis des Beispiels&lt;br /&gt;
|- &lt;br /&gt;
| ==  &lt;br /&gt;
&#039;&#039;(gleich)&#039;&#039;&lt;br /&gt;
| 4 == 9&lt;br /&gt;
| false&lt;br /&gt;
|-&lt;br /&gt;
| !=  &lt;br /&gt;
&#039;&#039;(ungleich)&#039;&#039;&lt;br /&gt;
| 4 != 8&lt;br /&gt;
| true&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;&amp;amp;  &lt;br /&gt;
&#039;&#039;(logisches UND)&#039;&#039;&lt;br /&gt;
| false &amp;amp;&amp;amp; true&lt;br /&gt;
| false, es wird erst der linke Ausdruck ausgewertet. Wenn die Auswertung false ergibt, wird der rechte Ausdruck nicht mehr geprüft, da das Ergebnis nicht mehr true werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;  &lt;br /&gt;
&#039;&#039;(logisches ODER)&#039;&#039;&lt;br /&gt;
| true &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; false&lt;br /&gt;
| true,  es wird erst der linke Ausdruck ausgewertet. Wenn die Auswertung true ergibt, wird der rechte Ausdruck nicht mehr geprüft, da das Ergebnis nicht mehr false werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;, &amp;lt;=, &amp;gt;, &amp;gt;=, &amp;lt;&amp;gt;&lt;br /&gt;
| 1 &amp;lt; 3  &#039;&#039;(hier exempalrisch nur eins)&#039;&#039;&lt;br /&gt;
| true&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bitoperatoren ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;80%&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#F9F9F9; font-size:95%; empty-cells:show;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Operator&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Beschreibung&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;&lt;br /&gt;
| AND&lt;br /&gt;
| Wie das logische UND, jedoch werden auf jeden Fall beide Seiten ausgewertet.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| OR&lt;br /&gt;
| Wie das logische ODER, jedoch werden auf jeden Fall beide Seiten ausgewertet.&lt;br /&gt;
|-&lt;br /&gt;
| ^&lt;br /&gt;
| XOR&lt;br /&gt;
| XOR halt.&lt;br /&gt;
|-&lt;br /&gt;
| ~&lt;br /&gt;
| NOT&lt;br /&gt;
| Negation des Wertes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konstanten ==&lt;br /&gt;
* In Java werden Konstanten mit dem Schlüsselwort &#039;&#039;&#039;final&#039;&#039;&#039; bezeichnet. In Java gibt es die Konvention Konstanten komplett groß zu schreiben:&lt;br /&gt;
&lt;br /&gt;
 final double PI = 3.14;&lt;br /&gt;
&lt;br /&gt;
== Zuweisungen und Initialisierungen ==&lt;br /&gt;
Wenn man eine Variable erstellt und sie mit Werten füllen will, wird man auf folgende Syntax stoßen:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;Datentyp&#039;&#039; Variablenname = &#039;&#039;Initialisierungswert&#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei Möglichkeiten diese Aktion durchzuführen:&lt;br /&gt;
* lange Variante:&lt;br /&gt;
 int zahl;&lt;br /&gt;
 zahl = 23;&lt;br /&gt;
&lt;br /&gt;
* kurze Variante:&lt;br /&gt;
 int zahl = 23;&lt;br /&gt;
&lt;br /&gt;
== if-Anweisung ==&lt;br /&gt;
* Die einfachste Variante:&lt;br /&gt;
&lt;br /&gt;
 if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;	&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* Zusätlich hat diese Variante einen alternativen Anweisungsblock. Wenn &#039;&#039;condition&#039;&#039; nicht erfüllt gehe in den &#039;&#039;else&#039;&#039;-Zweig und führe dort die Anweisungen aus.&lt;br /&gt;
&lt;br /&gt;
 if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;	&lt;br /&gt;
 } else {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
 }&lt;br /&gt;
	&lt;br /&gt;
* Natürlich lassen sich beide Varianten schachteln. Man kann also auf zwei Bedingungen prüfen und bei nicht Eintreffen in den &#039;&#039;else&#039;&#039;-Zweig gehen.&lt;br /&gt;
		&lt;br /&gt;
 if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;	&lt;br /&gt;
 } else if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;			&lt;br /&gt;
 } else {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;		&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= for-Schleife =&lt;br /&gt;
* Um über Array&#039;s zu wandern bietet sich die for-Schleife an. Als erstes in der Klammer muß eine Laufvariable deklariert und mit einem Wert initialisiert werden (hier int i= 0). Danach muß eine Bedingung erfüllen, um festzulegen bis wann die Schleife ausgeführt wird (i &amp;lt; 10). Als letztes muß die Laufvariable verändert werden, so daß irgendwann der Abbruch eintritt (i++).&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
 &lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== while-Schleife ==&lt;br /&gt;
* Die while-Schleife wird meistens dafür benutzt, Anweisungen auszuführen bis irgendetwas eintrifft (EOF -End Of File). Für Array&#039;s sollte man die for-Schleife nehmen. Die while-Schleife läßt isch auch als for-Schleife schreiben.&lt;br /&gt;
&lt;br /&gt;
 while (condition) {&lt;br /&gt;
     &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== switch-case ==&lt;br /&gt;
* Wenn man verschiedene Werte abfangen möchte, wie zum Beispiel verschiedene Zahlen (bei einem Menü). Gehen wir mal davon aus, daß wir drei Menüeinträge haben: &lt;br /&gt;
# &#039;&#039;1&#039;&#039;&lt;br /&gt;
# &#039;&#039;2&#039;&#039;&lt;br /&gt;
# &#039;&#039;0&#039;&#039; &lt;br /&gt;
&#039;&#039;1&#039;&#039; gibt die Zahl &#039;&#039;&#039;1&#039;&#039;&#039;, &#039;&#039;2&#039;&#039; gibt die Zahl &#039;&#039;&#039;2&#039;&#039;&#039; aus und &#039;&#039;0&#039;&#039; beendet das Programm, dann ist key zum Beispiel ein &#039;&#039;&#039;int&#039;&#039;&#039; und &#039;&#039;&#039;value&#039;&#039;&#039; würde den einzelnen Menüpunkten entsprechen. Das &#039;&#039;break&#039;&#039; bewirkt ein raussprigen aus dem switch-Konstrukt. Würde man das &#039;&#039;break&#039;&#039; weglassen, würden sämtliche Anweisungen die direkt darunter folgen, ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
 switch (key) {&lt;br /&gt;
    case value: {&lt;br /&gt;
       &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
       break;&lt;br /&gt;
    }&lt;br /&gt;
    default: {&lt;br /&gt;
       &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
       break;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Grundgerüst ==&lt;br /&gt;
&lt;br /&gt;
Da der Programmierer vom Kopieren lebt, schreibt er einmal eine Schablone und benutzt sie immer wieder, frei nach dem Motto: Man muß das Rad nicht zweimal erfinden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So sieht zum Beispiel ein simples Javaprogramm ohne Handlung aus:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 public class Klassenname {&lt;br /&gt;
 &lt;br /&gt;
 	/**&lt;br /&gt;
 	 * @param args&lt;br /&gt;
 	 */&lt;br /&gt;
 	public static void main(String[] args) {&lt;br /&gt;
 		// TODO Anweisungen&lt;br /&gt;
 &lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erläuterungen:&#039;&#039;&#039;&lt;br /&gt;
@param ist für das Dokumentationssystem Javadoc, wird im Javakurs vielleicht angesprochen, sollte aber erstmal zweitrangig sein. Dennoch ist Dokumentation wichtiger als der eigentliche Code und deshalb hier erwähnt.&lt;br /&gt;
&lt;br /&gt;
== Funktion (Methoden) ==&lt;br /&gt;
In Java programmiert man meistens Objektorientiert, es sei denn man belegt Info2. Funktionen heißen bei Java Methoden und Methoden sind Objekten zugeordnet, es sei denn man programmiert nicht Objektorientiert.&lt;br /&gt;
Eine Methode hat immer folgenden Aufbau:&lt;br /&gt;
&lt;br /&gt;
 Spezialoption &#039;&#039;Veröffentlichungsart&#039;&#039; &#039;&#039;&#039;Rückgabewert&#039;&#039;&#039; Funktionsname &#039;&#039;&#039;(&#039;&#039;&#039; Parametertyp &#039;&#039;Parametername&#039;&#039; &#039;&#039;&#039;)&#039;&#039;&#039; {&lt;br /&gt;
 &lt;br /&gt;
    Methodenrumpf_mit_Anweisungen;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Spezialoption:&lt;br /&gt;
* static&lt;br /&gt;
* final&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Veröffentlichungsart&#039;&#039;:&lt;br /&gt;
* public&lt;br /&gt;
* protected&lt;br /&gt;
* private&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rückgabewert&#039;&#039;&#039;:&lt;br /&gt;
* sämtliche oben aufgeführte Datentypen &lt;br /&gt;
* eigene Datentypen&lt;br /&gt;
&lt;br /&gt;
Funktionsname:&lt;br /&gt;
* einen für die Funktion bezeichnenden Namen aus Buchstaben, Zahlen und dem Underscore ( &#039;&#039;_&#039;&#039; )&lt;br /&gt;
* darf nicht mit eine Zahl beginnen&lt;br /&gt;
&lt;br /&gt;
Parametertyp:&lt;br /&gt;
* wie &#039;&#039;&#039;Rückgabewert&#039;&#039;&#039;, siehe oben&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Parametername&#039;&#039;:&lt;br /&gt;
* wie Funtionsname, siehe oben&lt;br /&gt;
&lt;br /&gt;
== Ausgabe ==&lt;br /&gt;
* Um Fehler finden zu können oder Ausgaben auf der Konsole zu machen, gibt es in Java &#039;&#039;print&#039;&#039;-Funktionen:&lt;br /&gt;
&lt;br /&gt;
 System.out.print(&amp;quot;Irgend ein String.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Gibt &#039;&#039;Irgend ein String.&#039;&#039; auf der Konsole aus ohne einen Zeilenumbruch.&lt;br /&gt;
&lt;br /&gt;
 System.out.println(&amp;quot;Noch ein String.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Gibt &#039;&#039;Noch ein String.&#039;&#039; auf der Konsole aus allerdings diesmal mit einem Zeilenumbruch.&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_2/Vorlesung_2&amp;diff=7120</id>
		<title>Javakurs2006/Tag 2/Vorlesung 2</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_2/Vorlesung_2&amp;diff=7120"/>
		<updated>2006-04-04T11:54:47Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Die Methode equals(Object o) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Kleine Wiederholung==&lt;br /&gt;
&lt;br /&gt;
Klassen beinhalten zusammengehörige Daten und Methoden. Mit new erzeugt man Instanzen dieser Klassen. Jede Instanz kann eigene Werte der zugehörigen Daten enthalten. Ein Teil der im Quellcode dieses Textes enthaltenen Kommentare erklären Syntax und hätten in einem &amp;quot;echten&amp;quot; Programm nichts zu suchen.&lt;br /&gt;
&lt;br /&gt;
 //file: Apfel.java&lt;br /&gt;
 class Apfel {&lt;br /&gt;
     String farbe;&lt;br /&gt;
     int gewicht; //in Gramm&lt;br /&gt;
     &lt;br /&gt;
     Apfel (String farb, int gew) { //Konstuktor&lt;br /&gt;
         farbe = farb; //eigentlich this.farbe =farb, ist aber unnötig&lt;br /&gt;
         gewicht = gew;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void essen() { //eine Methode&lt;br /&gt;
         gewicht = 0;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //file: Beispiel.java&lt;br /&gt;
 public Beispiel {&lt;br /&gt;
     public static void main( String args[] ) {&lt;br /&gt;
         Apfel boskop1 = new Apfel(&amp;quot;rot&amp;quot;, 175);&lt;br /&gt;
         Apfel boskop2 = new Apfel(&amp;quot;grün&amp;quot;, 180);&lt;br /&gt;
         &lt;br /&gt;
         System.out.println(&amp;quot;boskop1 (&amp;quot; +&lt;br /&gt;
             boskop1.farbe + &amp;quot;): &amp;quot; + boskop1.gewicht + &amp;quot; gramm&amp;quot;);&lt;br /&gt;
         System.out.println(&amp;quot;boskop2 (&amp;quot; +&lt;br /&gt;
             boskop2.farbe + &amp;quot;): &amp;quot; + boskop2.gewicht + &amp;quot;gramm&amp;quot;);        &lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Vererbung==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In objektorientierten Programmiersprachen gibt es ein Konzept, dass sich Vererbung nennt. Eine Klasse erbt dann das Verhalten (also die Methoden) und auch die Daten von einer anderen Klasse. In Java benutzt man zum Vererben das Schlüsselwort extends.&lt;br /&gt;
&lt;br /&gt;
 //File: Obst.java&lt;br /&gt;
 class Obst {&lt;br /&gt;
 	String farbe;&lt;br /&gt;
 	int gewicht; //in Gramm&lt;br /&gt;
  	&lt;br /&gt;
 	void essen() {&lt;br /&gt;
 		gewicht = 0;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File: Apfel.java&lt;br /&gt;
 class Apfel extends Obst {&lt;br /&gt;
 	String geerntetIn;&lt;br /&gt;
 	 &lt;br /&gt;
 	void schaelen() {&lt;br /&gt;
 		gewicht = gewicht - 10;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Klasse Apfel im Beispiel hat alle Methoden und Daten von der Klasse Obst geerbt. Das heißt Instanzen dieser Klasse besitzen eine Farbe, ein Gewicht und man kann sie essen.&lt;br /&gt;
&lt;br /&gt;
Wer mehr über Objektorientierung und Vererbung erfahren möchte, kann entweder eins der unzähligen verfügbaren Bücher zu dem Thema zur Hand nehmen. Alternativ könnte man auch diesen link (http://java.sun.com/docs/books/tutorial/java/concepts/index.html) verfolgen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Die Klasse Object==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Java gibt es eine Klasse Object, von der jede andere Klasse abgeleitet ist. Wenn man kein extends hinschreibt, wird vom Compiler sozusagen das &amp;quot;extends Object&amp;quot; ergänzt. Dies geschieht intern, also ohne Veränderung in eurem Quellcode.&lt;br /&gt;
&lt;br /&gt;
Einige Methoden von Object sind für uns sehr nützlich, weshalb sie hier kurz vorgestellt werden sollen. Doch eins noch zum Wort Objekt: Die Bezeichnung Objekt wird oftmals sowohl für Klassen als auch für Instanzen von Klassen benutzt, deshalb immer schauen welche Bedeutung wohl gerade gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird hier Obje&amp;lt;b&amp;gt;k&amp;lt;/b&amp;gt;t in der Bedeutung von Instanz benutzt und Obje&amp;lt;b&amp;gt;c&amp;lt;/b&amp;gt;t, wenn die besondere Klasse Object gemeint ist.&lt;br /&gt;
&lt;br /&gt;
===Die Methode toString()===&lt;br /&gt;
&lt;br /&gt;
Nun aber zu den genannten nützlichen Mehtoden: Die Methode toString() liefert einen String, der die Instanz beschreibt. Doch woher soll die Methode (die ja in Object angelegt wurde) wissen, wie man unsere spezielle Instanz treffend in einem String beschreibt?&lt;br /&gt;
&lt;br /&gt;
Dazu kann man die Methode überschreiben. Man macht das, indem man sie einfach in der eigenen Klasse noch einmal definiert.&lt;br /&gt;
&lt;br /&gt;
 //File: Apfel.java&lt;br /&gt;
 class Apfel extends Obst {&lt;br /&gt;
 	String geerntetIn;&lt;br /&gt;
 	&lt;br /&gt;
 	void schaelen() {&lt;br /&gt;
 		gewicht = gewicht - 10;&lt;br /&gt;
 	}&lt;br /&gt;
 	 &lt;br /&gt;
 	String toString() {&lt;br /&gt;
 		String description = &amp;quot;Ein Apfel, geerntet  in &amp;quot; + geerntetIn;&lt;br /&gt;
 		return description; &lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Ruft man nun auf einer Instanz von Apfel toString auf, so wird die in Apfel definierte Version benutzt. Die Methode toString() ist unter anderem deshalb so wichtig, weil sie von System.out.println() benutzt wird, um Instanzen beliebiger Nachfahren von Object auf der Konsole auszugeben. Die Methode printMe() aus der vorhergehenden Übung hatte die gleiche Funktion. Nur arbeitet  println() mit toString(), weshalb es sinnvoll wäre printMe() in toString() umzubenennen.&lt;br /&gt;
&lt;br /&gt;
===Die Methode equals(Object o)===&lt;br /&gt;
&lt;br /&gt;
Eine weitere wichtige Methode von Object ist equals(Object o). Hiermit kann, wie der Name schon sagt die Gleichheit zweier Objekte festgestellt werden. Nun wird sich vielleicht der ein oder andere fragen, warum man nicht den Vergleichsoperator == benutzt, sondern eine eigene Methode dafür schreibt. Warum das so ist, soll an einem Codebeispiel verdeutlicht werden.&lt;br /&gt;
&lt;br /&gt;
 public static void main(String []args) {&lt;br /&gt;
 	Apfel apfel1 = new Apfel();&lt;br /&gt;
 	apfel1.farbe = &amp;quot;grün&amp;quot;;&lt;br /&gt;
 	apfel1.geerntetIn = &amp;quot;Berlin&amp;quot;;&lt;br /&gt;
 	apfel1.gewicht = 215;&lt;br /&gt;
  	&lt;br /&gt;
 	Apfel apfel2 = new Apfel();&lt;br /&gt;
 	apfel2.farbe = &amp;quot;grün&amp;quot;;&lt;br /&gt;
 	apfel2.geerntetIn = &amp;quot;Brandenburg&amp;quot;;&lt;br /&gt;
 	apfel2.gewicht = 215;&lt;br /&gt;
  	&lt;br /&gt;
 	Apfel apfel3 = apfel2;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Der Operator == gibt genau dann true zurück, wenn die Werte der beiden verglichenen Dinge identisch sind. Bei eingebauten Datentypen (int, double) verhält er sich wie erwartet. Der Wert eines Objektes hingegen ist die Identität des Objektes, und nicht sein Inhalt. Deshalb würde apfel1 == apfel2 false zurückgeben, weil es sich um zwei verschiedene Objekte handelt. Wir hätten aber gern eine Methode, die uns sagt, dass diese Äpfel insofern gleich sind, dass sie die gleichen Eigenschaften besitzen. Dabei ist zu beachten, dass wir für die Gleichheit zweier Äpfel hier nur das Gewicht und die Farbe heranziehen.Genau dies sollte equals realisieren.&lt;br /&gt;
&lt;br /&gt;
 class Apfel extends Obst {&lt;br /&gt;
 	String geerntetIn;&lt;br /&gt;
 	&lt;br /&gt;
 	void schaelen() {&lt;br /&gt;
 		gewicht = gewicht - 10;&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	String toString() {&lt;br /&gt;
 		String description = &amp;quot;Ein Apfel, geerntet  in &amp;quot; + geerntetIn;&lt;br /&gt;
 		return description;&lt;br /&gt;
 	}&lt;br /&gt;
 	 &lt;br /&gt;
 	boolean equals(Object o) {&lt;br /&gt;
 		Apfel andererApfel = (Apfel)o;&lt;br /&gt;
 		return farbe.equals(andererApfel.farbe) &amp;amp;&amp;amp;&lt;br /&gt;
 			gewicht == andererApfel.gewicht;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Im Beispiel für equals gibt es gleich zwei Dinge, die einer weiteren Erklärung bedürfen: In der ersten Zeile machen wir aus der Intanz von Object, mit dem wir vergleichen einen Apfel. Diesen Vorgang nennt man casten.  Das Programm wird an dieser Stelle mit einer entsprechenden Fehlermeldung beendet, wenn der Parameter o kein Apfel ist. Das ist zwar nicht schön, macht aber trotzdem Sinn, da eine Gleichheit zwischen Äpfeln und beliebigen Objekten nicht zwangsläufig definiert ist. Dies ist zugegebenermaßen noch nicht ganz zufriedenstellend, da das Programm einfach beendet würde, wenn Apfel mit Autos zu vergleichen, obwohl man sicher sagen könnte, dass die beiden unterschiedlich sind. Wer hierzu noch etwas mehr lesen möchte, kann sich hier (http://www.galileocomputing.de/openbook/javainsel3/javainsel_030003.htm#Rxxjavainsel_030003281GleichheitvonObjektenunddieMethodeequals) vertiefen.&lt;br /&gt;
&lt;br /&gt;
Die zweite Sache, die auffällt: das Gewicht wird mit == verglichen, warum nicht auch mit equals? Die Antwort darauf ist eigentlich recht einfach: gewicht ist vom Typ int, der ein primitiver Datentyp ist. Damit erbt er nicht von Object, und bietet demnach auch keine Methode equals an. Wie oben schon erwähnt liefert == bei primitiven Datentypen ja auch das gewünschte Ergebnis.&lt;br /&gt;
&lt;br /&gt;
Eine Anmerkung hierzu ist noch wichtig: Die oben vorgestellte Implementierung von equals funktioniert für unsere Zwecke. Dennoch ist sie unsauber und erfüllt nicht die Anforderungen, die sun in seiner Klassenbibliothek an equals stellt. Dies genauer zu erläutern würde den Rahmen unseres Kurses sprengen, näheres dazu findet man unter anderem im Link zwei Absätze höher. Die genauen Anforderungen an die Implementierung der Methode equals sind zu finden in der Java API Referenz (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html).&lt;br /&gt;
&lt;br /&gt;
==Comparable==&lt;br /&gt;
&lt;br /&gt;
Manchmal reicht es nicht aus, zu wissen zwei Objekte gleich sind. Oft wollen wir Objekte ordnen, wozu wir eine Funktion brauchen die uns mitteilt welches von zwei Objekten &amp;quot;größer&amp;quot; ist. Eine solche Funktion ist compareTo(Object o). Im Gegensatz zu equals und toString ist sie allerdings keine Methode von Object, da es Klassen gibt, deren Objekte man nicht ordnen kann. Ein Beispiel hierfür wären Farbtöne, für die es schwer fällt eine natürliche Ordnung zu finden. Nun könnten wir für unsere eigenen Klassen, wo das Ordnen Sinn macht einfach ein compareTo implementieren. Würden wir dies einfach so tun könnten wir allerdings nicht einen Algorithmus benutzen, den jemand anderes zum Ordnen seiner eigenen Klasse, die compareTo implementiert geschrieben hat:&lt;br /&gt;
&lt;br /&gt;
 //File: MyClass.java&lt;br /&gt;
 class MyClass {&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(MyClass o) {&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File: SomeonesClass.java&lt;br /&gt;
 class SomeonesClass {&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(SomeonesClass o) {&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File Utility.java&lt;br /&gt;
 class Utility {&lt;br /&gt;
 	static sort(SomeonesClass daten[]) {&lt;br /&gt;
 		//sortiere daten mittels compareTo&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier kann man kein array vom Typ MyClass[] als parameter von sort übergeben, da es sich um zwei verschiedene Typen handelt. Um dieses Manko zu umgehen gibt es in Java Interfaces. Sie stellen eine Vereinbarung darüber dar, welche Methoden eine Klasse anbietet. Im Gegensatz zur Vererbung gibt es aber hier beim Interface noch keine Vorgabe, wie diese Methoden funktionieren. Das Interface schreibt nur die Namen, Art der Parameter und des Rückgabewertes von Methoden vor. Comparable ist ein solches Interface, dass schon in der Java API vorgegeben ist. Es schreibt vor, dass Klassen die dieses Interface implementieren die Methode int compareTo(Object o) anbieten müssen.&lt;br /&gt;
&lt;br /&gt;
Modifizieren wir also unser Beispiel so, dass wir das Interface Comparable nutzen.&lt;br /&gt;
	&lt;br /&gt;
 //File: MyClass.java&lt;br /&gt;
 class MyClass implements Comparable{&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(Object o) {&lt;br /&gt;
 		MyClass parameter = (MyClass)o;&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File: SomeonesClass.java&lt;br /&gt;
 class SomeonesClass implements Comparable{&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(Object o) {&lt;br /&gt;
 		SomeonesClass parameter = (SomeonesClass)o;&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File Utility.java&lt;br /&gt;
 class Utility {&lt;br /&gt;
 	static sort(Comparable daten[]) {&lt;br /&gt;
 		//sortiere daten mittels compareTo&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Nun kann die Methode sort beliebige arrays übergeben bekommen, deren Inhalt das Interface Comparable implementiert. Darüber wird dieser Mehtode zugesichert, dass jedes Element dieses arrays über die Methode compareTo verfügt und somit sich mit anderen Elementen des arrays vergleichen lässt.&lt;br /&gt;
&lt;br /&gt;
Noch ein paar Worte zum compareTo selbst: Diese Methode liefert uns als Rückgabewert eine ganze Zahl. Ist diese Zahl kleiner als 0, so ist die Instanz, auf der sie aufgerufen wurde kleiner als der übergebene Parameter (this &amp;lt; o). Ist der Rückgabewert genau 0, so ist this gleich o. Letzlich ist this größer als o, wenn der Rückgabewert von compareTo größer als 0 ist. Auch an die Methode compareTo gibt es in der API Referenz definierte Andorderungen (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Comparable.html) , die wir im Rahmen unserer Veranstaltung aber außen vor lassen wollen.&lt;br /&gt;
&lt;br /&gt;
==Java API - Javas Klassenbibliothek==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein großer Vorteil von Java gegenüber anderen Programmiersprachen besteht darin, dass es eine Vielzahl vereinheitlichter und schon mitgelieferter Klassen und Interfaces gibt. Die Sammlung dieser Klassen und Interfaces nennt man Java API. Es gibt auf der Website von Sun(java.sun.com) eine sehr umfassende Dokumentation dieser API(http://java.sun.com/j2se/1.4.2/docs/api/), die allerdings nicht immer einfach zu bedienen ist. Wenn man weiß, nach welcher Klasse man sucht findet man meist recht schnell die gewünschten Informationen. Hat man aber nur eine vage Idee, was die Klasse tun soll muss man meist noch andere Quellen nutzen, um an den Namen der gesuchten Klasse heranzukommen. Hierzu bieten sich natürlich Suchmaschinen wie google an.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wollen wir einige besonders Häufig verwendete Module und Konzepte der Java API vorstellen. Wie man ein solches Modul in eigenen Programmen verwendet, werden wir im ersten vorgestellten Modul etwas näher beleuchten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Math===&lt;br /&gt;
&lt;br /&gt;
Das Modul Math bietet, wenig überraschend, alle möglichen Methoden und Konstanten die man für mathematische Berechnungen brauchen könnte. Einige Konstanten sind zum Beispiel &lt;br /&gt;
&lt;br /&gt;
 public static final double E;&lt;br /&gt;
 public static final double PI;&lt;br /&gt;
&lt;br /&gt;
Diese beiden Konstanten sind jeweils mit drei zusätzlichen Schlüsselwörtern gekennzeichnet, die hier zumindest grob erklärt werden sollen.&lt;br /&gt;
&lt;br /&gt;
public bedeutet, dass die entsprechende Variable oder Methode auch außerhalb der definierenden Klasse und außerhalb von Math benutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Von Daten, die satic definiert sind hat nicht jede Instanz eine eigene Ausprägung, sondern alle Instanzen der Klasse teilen sich diese Variable.&lt;br /&gt;
Mehtoden die static definiert sind, brauchen keine Instanz der Klasse um aufgerufen zu werden. Demnach kennen sie allerdings auch this nicht und können daher nicht auf Daten einer Instanz der Klasse arbeiten.&lt;br /&gt;
&lt;br /&gt;
Das Schlüsselwort final an einer Variable macht diese zur Konstante. Das heißt sie wird einmal bei der Deklaration festgelegt und kann dann nicht mehr verändert werden.&lt;br /&gt;
&lt;br /&gt;
Die einzelnen Methoden, die Math bietet sollen hier nicht im Detail besprochen werden, da sie recht einfach in der API-Dokumentation von Java zu finden sind. Dennoch soll anhand des Sinus ein Aufruf einer Methode aus Math hier gezeigt werden, um die nötige Syntax zu zeigen.&lt;br /&gt;
&lt;br /&gt;
 public static void main(String args[]) {&lt;br /&gt;
     System.out.print( Math.sin(Math.PI / 2) );&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Ausgabe: 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine sehr nützliche Methode aus Math soll hier noch kurz vorgestellt werden, da man sie nicht unbedingt hier vermuten würde: Die Methode random liefert ohne Parameter zu erwarten eine Zufallszahl zwischen 0 und 1. Mit Hilfe dieser Methode kann man gleichverteilte und beliebige Zufallszahlen in den Bereichen von float und int erzeugen.&lt;br /&gt;
&lt;br /&gt;
 public static void main(String args[]) {&lt;br /&gt;
     double random1 = Math.random(); //erzeugt eine Zahl im Bereich [0;1)&lt;br /&gt;
     double random2 = Math.random() * 30 + 5; //erzeugt eine Zahl im Bereich [5;34)&lt;br /&gt;
     int random3 = (int) (Math.random() * 13); //erzeugt eine natürliche Zahl im Bereich [0;12]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Streams===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres nützliches Konzept, dass die Java API uns bietet sind Streams. Streams (zu deutsch: Datenströme) beschreiben Datenquellen oder Ziele, an die man Daten schicken kann. Dabei wird von der tatsächlichen Datenquelle oder vom tatsächlichen Ziel abstrahiert, um für alle &amp;quot;Sender&amp;quot; oder &amp;quot;Empfänger&amp;quot; von Daten die gleichen Mehtoden nutzen zu können. So können sich hinter einem Datenstrom beispielsweise eine Datei, die von der Tastatur kommenden Zeichen oder aber eine Netzwerkverbindung verbergen. Der Programmierer muss sich aber um diese Details, wenn er erstmal ein entsprechendes Datenstrom-Objekt erstellt hat keine Gedanken mehr machen, weil er ebend auf einem Datenstrom arbeitet und nicht auf einer bestimmten Datenquelle. Hier ein paar Beispiele, wie man verschiedene Datenströme erstellt. Dabei ist generell zwischen InputStream und OutputStream zu unterscheiden, wobei der erstere Daten von außen an unser Programm heranträgt und der zweite Daten von unserem Programm an einen Empfänger übermittelt&lt;br /&gt;
&lt;br /&gt;
 import java.io.*&lt;br /&gt;
 &lt;br /&gt;
 //prints the ascii code for a specified number of keys pressed on the keyboard to the console&lt;br /&gt;
 static void printAsciiCodes(int keysToPrint) {&lt;br /&gt;
     InputStream keyboard = System.in; //get standard input stream (the keyboard)&lt;br /&gt;
     for (int i = 0; i &amp;lt; keysToPrint; i++) {&lt;br /&gt;
         int asciiCode = keyboard.read(); //wait for a key to be pressed&lt;br /&gt;
         System.out.print(asciiCode + &amp;quot; &amp;quot;); //print it&#039;s ascii code&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //prints the content of a file given by Name to the console bytewise&lt;br /&gt;
 static void printFile(String fileName) {&lt;br /&gt;
     InputStream file = new FileInputStream(fileName); //open a stream representing the file&lt;br /&gt;
     int byteRead = file.read(); //read first byte from the file&lt;br /&gt;
     while (byteRead != -1) { //while there is something to read&lt;br /&gt;
         System.out.print(byteRead + &amp;quot; &amp;quot;); //print the byte we read at last&lt;br /&gt;
         byteRead = file.read(); //read a new byte&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Im Beispiel kann man schön sein, dass der Mechanismus zum lesen eines bytes bei beiden Datenströmen der gleiche ist. Lediglich in der Erstellung des Datenstromes gibt es je nach Quelle Unterschiede. Die Funktionsweise ist für Ausgabeströme recht ähnlich. Nähere Informationen dazu findet man in der API-Reference, wenn man nach den Klassen OutputStream und FileOutputStream sucht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===BufferedReader===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im letzten Abschnitt haben wir gesehen, wie leicht es ist mit Hilfe von Streams Bytes aus verschiedenen Quellen zu lesen. Oftmals wollen wir aber keine einzelnen Bytes lesen, sondern wissen dass unsere Datenquelle uns einen Text liefert. Da Text meist in Zeilen strukturiert ist, wäre es schön eine Funktion zu haben die Zeilenweise Strings aus unserem Stream liest. Auch hierfür bietet uns die Java Klassenbibiliothek bereits eine Lösung: den BufferedReader. Seine readLine Methode liest eine Zeile aus. Das Problem an dem BufferedReader ist, dass wir zu seiner Instantiierung einen Reader benötigen. Schauen wir in der API Dokumentation nach, welche Arten von Readern es gibt, so fällt der InputStreamReader auf. Schaut man sich diesen genauer an, so enthält er auch einen Konstruktor, der einen InputStream als Parameter akzeptiert.&lt;br /&gt;
&lt;br /&gt;
Nun bleibt es unsere Aufgabe zuerst einen Datenstrom aus unserer Datenquelle zu erzeugen, dann darauf einen Reader zu konstruieren um am Schluß darauf einen BufferedReader zu setzen. Dieses Vorgehen wirkt zwar etwas klobig, doch es gibt in der Klassenbibliothek bisher (bis Java 1.4.2) keine bessere Lösung dafür. Es folgt ein kleines Beispiel, dass den Inhalt einer Textdatei zeilenweise auf der Konsole ausgibt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 import java.io.*;&lt;br /&gt;
 &lt;br /&gt;
 static void printTextFile(String fileName) {&lt;br /&gt;
     InputStream fileStream = new FileInputStream(fileName);&lt;br /&gt;
     Reader reader = new InputStreamReader(fileStream); //wrap a Reader around the InputStream&lt;br /&gt;
     BufferedReader lineReader = new BufferedReader(reader); //wrap a BufferedReader around the Reader&lt;br /&gt;
     String line = lineReader.readLine();&lt;br /&gt;
     while (line != null) { //if readLine returns null, file end is reached&lt;br /&gt;
         System.out.println(line);&lt;br /&gt;
         line = lineReader.readLine();&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Exceptions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Versucht man die Programme aus den letzten beiden Abschnitten zu compilieren, so wird man feststellen dass sie nicht lauffähig sind. Mit der Tatsache, dass Streams so universell sind, handelt man sich natürlich auch alle möglichen Probleme der verschiedenen Medien, die ein Stream verstecken kann, ein. Um die Behandlung dessen zu vereinfachen und dem Programmierer die Chance zu geben an der richtigen Stelle auf Fehler zu reagieren gibt es Exceptions. An dieser Stelle soll es genügen zu erkennen, wann man von einer Methode erwarten muss, dass sie eine Exception auslöst und wie man damit umgeht.&lt;br /&gt;
&lt;br /&gt;
Methoden, die eine Exception auslösen können müssen dies ihrer Umgebung mitteilen. Dies geschieht, mit dem Schlüsselwort throws gefolgt von einer kommaseparierten Liste aller Exceptions, die sie auslösen können.&lt;br /&gt;
&lt;br /&gt;
 public class InputStream {&lt;br /&gt;
     ...&lt;br /&gt;
     public int read() throws IOException {&lt;br /&gt;
         ...&lt;br /&gt;
     }&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Bei den Klassen aus der Java Klassenbibliothek kann man der API-Reference entnehmen, welche Exceptions sie auslösen können. Jede mögliche Exception muss behandelt werden, dazu gibt es zwei Wege.Der erste funktioniert folgendermaßen: Man fasst den Teil einer Mehtode, der eine Exception auslösen kann in ein try-catch-Konstrukt ein. Wie dies aussieht soll gleich am Beispiel der Methode printTextFile gezeigt werden.&lt;br /&gt;
&lt;br /&gt;
 import java.io.*; &lt;br /&gt;
 &lt;br /&gt;
 static void printTextFile(String fileName) {&lt;br /&gt;
     InputStream fileStream = null;&lt;br /&gt;
     try {&lt;br /&gt;
         fileStream = new FileInputStream(fileName);&lt;br /&gt;
     } catch (FileNotFoundException) {&lt;br /&gt;
         System.out.println(&amp;quot;The file &amp;quot; + fileName + &amp;quot; could not be found.&amp;quot;);&lt;br /&gt;
         return; //stop execution of method... cannot print from non existing file&lt;br /&gt;
     }&lt;br /&gt;
     Reader reader = new InputStreamReader(fileStream); //wrap a Reader around the InputStream&lt;br /&gt;
     BufferedReader lineReader = new BufferedReader(reader); //wrap a BufferedReader around the Reader&lt;br /&gt;
     try {&lt;br /&gt;
         String line = lineReader.readLine();&lt;br /&gt;
         while (line != null) { //if readLine returns null, file end is reached&lt;br /&gt;
             System.out.println(line);&lt;br /&gt;
             line = lineReader.readLine();&lt;br /&gt;
         }&lt;br /&gt;
     } catch (IOException e) {&lt;br /&gt;
         System.out.println(&amp;quot;An unknown IOException occured while reading the file.&amp;quot;);&lt;br /&gt;
     } catch (EOFException e) {&lt;br /&gt;
         System.out.println(&amp;quot;Unexpected end of File found.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jetzt würde der Javacompiler die Methode compilieren. Sollte eine Exception auftreten, so wird dies dem Benutzer auf der Konsole mitgeteilt und die Ausführung der Methode abgebrochen. Der try-catch-Mechanismus funktioniert folgendermaßen: Wenn in dem Block zwischen try und catch eine Exception auftritt, wird die Ausführung des Blocks abgebrochen und es geht im passenden catch-Block weiter. Dabei ist passend derjenige Block, dessen gefangene Klasse derjenige Vorfahre der tatsächlich ausgelösten Exceptionklasse ist, der in der Vererbungshierarchie am nächsten daran ist.&lt;br /&gt;
Man sollte die Blöcke zwischen try und catch so klein wie sinnvoll möglich halten. Insbesondere sollte man sich davor hüten, ganze Methoden in ein großes try-catch einzubauen, weil dann die Fehlerbehandlung ungenau und die Fehlersuche schwieriger wird. Eine gute Möglichkeit zum Fehler finden ist es, im catch Block die Methode printStackTrace der Exception aufzurufen. Andererseits sollte in einem fertigen Programm das try-catch Konzept nur dann genutzt werden, wenn man auch tatsächlich den Fehler behandeln kann.&lt;br /&gt;
&lt;br /&gt;
Aus dieser Anforderung ergibt sich Notwendigkeit, die zweite Möglichkeit Exceptions zu behandeln zu benutzen. Hier werden auftretende Exceptions nicht per try-catch gefangen, weil man ebend keine sinnvolle Fehlerbehandlung im catch-Block anbieten kann. Dem Nutzer unserer Funktion muss man dies mitteilen, indem man dies hinter der Parameterliste per throws ankündigt. Wird dann in unserer Methode eine entsprechende Exception ausgelöst und nicht behandelt, so wird sie einfach an die aufrufende Methode &amp;quot;weitergeworfen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Weiter Informationen für Interessierte gibt es hier (http://java.sun.com/docs/books/tutorial/essential/exceptions/index.html).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das wars zu diesem Thema. Falls jemand so weit durchgehalten hat, danken wir für die Aufmerksamkeit :)&lt;br /&gt;
Wir hoffen, dass ihr jetzt ein klein wenig mehr mit den Mechanismen die Java anbietet vertraut seid und regen Gebrauch von der großen Klassenbibliothek machen werdet.&lt;br /&gt;
&lt;br /&gt;
==TODOs==&lt;br /&gt;
&lt;br /&gt;
eventuell Konstruktor für Apfel und Obst überall einbauen und nutzen&lt;br /&gt;
&lt;br /&gt;
Link für Streams und &amp;quot;Aufsätze&amp;quot;&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_2/Vorlesung_2&amp;diff=7119</id>
		<title>Javakurs2006/Tag 2/Vorlesung 2</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_2/Vorlesung_2&amp;diff=7119"/>
		<updated>2006-04-04T11:53:44Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Die Methode equals(Objoct o) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Kleine Wiederholung==&lt;br /&gt;
&lt;br /&gt;
Klassen beinhalten zusammengehörige Daten und Methoden. Mit new erzeugt man Instanzen dieser Klassen. Jede Instanz kann eigene Werte der zugehörigen Daten enthalten. Ein Teil der im Quellcode dieses Textes enthaltenen Kommentare erklären Syntax und hätten in einem &amp;quot;echten&amp;quot; Programm nichts zu suchen.&lt;br /&gt;
&lt;br /&gt;
 //file: Apfel.java&lt;br /&gt;
 class Apfel {&lt;br /&gt;
     String farbe;&lt;br /&gt;
     int gewicht; //in Gramm&lt;br /&gt;
     &lt;br /&gt;
     Apfel (String farb, int gew) { //Konstuktor&lt;br /&gt;
         farbe = farb; //eigentlich this.farbe =farb, ist aber unnötig&lt;br /&gt;
         gewicht = gew;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void essen() { //eine Methode&lt;br /&gt;
         gewicht = 0;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //file: Beispiel.java&lt;br /&gt;
 public Beispiel {&lt;br /&gt;
     public static void main( String args[] ) {&lt;br /&gt;
         Apfel boskop1 = new Apfel(&amp;quot;rot&amp;quot;, 175);&lt;br /&gt;
         Apfel boskop2 = new Apfel(&amp;quot;grün&amp;quot;, 180);&lt;br /&gt;
         &lt;br /&gt;
         System.out.println(&amp;quot;boskop1 (&amp;quot; +&lt;br /&gt;
             boskop1.farbe + &amp;quot;): &amp;quot; + boskop1.gewicht + &amp;quot; gramm&amp;quot;);&lt;br /&gt;
         System.out.println(&amp;quot;boskop2 (&amp;quot; +&lt;br /&gt;
             boskop2.farbe + &amp;quot;): &amp;quot; + boskop2.gewicht + &amp;quot;gramm&amp;quot;);        &lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Vererbung==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In objektorientierten Programmiersprachen gibt es ein Konzept, dass sich Vererbung nennt. Eine Klasse erbt dann das Verhalten (also die Methoden) und auch die Daten von einer anderen Klasse. In Java benutzt man zum Vererben das Schlüsselwort extends.&lt;br /&gt;
&lt;br /&gt;
 //File: Obst.java&lt;br /&gt;
 class Obst {&lt;br /&gt;
 	String farbe;&lt;br /&gt;
 	int gewicht; //in Gramm&lt;br /&gt;
  	&lt;br /&gt;
 	void essen() {&lt;br /&gt;
 		gewicht = 0;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File: Apfel.java&lt;br /&gt;
 class Apfel extends Obst {&lt;br /&gt;
 	String geerntetIn;&lt;br /&gt;
 	 &lt;br /&gt;
 	void schaelen() {&lt;br /&gt;
 		gewicht = gewicht - 10;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Klasse Apfel im Beispiel hat alle Methoden und Daten von der Klasse Obst geerbt. Das heißt Instanzen dieser Klasse besitzen eine Farbe, ein Gewicht und man kann sie essen.&lt;br /&gt;
&lt;br /&gt;
Wer mehr über Objektorientierung und Vererbung erfahren möchte, kann entweder eins der unzähligen verfügbaren Bücher zu dem Thema zur Hand nehmen. Alternativ könnte man auch diesen link (http://java.sun.com/docs/books/tutorial/java/concepts/index.html) verfolgen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Die Klasse Object==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Java gibt es eine Klasse Object, von der jede andere Klasse abgeleitet ist. Wenn man kein extends hinschreibt, wird vom Compiler sozusagen das &amp;quot;extends Object&amp;quot; ergänzt. Dies geschieht intern, also ohne Veränderung in eurem Quellcode.&lt;br /&gt;
&lt;br /&gt;
Einige Methoden von Object sind für uns sehr nützlich, weshalb sie hier kurz vorgestellt werden sollen. Doch eins noch zum Wort Objekt: Die Bezeichnung Objekt wird oftmals sowohl für Klassen als auch für Instanzen von Klassen benutzt, deshalb immer schauen welche Bedeutung wohl gerade gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird hier Obje&amp;lt;b&amp;gt;k&amp;lt;/b&amp;gt;t in der Bedeutung von Instanz benutzt und Obje&amp;lt;b&amp;gt;c&amp;lt;/b&amp;gt;t, wenn die besondere Klasse Object gemeint ist.&lt;br /&gt;
&lt;br /&gt;
===Die Methode toString()===&lt;br /&gt;
&lt;br /&gt;
Nun aber zu den genannten nützlichen Mehtoden: Die Methode toString() liefert einen String, der die Instanz beschreibt. Doch woher soll die Methode (die ja in Object angelegt wurde) wissen, wie man unsere spezielle Instanz treffend in einem String beschreibt?&lt;br /&gt;
&lt;br /&gt;
Dazu kann man die Methode überschreiben. Man macht das, indem man sie einfach in der eigenen Klasse noch einmal definiert.&lt;br /&gt;
&lt;br /&gt;
 //File: Apfel.java&lt;br /&gt;
 class Apfel extends Obst {&lt;br /&gt;
 	String geerntetIn;&lt;br /&gt;
 	&lt;br /&gt;
 	void schaelen() {&lt;br /&gt;
 		gewicht = gewicht - 10;&lt;br /&gt;
 	}&lt;br /&gt;
 	 &lt;br /&gt;
 	String toString() {&lt;br /&gt;
 		String description = &amp;quot;Ein Apfel, geerntet  in &amp;quot; + geerntetIn;&lt;br /&gt;
 		return description; &lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Ruft man nun auf einer Instanz von Apfel toString auf, so wird die in Apfel definierte Version benutzt. Die Methode toString() ist unter anderem deshalb so wichtig, weil sie von System.out.println() benutzt wird, um Instanzen beliebiger Nachfahren von Object auf der Konsole auszugeben. Die Methode printMe() aus der vorhergehenden Übung hatte die gleiche Funktion. Nur arbeitet  println() mit toString(), weshalb es sinnvoll wäre printMe() in toString() umzubenennen.&lt;br /&gt;
&lt;br /&gt;
===Die Methode equals(Object o)===&lt;br /&gt;
&lt;br /&gt;
Eine weitere wichtige Methode von Object ist equals(Object o). Hiermit kann, wie der Name schon sagt die Gleichheit zweier Objekte festgestellt werden. Nun wird sich vielleicht der ein oder andere fragen, warum man nicht den Vergleichsoperator == benutzt, sondern eine eigene Methode dafür schreibt. Warum das so ist, soll an einem Codebeispiel verdeutlicht werden.&lt;br /&gt;
&lt;br /&gt;
 public static void main(String []args) {&lt;br /&gt;
 	Apfel apfel1 = new Apfel();&lt;br /&gt;
 	apfel1.farbe = &amp;quot;grün&amp;quot;;&lt;br /&gt;
 	apfel1.geerntetIn = &amp;quot;Berlin&amp;quot;;&lt;br /&gt;
 	apfel1.gewicht = 215;&lt;br /&gt;
  	&lt;br /&gt;
 	Apfel apfel2 = new Apfel();&lt;br /&gt;
 	apfel2.farbe = &amp;quot;grün&amp;quot;;&lt;br /&gt;
 	apfel2.geerntetIn = &amp;quot;Brandenburg&amp;quot;;&lt;br /&gt;
 	apfel2.gewicht = 215;&lt;br /&gt;
  	&lt;br /&gt;
 	Apfel apfel3 = apfel2;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Der Operator == gibt genau dann true zurück, wenn die Werte der beiden verglichenen Dinge identisch sind. Bei eingebauten Datentypen (int, double) verhält er sich wie erwartet. Der Wert eines Objektes hingegen ist die Identität des Objektes, und nicht sein Inhalt. Deshalb würde apfel1 == apfel2 false zurückgeben, weil es sich um zwei verschiedene Objekte handelt. Wir hätten aber gern eine Methode, die uns sagt, dass diese Äpfel insofern gleich sind, dass sie die gleichen Eigenschaften besitzen. Dabei ist zu beachten, dass wir für die Gleichheit zweier Äpfel hier nur das Gewicht und die Farbe heranziehen.Genau dies sollte equals realisieren.&lt;br /&gt;
&lt;br /&gt;
 class Apfel extends Obst {&lt;br /&gt;
 	String geerntetIn;&lt;br /&gt;
 	&lt;br /&gt;
 	void schaelen() {&lt;br /&gt;
 		gewicht = gewicht - 10;&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	String toString() {&lt;br /&gt;
 		String description = &amp;quot;Ein Apfel, geerntet  in &amp;quot; + geerntetIn;&lt;br /&gt;
 	}&lt;br /&gt;
 	 &lt;br /&gt;
 	boolean equals(Object o) {&lt;br /&gt;
 		Apfel andererApfel = (Apfel)o;&lt;br /&gt;
 		return farbe.equals(andererApfel.farbe) &amp;amp;&amp;amp;&lt;br /&gt;
 			gewicht == andererApfel.gewicht;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Im Beispiel für equals gibt es gleich zwei Dinge, die einer weiteren Erklärung bedürfen: In der ersten Zeile machen wir aus der Intanz von Object, mit dem wir vergleichen einen Apfel. Diesen Vorgang nennt man casten.  Das Programm wird an dieser Stelle mit einer entsprechenden Fehlermeldung beendet, wenn der Parameter o kein Apfel ist. Das ist zwar nicht schön, macht aber trotzdem Sinn, da eine Gleichheit zwischen Äpfeln und beliebigen Objekten nicht zwangsläufig definiert ist. Dies ist zugegebenermaßen noch nicht ganz zufriedenstellend, da das Programm einfach beendet würde, wenn Apfel mit Autos zu vergleichen, obwohl man sicher sagen könnte, dass die beiden unterschiedlich sind. Wer hierzu noch etwas mehr lesen möchte, kann sich hier (http://www.galileocomputing.de/openbook/javainsel3/javainsel_030003.htm#Rxxjavainsel_030003281GleichheitvonObjektenunddieMethodeequals) vertiefen.&lt;br /&gt;
&lt;br /&gt;
Die zweite Sache, die auffällt: das Gewicht wird mit == verglichen, warum nicht auch mit equals? Die Antwort darauf ist eigentlich recht einfach: gewicht ist vom Typ int, der ein primitiver Datentyp ist. Damit erbt er nicht von Object, und bietet demnach auch keine Methode equals an. Wie oben schon erwähnt liefert == bei primitiven Datentypen ja auch das gewünschte Ergebnis.&lt;br /&gt;
&lt;br /&gt;
Eine Anmerkung hierzu ist noch wichtig: Die oben vorgestellte Implementierung von equals funktioniert für unsere Zwecke. Dennoch ist sie unsauber und erfüllt nicht die Anforderungen, die sun in seiner Klassenbibliothek an equals stellt. Dies genauer zu erläutern würde den Rahmen unseres Kurses sprengen, näheres dazu findet man unter anderem im Link zwei Absätze höher. Die genauen Anforderungen an die Implementierung der Methode equals sind zu finden in der Java API Referenz (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html).&lt;br /&gt;
&lt;br /&gt;
==Comparable==&lt;br /&gt;
&lt;br /&gt;
Manchmal reicht es nicht aus, zu wissen zwei Objekte gleich sind. Oft wollen wir Objekte ordnen, wozu wir eine Funktion brauchen die uns mitteilt welches von zwei Objekten &amp;quot;größer&amp;quot; ist. Eine solche Funktion ist compareTo(Object o). Im Gegensatz zu equals und toString ist sie allerdings keine Methode von Object, da es Klassen gibt, deren Objekte man nicht ordnen kann. Ein Beispiel hierfür wären Farbtöne, für die es schwer fällt eine natürliche Ordnung zu finden. Nun könnten wir für unsere eigenen Klassen, wo das Ordnen Sinn macht einfach ein compareTo implementieren. Würden wir dies einfach so tun könnten wir allerdings nicht einen Algorithmus benutzen, den jemand anderes zum Ordnen seiner eigenen Klasse, die compareTo implementiert geschrieben hat:&lt;br /&gt;
&lt;br /&gt;
 //File: MyClass.java&lt;br /&gt;
 class MyClass {&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(MyClass o) {&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File: SomeonesClass.java&lt;br /&gt;
 class SomeonesClass {&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(SomeonesClass o) {&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File Utility.java&lt;br /&gt;
 class Utility {&lt;br /&gt;
 	static sort(SomeonesClass daten[]) {&lt;br /&gt;
 		//sortiere daten mittels compareTo&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier kann man kein array vom Typ MyClass[] als parameter von sort übergeben, da es sich um zwei verschiedene Typen handelt. Um dieses Manko zu umgehen gibt es in Java Interfaces. Sie stellen eine Vereinbarung darüber dar, welche Methoden eine Klasse anbietet. Im Gegensatz zur Vererbung gibt es aber hier beim Interface noch keine Vorgabe, wie diese Methoden funktionieren. Das Interface schreibt nur die Namen, Art der Parameter und des Rückgabewertes von Methoden vor. Comparable ist ein solches Interface, dass schon in der Java API vorgegeben ist. Es schreibt vor, dass Klassen die dieses Interface implementieren die Methode int compareTo(Object o) anbieten müssen.&lt;br /&gt;
&lt;br /&gt;
Modifizieren wir also unser Beispiel so, dass wir das Interface Comparable nutzen.&lt;br /&gt;
	&lt;br /&gt;
 //File: MyClass.java&lt;br /&gt;
 class MyClass implements Comparable{&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(Object o) {&lt;br /&gt;
 		MyClass parameter = (MyClass)o;&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File: SomeonesClass.java&lt;br /&gt;
 class SomeonesClass implements Comparable{&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(Object o) {&lt;br /&gt;
 		SomeonesClass parameter = (SomeonesClass)o;&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File Utility.java&lt;br /&gt;
 class Utility {&lt;br /&gt;
 	static sort(Comparable daten[]) {&lt;br /&gt;
 		//sortiere daten mittels compareTo&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Nun kann die Methode sort beliebige arrays übergeben bekommen, deren Inhalt das Interface Comparable implementiert. Darüber wird dieser Mehtode zugesichert, dass jedes Element dieses arrays über die Methode compareTo verfügt und somit sich mit anderen Elementen des arrays vergleichen lässt.&lt;br /&gt;
&lt;br /&gt;
Noch ein paar Worte zum compareTo selbst: Diese Methode liefert uns als Rückgabewert eine ganze Zahl. Ist diese Zahl kleiner als 0, so ist die Instanz, auf der sie aufgerufen wurde kleiner als der übergebene Parameter (this &amp;lt; o). Ist der Rückgabewert genau 0, so ist this gleich o. Letzlich ist this größer als o, wenn der Rückgabewert von compareTo größer als 0 ist. Auch an die Methode compareTo gibt es in der API Referenz definierte Andorderungen (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Comparable.html) , die wir im Rahmen unserer Veranstaltung aber außen vor lassen wollen.&lt;br /&gt;
&lt;br /&gt;
==Java API - Javas Klassenbibliothek==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein großer Vorteil von Java gegenüber anderen Programmiersprachen besteht darin, dass es eine Vielzahl vereinheitlichter und schon mitgelieferter Klassen und Interfaces gibt. Die Sammlung dieser Klassen und Interfaces nennt man Java API. Es gibt auf der Website von Sun(java.sun.com) eine sehr umfassende Dokumentation dieser API(http://java.sun.com/j2se/1.4.2/docs/api/), die allerdings nicht immer einfach zu bedienen ist. Wenn man weiß, nach welcher Klasse man sucht findet man meist recht schnell die gewünschten Informationen. Hat man aber nur eine vage Idee, was die Klasse tun soll muss man meist noch andere Quellen nutzen, um an den Namen der gesuchten Klasse heranzukommen. Hierzu bieten sich natürlich Suchmaschinen wie google an.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wollen wir einige besonders Häufig verwendete Module und Konzepte der Java API vorstellen. Wie man ein solches Modul in eigenen Programmen verwendet, werden wir im ersten vorgestellten Modul etwas näher beleuchten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Math===&lt;br /&gt;
&lt;br /&gt;
Das Modul Math bietet, wenig überraschend, alle möglichen Methoden und Konstanten die man für mathematische Berechnungen brauchen könnte. Einige Konstanten sind zum Beispiel &lt;br /&gt;
&lt;br /&gt;
 public static final double E;&lt;br /&gt;
 public static final double PI;&lt;br /&gt;
&lt;br /&gt;
Diese beiden Konstanten sind jeweils mit drei zusätzlichen Schlüsselwörtern gekennzeichnet, die hier zumindest grob erklärt werden sollen.&lt;br /&gt;
&lt;br /&gt;
public bedeutet, dass die entsprechende Variable oder Methode auch außerhalb der definierenden Klasse und außerhalb von Math benutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Von Daten, die satic definiert sind hat nicht jede Instanz eine eigene Ausprägung, sondern alle Instanzen der Klasse teilen sich diese Variable.&lt;br /&gt;
Mehtoden die static definiert sind, brauchen keine Instanz der Klasse um aufgerufen zu werden. Demnach kennen sie allerdings auch this nicht und können daher nicht auf Daten einer Instanz der Klasse arbeiten.&lt;br /&gt;
&lt;br /&gt;
Das Schlüsselwort final an einer Variable macht diese zur Konstante. Das heißt sie wird einmal bei der Deklaration festgelegt und kann dann nicht mehr verändert werden.&lt;br /&gt;
&lt;br /&gt;
Die einzelnen Methoden, die Math bietet sollen hier nicht im Detail besprochen werden, da sie recht einfach in der API-Dokumentation von Java zu finden sind. Dennoch soll anhand des Sinus ein Aufruf einer Methode aus Math hier gezeigt werden, um die nötige Syntax zu zeigen.&lt;br /&gt;
&lt;br /&gt;
 public static void main(String args[]) {&lt;br /&gt;
     System.out.print( Math.sin(Math.PI / 2) );&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Ausgabe: 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine sehr nützliche Methode aus Math soll hier noch kurz vorgestellt werden, da man sie nicht unbedingt hier vermuten würde: Die Methode random liefert ohne Parameter zu erwarten eine Zufallszahl zwischen 0 und 1. Mit Hilfe dieser Methode kann man gleichverteilte und beliebige Zufallszahlen in den Bereichen von float und int erzeugen.&lt;br /&gt;
&lt;br /&gt;
 public static void main(String args[]) {&lt;br /&gt;
     double random1 = Math.random(); //erzeugt eine Zahl im Bereich [0;1)&lt;br /&gt;
     double random2 = Math.random() * 30 + 5; //erzeugt eine Zahl im Bereich [5;34)&lt;br /&gt;
     int random3 = (int) (Math.random() * 13); //erzeugt eine natürliche Zahl im Bereich [0;12]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Streams===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres nützliches Konzept, dass die Java API uns bietet sind Streams. Streams (zu deutsch: Datenströme) beschreiben Datenquellen oder Ziele, an die man Daten schicken kann. Dabei wird von der tatsächlichen Datenquelle oder vom tatsächlichen Ziel abstrahiert, um für alle &amp;quot;Sender&amp;quot; oder &amp;quot;Empfänger&amp;quot; von Daten die gleichen Mehtoden nutzen zu können. So können sich hinter einem Datenstrom beispielsweise eine Datei, die von der Tastatur kommenden Zeichen oder aber eine Netzwerkverbindung verbergen. Der Programmierer muss sich aber um diese Details, wenn er erstmal ein entsprechendes Datenstrom-Objekt erstellt hat keine Gedanken mehr machen, weil er ebend auf einem Datenstrom arbeitet und nicht auf einer bestimmten Datenquelle. Hier ein paar Beispiele, wie man verschiedene Datenströme erstellt. Dabei ist generell zwischen InputStream und OutputStream zu unterscheiden, wobei der erstere Daten von außen an unser Programm heranträgt und der zweite Daten von unserem Programm an einen Empfänger übermittelt&lt;br /&gt;
&lt;br /&gt;
 import java.io.*&lt;br /&gt;
 &lt;br /&gt;
 //prints the ascii code for a specified number of keys pressed on the keyboard to the console&lt;br /&gt;
 static void printAsciiCodes(int keysToPrint) {&lt;br /&gt;
     InputStream keyboard = System.in; //get standard input stream (the keyboard)&lt;br /&gt;
     for (int i = 0; i &amp;lt; keysToPrint; i++) {&lt;br /&gt;
         int asciiCode = keyboard.read(); //wait for a key to be pressed&lt;br /&gt;
         System.out.print(asciiCode + &amp;quot; &amp;quot;); //print it&#039;s ascii code&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //prints the content of a file given by Name to the console bytewise&lt;br /&gt;
 static void printFile(String fileName) {&lt;br /&gt;
     InputStream file = new FileInputStream(fileName); //open a stream representing the file&lt;br /&gt;
     int byteRead = file.read(); //read first byte from the file&lt;br /&gt;
     while (byteRead != -1) { //while there is something to read&lt;br /&gt;
         System.out.print(byteRead + &amp;quot; &amp;quot;); //print the byte we read at last&lt;br /&gt;
         byteRead = file.read(); //read a new byte&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Im Beispiel kann man schön sein, dass der Mechanismus zum lesen eines bytes bei beiden Datenströmen der gleiche ist. Lediglich in der Erstellung des Datenstromes gibt es je nach Quelle Unterschiede. Die Funktionsweise ist für Ausgabeströme recht ähnlich. Nähere Informationen dazu findet man in der API-Reference, wenn man nach den Klassen OutputStream und FileOutputStream sucht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===BufferedReader===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im letzten Abschnitt haben wir gesehen, wie leicht es ist mit Hilfe von Streams Bytes aus verschiedenen Quellen zu lesen. Oftmals wollen wir aber keine einzelnen Bytes lesen, sondern wissen dass unsere Datenquelle uns einen Text liefert. Da Text meist in Zeilen strukturiert ist, wäre es schön eine Funktion zu haben die Zeilenweise Strings aus unserem Stream liest. Auch hierfür bietet uns die Java Klassenbibiliothek bereits eine Lösung: den BufferedReader. Seine readLine Methode liest eine Zeile aus. Das Problem an dem BufferedReader ist, dass wir zu seiner Instantiierung einen Reader benötigen. Schauen wir in der API Dokumentation nach, welche Arten von Readern es gibt, so fällt der InputStreamReader auf. Schaut man sich diesen genauer an, so enthält er auch einen Konstruktor, der einen InputStream als Parameter akzeptiert.&lt;br /&gt;
&lt;br /&gt;
Nun bleibt es unsere Aufgabe zuerst einen Datenstrom aus unserer Datenquelle zu erzeugen, dann darauf einen Reader zu konstruieren um am Schluß darauf einen BufferedReader zu setzen. Dieses Vorgehen wirkt zwar etwas klobig, doch es gibt in der Klassenbibliothek bisher (bis Java 1.4.2) keine bessere Lösung dafür. Es folgt ein kleines Beispiel, dass den Inhalt einer Textdatei zeilenweise auf der Konsole ausgibt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 import java.io.*;&lt;br /&gt;
 &lt;br /&gt;
 static void printTextFile(String fileName) {&lt;br /&gt;
     InputStream fileStream = new FileInputStream(fileName);&lt;br /&gt;
     Reader reader = new InputStreamReader(fileStream); //wrap a Reader around the InputStream&lt;br /&gt;
     BufferedReader lineReader = new BufferedReader(reader); //wrap a BufferedReader around the Reader&lt;br /&gt;
     String line = lineReader.readLine();&lt;br /&gt;
     while (line != null) { //if readLine returns null, file end is reached&lt;br /&gt;
         System.out.println(line);&lt;br /&gt;
         line = lineReader.readLine();&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Exceptions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Versucht man die Programme aus den letzten beiden Abschnitten zu compilieren, so wird man feststellen dass sie nicht lauffähig sind. Mit der Tatsache, dass Streams so universell sind, handelt man sich natürlich auch alle möglichen Probleme der verschiedenen Medien, die ein Stream verstecken kann, ein. Um die Behandlung dessen zu vereinfachen und dem Programmierer die Chance zu geben an der richtigen Stelle auf Fehler zu reagieren gibt es Exceptions. An dieser Stelle soll es genügen zu erkennen, wann man von einer Methode erwarten muss, dass sie eine Exception auslöst und wie man damit umgeht.&lt;br /&gt;
&lt;br /&gt;
Methoden, die eine Exception auslösen können müssen dies ihrer Umgebung mitteilen. Dies geschieht, mit dem Schlüsselwort throws gefolgt von einer kommaseparierten Liste aller Exceptions, die sie auslösen können.&lt;br /&gt;
&lt;br /&gt;
 public class InputStream {&lt;br /&gt;
     ...&lt;br /&gt;
     public int read() throws IOException {&lt;br /&gt;
         ...&lt;br /&gt;
     }&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Bei den Klassen aus der Java Klassenbibliothek kann man der API-Reference entnehmen, welche Exceptions sie auslösen können. Jede mögliche Exception muss behandelt werden, dazu gibt es zwei Wege.Der erste funktioniert folgendermaßen: Man fasst den Teil einer Mehtode, der eine Exception auslösen kann in ein try-catch-Konstrukt ein. Wie dies aussieht soll gleich am Beispiel der Methode printTextFile gezeigt werden.&lt;br /&gt;
&lt;br /&gt;
 import java.io.*; &lt;br /&gt;
 &lt;br /&gt;
 static void printTextFile(String fileName) {&lt;br /&gt;
     InputStream fileStream = null;&lt;br /&gt;
     try {&lt;br /&gt;
         fileStream = new FileInputStream(fileName);&lt;br /&gt;
     } catch (FileNotFoundException) {&lt;br /&gt;
         System.out.println(&amp;quot;The file &amp;quot; + fileName + &amp;quot; could not be found.&amp;quot;);&lt;br /&gt;
         return; //stop execution of method... cannot print from non existing file&lt;br /&gt;
     }&lt;br /&gt;
     Reader reader = new InputStreamReader(fileStream); //wrap a Reader around the InputStream&lt;br /&gt;
     BufferedReader lineReader = new BufferedReader(reader); //wrap a BufferedReader around the Reader&lt;br /&gt;
     try {&lt;br /&gt;
         String line = lineReader.readLine();&lt;br /&gt;
         while (line != null) { //if readLine returns null, file end is reached&lt;br /&gt;
             System.out.println(line);&lt;br /&gt;
             line = lineReader.readLine();&lt;br /&gt;
         }&lt;br /&gt;
     } catch (IOException e) {&lt;br /&gt;
         System.out.println(&amp;quot;An unknown IOException occured while reading the file.&amp;quot;);&lt;br /&gt;
     } catch (EOFException e) {&lt;br /&gt;
         System.out.println(&amp;quot;Unexpected end of File found.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jetzt würde der Javacompiler die Methode compilieren. Sollte eine Exception auftreten, so wird dies dem Benutzer auf der Konsole mitgeteilt und die Ausführung der Methode abgebrochen. Der try-catch-Mechanismus funktioniert folgendermaßen: Wenn in dem Block zwischen try und catch eine Exception auftritt, wird die Ausführung des Blocks abgebrochen und es geht im passenden catch-Block weiter. Dabei ist passend derjenige Block, dessen gefangene Klasse derjenige Vorfahre der tatsächlich ausgelösten Exceptionklasse ist, der in der Vererbungshierarchie am nächsten daran ist.&lt;br /&gt;
Man sollte die Blöcke zwischen try und catch so klein wie sinnvoll möglich halten. Insbesondere sollte man sich davor hüten, ganze Methoden in ein großes try-catch einzubauen, weil dann die Fehlerbehandlung ungenau und die Fehlersuche schwieriger wird. Eine gute Möglichkeit zum Fehler finden ist es, im catch Block die Methode printStackTrace der Exception aufzurufen. Andererseits sollte in einem fertigen Programm das try-catch Konzept nur dann genutzt werden, wenn man auch tatsächlich den Fehler behandeln kann.&lt;br /&gt;
&lt;br /&gt;
Aus dieser Anforderung ergibt sich Notwendigkeit, die zweite Möglichkeit Exceptions zu behandeln zu benutzen. Hier werden auftretende Exceptions nicht per try-catch gefangen, weil man ebend keine sinnvolle Fehlerbehandlung im catch-Block anbieten kann. Dem Nutzer unserer Funktion muss man dies mitteilen, indem man dies hinter der Parameterliste per throws ankündigt. Wird dann in unserer Methode eine entsprechende Exception ausgelöst und nicht behandelt, so wird sie einfach an die aufrufende Methode &amp;quot;weitergeworfen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Weiter Informationen für Interessierte gibt es hier (http://java.sun.com/docs/books/tutorial/essential/exceptions/index.html).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das wars zu diesem Thema. Falls jemand so weit durchgehalten hat, danken wir für die Aufmerksamkeit :)&lt;br /&gt;
Wir hoffen, dass ihr jetzt ein klein wenig mehr mit den Mechanismen die Java anbietet vertraut seid und regen Gebrauch von der großen Klassenbibliothek machen werdet.&lt;br /&gt;
&lt;br /&gt;
==TODOs==&lt;br /&gt;
&lt;br /&gt;
eventuell Konstruktor für Apfel und Obst überall einbauen und nutzen&lt;br /&gt;
&lt;br /&gt;
Link für Streams und &amp;quot;Aufsätze&amp;quot;&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_2/Vorlesung_2&amp;diff=7118</id>
		<title>Javakurs2006/Tag 2/Vorlesung 2</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_2/Vorlesung_2&amp;diff=7118"/>
		<updated>2006-04-04T11:53:20Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Die Methode toString() muss etwas zurückgeben! return eingefuegt (Sven) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Kleine Wiederholung==&lt;br /&gt;
&lt;br /&gt;
Klassen beinhalten zusammengehörige Daten und Methoden. Mit new erzeugt man Instanzen dieser Klassen. Jede Instanz kann eigene Werte der zugehörigen Daten enthalten. Ein Teil der im Quellcode dieses Textes enthaltenen Kommentare erklären Syntax und hätten in einem &amp;quot;echten&amp;quot; Programm nichts zu suchen.&lt;br /&gt;
&lt;br /&gt;
 //file: Apfel.java&lt;br /&gt;
 class Apfel {&lt;br /&gt;
     String farbe;&lt;br /&gt;
     int gewicht; //in Gramm&lt;br /&gt;
     &lt;br /&gt;
     Apfel (String farb, int gew) { //Konstuktor&lt;br /&gt;
         farbe = farb; //eigentlich this.farbe =farb, ist aber unnötig&lt;br /&gt;
         gewicht = gew;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void essen() { //eine Methode&lt;br /&gt;
         gewicht = 0;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //file: Beispiel.java&lt;br /&gt;
 public Beispiel {&lt;br /&gt;
     public static void main( String args[] ) {&lt;br /&gt;
         Apfel boskop1 = new Apfel(&amp;quot;rot&amp;quot;, 175);&lt;br /&gt;
         Apfel boskop2 = new Apfel(&amp;quot;grün&amp;quot;, 180);&lt;br /&gt;
         &lt;br /&gt;
         System.out.println(&amp;quot;boskop1 (&amp;quot; +&lt;br /&gt;
             boskop1.farbe + &amp;quot;): &amp;quot; + boskop1.gewicht + &amp;quot; gramm&amp;quot;);&lt;br /&gt;
         System.out.println(&amp;quot;boskop2 (&amp;quot; +&lt;br /&gt;
             boskop2.farbe + &amp;quot;): &amp;quot; + boskop2.gewicht + &amp;quot;gramm&amp;quot;);        &lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Vererbung==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In objektorientierten Programmiersprachen gibt es ein Konzept, dass sich Vererbung nennt. Eine Klasse erbt dann das Verhalten (also die Methoden) und auch die Daten von einer anderen Klasse. In Java benutzt man zum Vererben das Schlüsselwort extends.&lt;br /&gt;
&lt;br /&gt;
 //File: Obst.java&lt;br /&gt;
 class Obst {&lt;br /&gt;
 	String farbe;&lt;br /&gt;
 	int gewicht; //in Gramm&lt;br /&gt;
  	&lt;br /&gt;
 	void essen() {&lt;br /&gt;
 		gewicht = 0;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File: Apfel.java&lt;br /&gt;
 class Apfel extends Obst {&lt;br /&gt;
 	String geerntetIn;&lt;br /&gt;
 	 &lt;br /&gt;
 	void schaelen() {&lt;br /&gt;
 		gewicht = gewicht - 10;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Klasse Apfel im Beispiel hat alle Methoden und Daten von der Klasse Obst geerbt. Das heißt Instanzen dieser Klasse besitzen eine Farbe, ein Gewicht und man kann sie essen.&lt;br /&gt;
&lt;br /&gt;
Wer mehr über Objektorientierung und Vererbung erfahren möchte, kann entweder eins der unzähligen verfügbaren Bücher zu dem Thema zur Hand nehmen. Alternativ könnte man auch diesen link (http://java.sun.com/docs/books/tutorial/java/concepts/index.html) verfolgen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Die Klasse Object==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Java gibt es eine Klasse Object, von der jede andere Klasse abgeleitet ist. Wenn man kein extends hinschreibt, wird vom Compiler sozusagen das &amp;quot;extends Object&amp;quot; ergänzt. Dies geschieht intern, also ohne Veränderung in eurem Quellcode.&lt;br /&gt;
&lt;br /&gt;
Einige Methoden von Object sind für uns sehr nützlich, weshalb sie hier kurz vorgestellt werden sollen. Doch eins noch zum Wort Objekt: Die Bezeichnung Objekt wird oftmals sowohl für Klassen als auch für Instanzen von Klassen benutzt, deshalb immer schauen welche Bedeutung wohl gerade gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird hier Obje&amp;lt;b&amp;gt;k&amp;lt;/b&amp;gt;t in der Bedeutung von Instanz benutzt und Obje&amp;lt;b&amp;gt;c&amp;lt;/b&amp;gt;t, wenn die besondere Klasse Object gemeint ist.&lt;br /&gt;
&lt;br /&gt;
===Die Methode toString()===&lt;br /&gt;
&lt;br /&gt;
Nun aber zu den genannten nützlichen Mehtoden: Die Methode toString() liefert einen String, der die Instanz beschreibt. Doch woher soll die Methode (die ja in Object angelegt wurde) wissen, wie man unsere spezielle Instanz treffend in einem String beschreibt?&lt;br /&gt;
&lt;br /&gt;
Dazu kann man die Methode überschreiben. Man macht das, indem man sie einfach in der eigenen Klasse noch einmal definiert.&lt;br /&gt;
&lt;br /&gt;
 //File: Apfel.java&lt;br /&gt;
 class Apfel extends Obst {&lt;br /&gt;
 	String geerntetIn;&lt;br /&gt;
 	&lt;br /&gt;
 	void schaelen() {&lt;br /&gt;
 		gewicht = gewicht - 10;&lt;br /&gt;
 	}&lt;br /&gt;
 	 &lt;br /&gt;
 	String toString() {&lt;br /&gt;
 		String description = &amp;quot;Ein Apfel, geerntet  in &amp;quot; + geerntetIn;&lt;br /&gt;
 		return description; &lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Ruft man nun auf einer Instanz von Apfel toString auf, so wird die in Apfel definierte Version benutzt. Die Methode toString() ist unter anderem deshalb so wichtig, weil sie von System.out.println() benutzt wird, um Instanzen beliebiger Nachfahren von Object auf der Konsole auszugeben. Die Methode printMe() aus der vorhergehenden Übung hatte die gleiche Funktion. Nur arbeitet  println() mit toString(), weshalb es sinnvoll wäre printMe() in toString() umzubenennen.&lt;br /&gt;
&lt;br /&gt;
===Die Methode equals(Objoct o)===&lt;br /&gt;
&lt;br /&gt;
Eine weitere wichtige Methode von Object ist equals(Object o). Hiermit kann, wie der Name schon sagt die Gleichheit zweier Objekte festgestellt werden. Nun wird sich vielleicht der ein oder andere fragen, warum man nicht den Vergleichsoperator == benutzt, sondern eine eigene Methode dafür schreibt. Warum das so ist, soll an einem Codebeispiel verdeutlicht werden.&lt;br /&gt;
&lt;br /&gt;
 public static void main(String []args) {&lt;br /&gt;
 	Apfel apfel1 = new Apfel();&lt;br /&gt;
 	apfel1.farbe = &amp;quot;grün&amp;quot;;&lt;br /&gt;
 	apfel1.geerntetIn = &amp;quot;Berlin&amp;quot;;&lt;br /&gt;
 	apfel1.gewicht = 215;&lt;br /&gt;
  	&lt;br /&gt;
 	Apfel apfel2 = new Apfel();&lt;br /&gt;
 	apfel2.farbe = &amp;quot;grün&amp;quot;;&lt;br /&gt;
 	apfel2.geerntetIn = &amp;quot;Brandenburg&amp;quot;;&lt;br /&gt;
 	apfel2.gewicht = 215;&lt;br /&gt;
  	&lt;br /&gt;
 	Apfel apfel3 = apfel2;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Der Operator == gibt genau dann true zurück, wenn die Werte der beiden verglichenen Dinge identisch sind. Bei eingebauten Datentypen (int, double) verhält er sich wie erwartet. Der Wert eines Objektes hingegen ist die Identität des Objektes, und nicht sein Inhalt. Deshalb würde apfel1 == apfel2 false zurückgeben, weil es sich um zwei verschiedene Objekte handelt. Wir hätten aber gern eine Methode, die uns sagt, dass diese Äpfel insofern gleich sind, dass sie die gleichen Eigenschaften besitzen. Dabei ist zu beachten, dass wir für die Gleichheit zweier Äpfel hier nur das Gewicht und die Farbe heranziehen.Genau dies sollte equals realisieren.&lt;br /&gt;
&lt;br /&gt;
 class Apfel extends Obst {&lt;br /&gt;
 	String geerntetIn;&lt;br /&gt;
 	&lt;br /&gt;
 	void schaelen() {&lt;br /&gt;
 		gewicht = gewicht - 10;&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	String toString() {&lt;br /&gt;
 		String description = &amp;quot;Ein Apfel, geerntet  in &amp;quot; + geerntetIn;&lt;br /&gt;
 	}&lt;br /&gt;
 	 &lt;br /&gt;
 	boolean equals(Object o) {&lt;br /&gt;
 		Apfel andererApfel = (Apfel)o;&lt;br /&gt;
 		return farbe.equals(andererApfel.farbe) &amp;amp;&amp;amp;&lt;br /&gt;
 			gewicht == andererApfel.gewicht;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Im Beispiel für equals gibt es gleich zwei Dinge, die einer weiteren Erklärung bedürfen: In der ersten Zeile machen wir aus der Intanz von Object, mit dem wir vergleichen einen Apfel. Diesen Vorgang nennt man casten.  Das Programm wird an dieser Stelle mit einer entsprechenden Fehlermeldung beendet, wenn der Parameter o kein Apfel ist. Das ist zwar nicht schön, macht aber trotzdem Sinn, da eine Gleichheit zwischen Äpfeln und beliebigen Objekten nicht zwangsläufig definiert ist. Dies ist zugegebenermaßen noch nicht ganz zufriedenstellend, da das Programm einfach beendet würde, wenn Apfel mit Autos zu vergleichen, obwohl man sicher sagen könnte, dass die beiden unterschiedlich sind. Wer hierzu noch etwas mehr lesen möchte, kann sich hier (http://www.galileocomputing.de/openbook/javainsel3/javainsel_030003.htm#Rxxjavainsel_030003281GleichheitvonObjektenunddieMethodeequals) vertiefen.&lt;br /&gt;
&lt;br /&gt;
Die zweite Sache, die auffällt: das Gewicht wird mit == verglichen, warum nicht auch mit equals? Die Antwort darauf ist eigentlich recht einfach: gewicht ist vom Typ int, der ein primitiver Datentyp ist. Damit erbt er nicht von Object, und bietet demnach auch keine Methode equals an. Wie oben schon erwähnt liefert == bei primitiven Datentypen ja auch das gewünschte Ergebnis.&lt;br /&gt;
&lt;br /&gt;
Eine Anmerkung hierzu ist noch wichtig: Die oben vorgestellte Implementierung von equals funktioniert für unsere Zwecke. Dennoch ist sie unsauber und erfüllt nicht die Anforderungen, die sun in seiner Klassenbibliothek an equals stellt. Dies genauer zu erläutern würde den Rahmen unseres Kurses sprengen, näheres dazu findet man unter anderem im Link zwei Absätze höher. Die genauen Anforderungen an die Implementierung der Methode equals sind zu finden in der Java API Referenz (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html).&lt;br /&gt;
&lt;br /&gt;
==Comparable==&lt;br /&gt;
&lt;br /&gt;
Manchmal reicht es nicht aus, zu wissen zwei Objekte gleich sind. Oft wollen wir Objekte ordnen, wozu wir eine Funktion brauchen die uns mitteilt welches von zwei Objekten &amp;quot;größer&amp;quot; ist. Eine solche Funktion ist compareTo(Object o). Im Gegensatz zu equals und toString ist sie allerdings keine Methode von Object, da es Klassen gibt, deren Objekte man nicht ordnen kann. Ein Beispiel hierfür wären Farbtöne, für die es schwer fällt eine natürliche Ordnung zu finden. Nun könnten wir für unsere eigenen Klassen, wo das Ordnen Sinn macht einfach ein compareTo implementieren. Würden wir dies einfach so tun könnten wir allerdings nicht einen Algorithmus benutzen, den jemand anderes zum Ordnen seiner eigenen Klasse, die compareTo implementiert geschrieben hat:&lt;br /&gt;
&lt;br /&gt;
 //File: MyClass.java&lt;br /&gt;
 class MyClass {&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(MyClass o) {&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File: SomeonesClass.java&lt;br /&gt;
 class SomeonesClass {&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(SomeonesClass o) {&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File Utility.java&lt;br /&gt;
 class Utility {&lt;br /&gt;
 	static sort(SomeonesClass daten[]) {&lt;br /&gt;
 		//sortiere daten mittels compareTo&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier kann man kein array vom Typ MyClass[] als parameter von sort übergeben, da es sich um zwei verschiedene Typen handelt. Um dieses Manko zu umgehen gibt es in Java Interfaces. Sie stellen eine Vereinbarung darüber dar, welche Methoden eine Klasse anbietet. Im Gegensatz zur Vererbung gibt es aber hier beim Interface noch keine Vorgabe, wie diese Methoden funktionieren. Das Interface schreibt nur die Namen, Art der Parameter und des Rückgabewertes von Methoden vor. Comparable ist ein solches Interface, dass schon in der Java API vorgegeben ist. Es schreibt vor, dass Klassen die dieses Interface implementieren die Methode int compareTo(Object o) anbieten müssen.&lt;br /&gt;
&lt;br /&gt;
Modifizieren wir also unser Beispiel so, dass wir das Interface Comparable nutzen.&lt;br /&gt;
	&lt;br /&gt;
 //File: MyClass.java&lt;br /&gt;
 class MyClass implements Comparable{&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(Object o) {&lt;br /&gt;
 		MyClass parameter = (MyClass)o;&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File: SomeonesClass.java&lt;br /&gt;
 class SomeonesClass implements Comparable{&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(Object o) {&lt;br /&gt;
 		SomeonesClass parameter = (SomeonesClass)o;&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File Utility.java&lt;br /&gt;
 class Utility {&lt;br /&gt;
 	static sort(Comparable daten[]) {&lt;br /&gt;
 		//sortiere daten mittels compareTo&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Nun kann die Methode sort beliebige arrays übergeben bekommen, deren Inhalt das Interface Comparable implementiert. Darüber wird dieser Mehtode zugesichert, dass jedes Element dieses arrays über die Methode compareTo verfügt und somit sich mit anderen Elementen des arrays vergleichen lässt.&lt;br /&gt;
&lt;br /&gt;
Noch ein paar Worte zum compareTo selbst: Diese Methode liefert uns als Rückgabewert eine ganze Zahl. Ist diese Zahl kleiner als 0, so ist die Instanz, auf der sie aufgerufen wurde kleiner als der übergebene Parameter (this &amp;lt; o). Ist der Rückgabewert genau 0, so ist this gleich o. Letzlich ist this größer als o, wenn der Rückgabewert von compareTo größer als 0 ist. Auch an die Methode compareTo gibt es in der API Referenz definierte Andorderungen (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Comparable.html) , die wir im Rahmen unserer Veranstaltung aber außen vor lassen wollen.&lt;br /&gt;
&lt;br /&gt;
==Java API - Javas Klassenbibliothek==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein großer Vorteil von Java gegenüber anderen Programmiersprachen besteht darin, dass es eine Vielzahl vereinheitlichter und schon mitgelieferter Klassen und Interfaces gibt. Die Sammlung dieser Klassen und Interfaces nennt man Java API. Es gibt auf der Website von Sun(java.sun.com) eine sehr umfassende Dokumentation dieser API(http://java.sun.com/j2se/1.4.2/docs/api/), die allerdings nicht immer einfach zu bedienen ist. Wenn man weiß, nach welcher Klasse man sucht findet man meist recht schnell die gewünschten Informationen. Hat man aber nur eine vage Idee, was die Klasse tun soll muss man meist noch andere Quellen nutzen, um an den Namen der gesuchten Klasse heranzukommen. Hierzu bieten sich natürlich Suchmaschinen wie google an.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wollen wir einige besonders Häufig verwendete Module und Konzepte der Java API vorstellen. Wie man ein solches Modul in eigenen Programmen verwendet, werden wir im ersten vorgestellten Modul etwas näher beleuchten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Math===&lt;br /&gt;
&lt;br /&gt;
Das Modul Math bietet, wenig überraschend, alle möglichen Methoden und Konstanten die man für mathematische Berechnungen brauchen könnte. Einige Konstanten sind zum Beispiel &lt;br /&gt;
&lt;br /&gt;
 public static final double E;&lt;br /&gt;
 public static final double PI;&lt;br /&gt;
&lt;br /&gt;
Diese beiden Konstanten sind jeweils mit drei zusätzlichen Schlüsselwörtern gekennzeichnet, die hier zumindest grob erklärt werden sollen.&lt;br /&gt;
&lt;br /&gt;
public bedeutet, dass die entsprechende Variable oder Methode auch außerhalb der definierenden Klasse und außerhalb von Math benutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Von Daten, die satic definiert sind hat nicht jede Instanz eine eigene Ausprägung, sondern alle Instanzen der Klasse teilen sich diese Variable.&lt;br /&gt;
Mehtoden die static definiert sind, brauchen keine Instanz der Klasse um aufgerufen zu werden. Demnach kennen sie allerdings auch this nicht und können daher nicht auf Daten einer Instanz der Klasse arbeiten.&lt;br /&gt;
&lt;br /&gt;
Das Schlüsselwort final an einer Variable macht diese zur Konstante. Das heißt sie wird einmal bei der Deklaration festgelegt und kann dann nicht mehr verändert werden.&lt;br /&gt;
&lt;br /&gt;
Die einzelnen Methoden, die Math bietet sollen hier nicht im Detail besprochen werden, da sie recht einfach in der API-Dokumentation von Java zu finden sind. Dennoch soll anhand des Sinus ein Aufruf einer Methode aus Math hier gezeigt werden, um die nötige Syntax zu zeigen.&lt;br /&gt;
&lt;br /&gt;
 public static void main(String args[]) {&lt;br /&gt;
     System.out.print( Math.sin(Math.PI / 2) );&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Ausgabe: 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine sehr nützliche Methode aus Math soll hier noch kurz vorgestellt werden, da man sie nicht unbedingt hier vermuten würde: Die Methode random liefert ohne Parameter zu erwarten eine Zufallszahl zwischen 0 und 1. Mit Hilfe dieser Methode kann man gleichverteilte und beliebige Zufallszahlen in den Bereichen von float und int erzeugen.&lt;br /&gt;
&lt;br /&gt;
 public static void main(String args[]) {&lt;br /&gt;
     double random1 = Math.random(); //erzeugt eine Zahl im Bereich [0;1)&lt;br /&gt;
     double random2 = Math.random() * 30 + 5; //erzeugt eine Zahl im Bereich [5;34)&lt;br /&gt;
     int random3 = (int) (Math.random() * 13); //erzeugt eine natürliche Zahl im Bereich [0;12]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Streams===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres nützliches Konzept, dass die Java API uns bietet sind Streams. Streams (zu deutsch: Datenströme) beschreiben Datenquellen oder Ziele, an die man Daten schicken kann. Dabei wird von der tatsächlichen Datenquelle oder vom tatsächlichen Ziel abstrahiert, um für alle &amp;quot;Sender&amp;quot; oder &amp;quot;Empfänger&amp;quot; von Daten die gleichen Mehtoden nutzen zu können. So können sich hinter einem Datenstrom beispielsweise eine Datei, die von der Tastatur kommenden Zeichen oder aber eine Netzwerkverbindung verbergen. Der Programmierer muss sich aber um diese Details, wenn er erstmal ein entsprechendes Datenstrom-Objekt erstellt hat keine Gedanken mehr machen, weil er ebend auf einem Datenstrom arbeitet und nicht auf einer bestimmten Datenquelle. Hier ein paar Beispiele, wie man verschiedene Datenströme erstellt. Dabei ist generell zwischen InputStream und OutputStream zu unterscheiden, wobei der erstere Daten von außen an unser Programm heranträgt und der zweite Daten von unserem Programm an einen Empfänger übermittelt&lt;br /&gt;
&lt;br /&gt;
 import java.io.*&lt;br /&gt;
 &lt;br /&gt;
 //prints the ascii code for a specified number of keys pressed on the keyboard to the console&lt;br /&gt;
 static void printAsciiCodes(int keysToPrint) {&lt;br /&gt;
     InputStream keyboard = System.in; //get standard input stream (the keyboard)&lt;br /&gt;
     for (int i = 0; i &amp;lt; keysToPrint; i++) {&lt;br /&gt;
         int asciiCode = keyboard.read(); //wait for a key to be pressed&lt;br /&gt;
         System.out.print(asciiCode + &amp;quot; &amp;quot;); //print it&#039;s ascii code&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //prints the content of a file given by Name to the console bytewise&lt;br /&gt;
 static void printFile(String fileName) {&lt;br /&gt;
     InputStream file = new FileInputStream(fileName); //open a stream representing the file&lt;br /&gt;
     int byteRead = file.read(); //read first byte from the file&lt;br /&gt;
     while (byteRead != -1) { //while there is something to read&lt;br /&gt;
         System.out.print(byteRead + &amp;quot; &amp;quot;); //print the byte we read at last&lt;br /&gt;
         byteRead = file.read(); //read a new byte&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Im Beispiel kann man schön sein, dass der Mechanismus zum lesen eines bytes bei beiden Datenströmen der gleiche ist. Lediglich in der Erstellung des Datenstromes gibt es je nach Quelle Unterschiede. Die Funktionsweise ist für Ausgabeströme recht ähnlich. Nähere Informationen dazu findet man in der API-Reference, wenn man nach den Klassen OutputStream und FileOutputStream sucht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===BufferedReader===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im letzten Abschnitt haben wir gesehen, wie leicht es ist mit Hilfe von Streams Bytes aus verschiedenen Quellen zu lesen. Oftmals wollen wir aber keine einzelnen Bytes lesen, sondern wissen dass unsere Datenquelle uns einen Text liefert. Da Text meist in Zeilen strukturiert ist, wäre es schön eine Funktion zu haben die Zeilenweise Strings aus unserem Stream liest. Auch hierfür bietet uns die Java Klassenbibiliothek bereits eine Lösung: den BufferedReader. Seine readLine Methode liest eine Zeile aus. Das Problem an dem BufferedReader ist, dass wir zu seiner Instantiierung einen Reader benötigen. Schauen wir in der API Dokumentation nach, welche Arten von Readern es gibt, so fällt der InputStreamReader auf. Schaut man sich diesen genauer an, so enthält er auch einen Konstruktor, der einen InputStream als Parameter akzeptiert.&lt;br /&gt;
&lt;br /&gt;
Nun bleibt es unsere Aufgabe zuerst einen Datenstrom aus unserer Datenquelle zu erzeugen, dann darauf einen Reader zu konstruieren um am Schluß darauf einen BufferedReader zu setzen. Dieses Vorgehen wirkt zwar etwas klobig, doch es gibt in der Klassenbibliothek bisher (bis Java 1.4.2) keine bessere Lösung dafür. Es folgt ein kleines Beispiel, dass den Inhalt einer Textdatei zeilenweise auf der Konsole ausgibt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 import java.io.*;&lt;br /&gt;
 &lt;br /&gt;
 static void printTextFile(String fileName) {&lt;br /&gt;
     InputStream fileStream = new FileInputStream(fileName);&lt;br /&gt;
     Reader reader = new InputStreamReader(fileStream); //wrap a Reader around the InputStream&lt;br /&gt;
     BufferedReader lineReader = new BufferedReader(reader); //wrap a BufferedReader around the Reader&lt;br /&gt;
     String line = lineReader.readLine();&lt;br /&gt;
     while (line != null) { //if readLine returns null, file end is reached&lt;br /&gt;
         System.out.println(line);&lt;br /&gt;
         line = lineReader.readLine();&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Exceptions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Versucht man die Programme aus den letzten beiden Abschnitten zu compilieren, so wird man feststellen dass sie nicht lauffähig sind. Mit der Tatsache, dass Streams so universell sind, handelt man sich natürlich auch alle möglichen Probleme der verschiedenen Medien, die ein Stream verstecken kann, ein. Um die Behandlung dessen zu vereinfachen und dem Programmierer die Chance zu geben an der richtigen Stelle auf Fehler zu reagieren gibt es Exceptions. An dieser Stelle soll es genügen zu erkennen, wann man von einer Methode erwarten muss, dass sie eine Exception auslöst und wie man damit umgeht.&lt;br /&gt;
&lt;br /&gt;
Methoden, die eine Exception auslösen können müssen dies ihrer Umgebung mitteilen. Dies geschieht, mit dem Schlüsselwort throws gefolgt von einer kommaseparierten Liste aller Exceptions, die sie auslösen können.&lt;br /&gt;
&lt;br /&gt;
 public class InputStream {&lt;br /&gt;
     ...&lt;br /&gt;
     public int read() throws IOException {&lt;br /&gt;
         ...&lt;br /&gt;
     }&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Bei den Klassen aus der Java Klassenbibliothek kann man der API-Reference entnehmen, welche Exceptions sie auslösen können. Jede mögliche Exception muss behandelt werden, dazu gibt es zwei Wege.Der erste funktioniert folgendermaßen: Man fasst den Teil einer Mehtode, der eine Exception auslösen kann in ein try-catch-Konstrukt ein. Wie dies aussieht soll gleich am Beispiel der Methode printTextFile gezeigt werden.&lt;br /&gt;
&lt;br /&gt;
 import java.io.*; &lt;br /&gt;
 &lt;br /&gt;
 static void printTextFile(String fileName) {&lt;br /&gt;
     InputStream fileStream = null;&lt;br /&gt;
     try {&lt;br /&gt;
         fileStream = new FileInputStream(fileName);&lt;br /&gt;
     } catch (FileNotFoundException) {&lt;br /&gt;
         System.out.println(&amp;quot;The file &amp;quot; + fileName + &amp;quot; could not be found.&amp;quot;);&lt;br /&gt;
         return; //stop execution of method... cannot print from non existing file&lt;br /&gt;
     }&lt;br /&gt;
     Reader reader = new InputStreamReader(fileStream); //wrap a Reader around the InputStream&lt;br /&gt;
     BufferedReader lineReader = new BufferedReader(reader); //wrap a BufferedReader around the Reader&lt;br /&gt;
     try {&lt;br /&gt;
         String line = lineReader.readLine();&lt;br /&gt;
         while (line != null) { //if readLine returns null, file end is reached&lt;br /&gt;
             System.out.println(line);&lt;br /&gt;
             line = lineReader.readLine();&lt;br /&gt;
         }&lt;br /&gt;
     } catch (IOException e) {&lt;br /&gt;
         System.out.println(&amp;quot;An unknown IOException occured while reading the file.&amp;quot;);&lt;br /&gt;
     } catch (EOFException e) {&lt;br /&gt;
         System.out.println(&amp;quot;Unexpected end of File found.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jetzt würde der Javacompiler die Methode compilieren. Sollte eine Exception auftreten, so wird dies dem Benutzer auf der Konsole mitgeteilt und die Ausführung der Methode abgebrochen. Der try-catch-Mechanismus funktioniert folgendermaßen: Wenn in dem Block zwischen try und catch eine Exception auftritt, wird die Ausführung des Blocks abgebrochen und es geht im passenden catch-Block weiter. Dabei ist passend derjenige Block, dessen gefangene Klasse derjenige Vorfahre der tatsächlich ausgelösten Exceptionklasse ist, der in der Vererbungshierarchie am nächsten daran ist.&lt;br /&gt;
Man sollte die Blöcke zwischen try und catch so klein wie sinnvoll möglich halten. Insbesondere sollte man sich davor hüten, ganze Methoden in ein großes try-catch einzubauen, weil dann die Fehlerbehandlung ungenau und die Fehlersuche schwieriger wird. Eine gute Möglichkeit zum Fehler finden ist es, im catch Block die Methode printStackTrace der Exception aufzurufen. Andererseits sollte in einem fertigen Programm das try-catch Konzept nur dann genutzt werden, wenn man auch tatsächlich den Fehler behandeln kann.&lt;br /&gt;
&lt;br /&gt;
Aus dieser Anforderung ergibt sich Notwendigkeit, die zweite Möglichkeit Exceptions zu behandeln zu benutzen. Hier werden auftretende Exceptions nicht per try-catch gefangen, weil man ebend keine sinnvolle Fehlerbehandlung im catch-Block anbieten kann. Dem Nutzer unserer Funktion muss man dies mitteilen, indem man dies hinter der Parameterliste per throws ankündigt. Wird dann in unserer Methode eine entsprechende Exception ausgelöst und nicht behandelt, so wird sie einfach an die aufrufende Methode &amp;quot;weitergeworfen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Weiter Informationen für Interessierte gibt es hier (http://java.sun.com/docs/books/tutorial/essential/exceptions/index.html).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das wars zu diesem Thema. Falls jemand so weit durchgehalten hat, danken wir für die Aufmerksamkeit :)&lt;br /&gt;
Wir hoffen, dass ihr jetzt ein klein wenig mehr mit den Mechanismen die Java anbietet vertraut seid und regen Gebrauch von der großen Klassenbibliothek machen werdet.&lt;br /&gt;
&lt;br /&gt;
==TODOs==&lt;br /&gt;
&lt;br /&gt;
eventuell Konstruktor für Apfel und Obst überall einbauen und nutzen&lt;br /&gt;
&lt;br /&gt;
Link für Streams und &amp;quot;Aufsätze&amp;quot;&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_1/Vorlesung_2&amp;diff=7110</id>
		<title>Javakurs2006/Tag 1/Vorlesung 2</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_1/Vorlesung_2&amp;diff=7110"/>
		<updated>2006-04-04T09:27:46Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Schleifen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Methoden =&lt;br /&gt;
 static int countOfCharactersInMyName(String name) {&lt;br /&gt;
     return name.length();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Man schreibt:&lt;br /&gt;
# zuerst &#039;&#039;static&#039;&#039; - aus Gründen, die wir morgen erklären werden.&lt;br /&gt;
# dann den Rückgabetyp: &#039;&#039;int&#039;&#039;, &#039;&#039;double&#039;&#039;, &#039;&#039;boolean&#039;&#039;, &#039;&#039;String&#039;&#039; oder &#039;&#039;void&#039;&#039; (für nichts).&lt;br /&gt;
# danach den Methodennamen. Dabei schreibt man mehrereWorteSoZusammen, so dass dasErsteWortKlein ist und alle darauffolgendenGroß! (auch CamelCase genannt)&lt;br /&gt;
# danach die Argumente der Methode in Klammern &#039;&#039;(String erstesArgument, int zweitesArgument)&#039;&#039; und so weiter. Auch hier gilt die Namenskonvention wie bei den Methoden.&lt;br /&gt;
# Dann in geschweiften Klammern &#039;&#039;&#039;{}&#039;&#039;&#039; der eigentliche Programmcode der Methode, den man mit &#039;&#039;return wert;&#039;&#039; oder nur &#039;&#039;return;&#039;&#039; (für void Methoden) beendet.&lt;br /&gt;
&lt;br /&gt;
= Arrays =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
int [] vieleInteger = new int [1000];&lt;br /&gt;
double [] wenigGleitkommazahlen;&lt;br /&gt;
wenigGleitkommazahlen = new double[10];&lt;br /&gt;
int anzahl = 42;&lt;br /&gt;
String [] antwort = new String[anzahl];&lt;br /&gt;
&lt;br /&gt;
antwort[3] = &amp;quot;Arthur Dent&amp;quot;;&lt;br /&gt;
String name = antwort[3];&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arrays sind eine Möglichkeit, viele Werte vom gleichen Typ zu haben. Man schreibt:&lt;br /&gt;
* zuerst den Typ der einzelnen Werte: &#039;&#039;int&#039;&#039;, &#039;&#039;double&#039;&#039;, &#039;&#039;boolean&#039;&#039; oder &#039;&#039;String&#039;&#039;&lt;br /&gt;
* dann ein paar eckige Klammern &#039;&#039;[]&#039;&#039;&lt;br /&gt;
* dann den Namen des Arrays, wobei wieder die normale Namenskonvention, CamelCase mit erstem Buchstaben klein, gilt.&lt;br /&gt;
&lt;br /&gt;
Initialisieren kann man diese Variablen entweder gleich oder später - je nachdem was besser passt. Dazu&lt;br /&gt;
* weist man mit &#039;&#039;=&#039;&#039; den Wert zu, den man von &#039;&#039;new&#039;&#039; zurückbekommt.&lt;br /&gt;
* &#039;&#039;new&#039;&#039; verwendet man so, dass man immer dahinter den Typ der Variablen wiederholt, allerdings schreibt man jetzt in die eckigen Klammern hinein, wie viel Elemente man benötigt - das kann aber auch eine Variable vom Typ &#039;&#039;int&#039;&#039; sein.&lt;br /&gt;
&lt;br /&gt;
Zugreifen kann man auf die Elemente eines Arrays mit der &#039;&#039;[]&#039;&#039; Syntax mit &#039;&#039;einArray[nummer]&#039;&#039; kann man auf die einzelnen Werte sowohl zugreifen als auch ihnen Werte zuweisen.&lt;br /&gt;
&lt;br /&gt;
= Schleifen =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
while(bedingungDieTrueErgibt()) {&lt;br /&gt;
    tuEtwas();&lt;br /&gt;
}&lt;br /&gt;
int [] zahlen = new int[100]; // Indizes des Arrays sind 0 bis 99 !&lt;br /&gt;
for(int i = 0; i &amp;lt; zahlen.length; i = i + 1) {&lt;br /&gt;
    zahlen[i] = i;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei Arten von Schleifen, die while-Schleife, die hervorragend geeignet ist, wenn man etwas so lange wiederholen möchte bis eine Bedingung zutrifft, und die for-Schleife, mit der man hervorragend alle Werte in einem Array durchgehen kann.&lt;br /&gt;
&lt;br /&gt;
while-Schleifen schreibt man so:&lt;br /&gt;
* zuerst &#039;&#039;while&#039;&#039; und in runden Klammern dahinter die Bedingung. Das kann ein Ausdruck wie &#039;&#039;i &amp;lt; 10&#039;&#039; sein, oder eine Methode wie &#039;&#039;problemGelösst()&#039;&#039; oder &#039;&#039;nochAnDerArbeit()&#039;&#039;&lt;br /&gt;
* Danach in geschweiften Klammern der Inhalt (Body) der Schleife.&lt;br /&gt;
&lt;br /&gt;
for-Schleifen schreibt man so:&lt;br /&gt;
* zuerst &#039;&#039;for&#039;&#039;, dann in runden Klammern drei Anweisungen, jeweils mit Semikolon getrennt: Variablen-Initialisierung, Schleifenbedingung und Weitersetzung der Schleifenvariablen. Sehr oft sieht das sehr ähnlich zu dem Beispiel oben aus.&lt;br /&gt;
* danach auch wieder in geschweiften Klammern die Anweisungen, die wiederholt werden sollen.&lt;br /&gt;
&lt;br /&gt;
= Fehler finden / Debugging =&lt;br /&gt;
Eine einfache Technik, den Fehler in einem Programm zu finden ist es, an verschiedenen Stellen auszugeben, welchen Wert eine Variable hat. Das geht so:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
System.out.println(&amp;quot;Die Variable a hat den Wert: &amp;quot; + a);&lt;br /&gt;
// oder kürzer&lt;br /&gt;
System.out.println(&amp;quot;a: &amp;quot; + a);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch sehr gut ist, ein Problem in einer Methode zusammenzufassen und diese dann zu testen, indem man die Methode mit bestimmten Parametern aufruft und das Ergebnis wieder mit &#039;&#039;System.out.println()&#039;&#039; ausgibt. Etwa so:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
System.out.println(&amp;quot;parameter: 3: &amp;quot; methodeDieIchTeste(3));&lt;br /&gt;
System.out.println(&amp;quot;parameter: 4: &amp;quot; methodeDieIchTeste(4));&lt;br /&gt;
System.out.println(&amp;quot;parameter: 23: &amp;quot; methodeDieIchTeste(23));&lt;br /&gt;
System.out.println(&amp;quot;parameter: 42: &amp;quot; methodeDieIchTeste(42));&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit kann man an den Ausgaben sehr gut sehen, was man verbockt hat.&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Probleme&amp;diff=7124</id>
		<title>Javakurs2006/Probleme</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Probleme&amp;diff=7124"/>
		<updated>2006-04-04T09:24:09Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: intiale kurze Version aus Tag1 extrahiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Zwei häufige Probleme mit java ==&lt;br /&gt;
 Exception in thread &amp;quot;main&amp;quot; java.lang.NoClassDefFoundError:KlassennameDenIhrGeradeKompiliertHabt&lt;br /&gt;
:Mann kann das Problem auf zwei Arten lösen:&lt;br /&gt;
:* man schreibt &#039;&#039;&amp;quot;java -cp . Klasse&amp;quot;&#039;&#039; anstatt nur &#039;&#039;&amp;quot;java Klasse&amp;quot;&#039;&#039; um sie Auszuführen&lt;br /&gt;
:* verwendet man die bash: schreibt man &#039;&#039;export CLASSPATH=$CLASSPATH:.&#039;&#039; entweder in jeder shell einmal oder in die &#039;&#039;.bashrc&#039;&#039; eintragen und die shell mit &#039;&#039;exec bash&#039;&#039; neu starten.&lt;br /&gt;
:* verwendet man die tcsh: schreibt man &#039;&#039;setenv CLASSPATH &amp;quot;.:$CLASSPATH&amp;quot;&#039;&#039; entweder in jeder shell oder einmal in der &#039;&#039;.cshrc&#039;&#039; eintragen und die shell mit &#039;&#039;tcsh&#039;&#039; neu starten.&lt;br /&gt;
&lt;br /&gt;
:Der Fehler bedeutet, dass die Shell-Variable CLASSPATH gesetzt ist. Das hat zur Folge das Java den Standardwert &amp;quot;.&amp;quot; (das Verzeichnis in dem man gerade ist) nicht mehr in den CLASSPATH aufnimmt und diese Fehlermeldung auflöst.&lt;br /&gt;
&lt;br /&gt;
 Exception in thread &amp;quot;main&amp;quot; java.lang.NoClassDefFoundError:KlassennameDenIhrGeradeKompiliertHabt/class&lt;br /&gt;
:dann habt ihr das Programm mit &amp;quot;java KlassennameDenIhrGeradeKompiliertHabt.class&amp;quot; aufgerufen, was falsch ist. Man darf hier das &amp;quot;class&amp;quot; nicht an den Befehl anhängen.&lt;br /&gt;
&lt;br /&gt;
 Note: Test.java uses unchecked or unsafe operations.&lt;br /&gt;
 Note: Recompile with -Xlint:unchecked for details.&lt;br /&gt;
:Dann könnt ihr die entweder Ignorieren, oder aber ihr loggt euch nicht auf Solaris 9 anstatt Solaris 10 ein. Wie das geht steht auf dem Anmeldebildschirm!&lt;br /&gt;
&lt;br /&gt;
[[Javakurs2006| &amp;lt;- zurück zur Startseite]]&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_2&amp;diff=7029</id>
		<title>Javakurs2006/Tag 2</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_2&amp;diff=7029"/>
		<updated>2006-04-04T09:21:03Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: CLASSPATH Problem erstmal hier aufgenommen...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Javakurs2006| &amp;lt;- Zurück zur Übersicht]]&lt;br /&gt;
&lt;br /&gt;
= Vormittags =&lt;br /&gt;
* [[Robert_Lubkoll/Java_Kurs/Tag_2/Wiederholungsaufgabe | Wiederholungsaufgabe zu Schleifen und Arrays]]&lt;br /&gt;
* [http://docs.freitagsrunde.org/javakurs/blatt03.pdf Aufgabenblatt 3]&lt;br /&gt;
* [[Martin_Häcker/Java_Kurs/Tag_2/Handout| Vorlesung 3 zum Nachschlagen]]&lt;br /&gt;
* [http://docs.freitagsrunde.org/javakurs/Modularisierung%20und%20Objekte.pdf Folien zum Vortrag]&lt;br /&gt;
&lt;br /&gt;
Es ist ein kleines Problem aufgetaucht: der CLASSPATH ist nicht immer korrekt gesetzt: Es fehlt das aktuelle Verzeichnis.&lt;br /&gt;
Das Ergebnis ist, dass der Java-Compiler (javac) nicht immer alle Klassen finden kann, obwohl die .class Dateien korrekt liegen.&lt;br /&gt;
Die Lösung ist folgendes Kommando, dass in dem Terminal in dem der javac aufgerufen wird einmal eingegeben werden muss:&lt;br /&gt;
&lt;br /&gt;
  export CLASSPATH=&amp;quot;.:$CLASSPATH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dadurch sucht der Java-Compiler automatisch auch im aktuellen Verzeichnis &amp;quot;.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Nachmittags =&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
&#039;&#039;&#039;Ziel:&#039;&#039;&#039; Ein IOUtility-Objekt schreiben, das Eingabe und Ausgabe in Java einfach macht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Idee:&#039;&#039;&#039; Verwendung der Java-API lernen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empfehlung zum Vorgehen:&#039;&#039;&#039;&lt;br /&gt;
Ihr solltet für jede Methode, die ihr schrebt, zunächst einen Test in der Main-Methode anlegen.&lt;br /&gt;
Mit Test ist hier z.B. ein Aufruf der Methode und die Ausgabe ihres Rückgabewertes auf der Konsole gemeint.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zufallszahlen ===&lt;br /&gt;
:*Schlage die Methode [http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Math.html#random() Math.random()] in der Java-API nach. &lt;br /&gt;
:*Verwende die Methode, um eine Methode &#039;&#039;void setRandomGrades()&#039;&#039; zu schreiben, die jedem Studenten eine zufällige Hauptdiplomsnote zuweist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Umwandeln in eine Zeichenkette ===&lt;br /&gt;
:*Implementiere die Methode [http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#toString() toString()] für die Student-Klasse. &lt;br /&gt;
:*Verändere printMe() so, dass sie diese neue Methode verwenden. &lt;br /&gt;
:Hinweis: Die Daten eines Studenten sollen dabei in folgendem Format ausgegeben werden:  &lt;br /&gt;
 Matrikelnummer Name &lt;br /&gt;
:Beispiel:&lt;br /&gt;
 123456 Lieschen Müller&lt;br /&gt;
:*Implementiere die Methode [http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#toString() toString()] für die StudentDatabase-Klasse, die sämtliche Studenten und anschließend die Anzahl der Studenten in der Datenbank zurückgibt. Jeder Student soll in einer eigenen Zeile stehen und die Zeile mit der Anzahl der Studenten soll mit einem Lehrzeichen oder Tab beginnen.&lt;br /&gt;
:Beispiel:&lt;br /&gt;
 123456 Lieschen Müller &lt;br /&gt;
 123457 Franz Schmidt&lt;br /&gt;
 _2&lt;br /&gt;
:*(Wenn Du in der Übung am Vormittag schon eine Methode geschrieben hast, die eine Durchschnittsnote der Studenten berechnet, dann gib diese hier ebenfalls aus).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Arraylists ===&lt;br /&gt;
:*Lese den Javadoc zu [http://java.sun.com/j2se/1.4.2/docs/api/java/util/ArrayList.html ArrayList] und ersetze in der Studentendatenbank die Datenstruktur Array durch die ArrayList. &lt;br /&gt;
:*Wie verändern sich die Methoden &#039;&#039;addStudent()&#039;&#039;, &#039;&#039;deleteStudent()&#039;&#039; und &#039;&#039;search()&#039;&#039; (sofern du sie implementiert hast)?&lt;br /&gt;
:* Gibt es Instanz-Variablen die jetzt nicht mehr gebraucht werden?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Gleichheit ===&lt;br /&gt;
:*Implementiere eine [http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#equals(java.lang.Object) equals()]-Methode für Student. Diese soll zwei Studenten als gleich betrachten, wenn diese die gleiche Matrikelnummer haben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Gleichheit verwenden ====&lt;br /&gt;
:Nutze equals(), um eine Methode &#039;&#039;containsStudent(Student aStudent)&#039;&#039; zu schreiben, die beim Einfügen eines neuen Studenten in die Datenbank nachprüft, ob dieser bereits in ihr enthalten ist.&lt;br /&gt;
&lt;br /&gt;
=== IOUtility ===&lt;br /&gt;
:*Es soll eine Klasse &amp;quot;IOUtility&amp;quot; geschrieben werden, welche eine Methode &#039;&#039;void writeStringToFile(String content, String filename)&#039;&#039; enthält.&lt;br /&gt;
:*Diese soll einen String in eine Datei schreiben. Schaue dir dafür die Java-Klassen [http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileOutputStream.html FileOutputStream] (vor allem die Konstruktoren) und [http://docjar.com/docs/api/java/io/OutputStreamWriter.html OutputStreamWriter] (für die geerbte Methode [http://java.sun.com/j2se/1.3/docs/api/java/io/Writer.html#write(java.lang.String) write(String)]) an.&lt;br /&gt;
:*Benutze deine eben geschriebende Methode, um die Studentendatenbank in eine Datei auszugeben.&lt;br /&gt;
&lt;br /&gt;
Hinweis: &lt;br /&gt;
:*Verwende auch hier die toString()-Methode. &lt;br /&gt;
:*Von den von euch verwendeten API-Methoden können hier verschiedene Exceptions ausgelöst werden, um welche wir uns kümmern müssen.&lt;br /&gt;
:*Da wir in unserer Methode selbst keine Möglichkeit haben, diese sinvoll zu behandeln, sollen die Exeptions mit &amp;quot;throws&amp;quot; weitergereicht werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Weiterführende Aufgaben&#039;&#039; ===&lt;br /&gt;
:*Erweitere das IOUtility-Objekt so, dass ihm bereits im Konstruktoraufruf der Name einer Datei übergeben wird, auf welcher es arbeiten soll.&lt;br /&gt;
:*Mit dem Aufruf der Methode &#039;&#039;startReading()&#039;&#039; soll das Objekt die Datei zum Lesen öffnen, sodass mit der Methode &#039;&#039;readLine()&#039;&#039; nacheinander ihre Zeilen ausgelesen werden können. Die Methode &#039;&#039;readLine()&#039;&#039; soll dabei &#039;&#039;null&#039;&#039; zurückgeben, wenn beim Lesen das Ende der Datei erreicht wurde.&lt;br /&gt;
Für den unwahrscheinlichen Fall, dass noch immer Langeweile herrscht, beginne mit den Aufgaben für den [[Javakurs2006/Tag_3|dritten Tag]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== An die Tutoren ==&lt;br /&gt;
:Eingabe und Ausgabe unter Java ist nicht besonders elegant - vor allem, wenn man bei einer Aufgabe die Vorteile des Stream-Konzepts überhaupt nicht nutzen kann. Die Studenten sollen daher ein Objekt schreiben, das ihnen diese Aufgaben erleichtert. Ein entferntes Vorbild ist uns dabei eine [http://www.cs.princeton.edu/introcs/22inout/In.java.html Input-Klasse, die wir an der Princeton-Universität gefunden haben].&lt;br /&gt;
&lt;br /&gt;
[[Javakurs2006| &amp;lt;- Zurück zur Übersicht]]&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Diskussion:Opal_FAQ&amp;diff=6204</id>
		<title>Diskussion:Opal FAQ</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Diskussion:Opal_FAQ&amp;diff=6204"/>
		<updated>2005-12-06T12:18:02Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: Befehl oasys läuft nicht mehr&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ich habe bei mir das Problem, dass sich vor wenigen Wochen Opal noch in jedem Ordner aufrufen lies.&lt;br /&gt;
Meines erachtens ging dies immer mit dem Befehl oasys oder Oasys. Beides habe ich ausprobiert und es hat nicht funktioniert.&lt;br /&gt;
Also entweder hat sich bei mir Opal nach einem Jahr abgeschalted (was sehr ärgerlich wäre, da ich die Info A Klausur wiederholen muss)&lt;br /&gt;
oder ich hab mir den falschen Befehl gemerkt oder da ist irgendetwas schiefgelaufen.&lt;br /&gt;
&lt;br /&gt;
Hier eine Vermutung, die ich für unwahrscheinlich halte: Ist Opal (bzw.oasys) Oberflächenabhängig? D.h. läuft es vielleicht nicht im KDE z.b. obwohls im FVWM2 (wo es eingerichted wurde) läuft?&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Eclipsekurs_2005&amp;diff=4769</id>
		<title>Eclipsekurs 2005</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Eclipsekurs_2005&amp;diff=4769"/>
		<updated>2005-04-27T12:40:21Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: /* Anmeldung für den 2. Kurs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Kurzbeschreibung ===&lt;br /&gt;
&lt;br /&gt;
[[IBM Eclipse | Eclipse]] ist eine [[Java IDE Einleitung| IDE]], mit der sich insbesondere Java-Programme schneller und bequemer erstellen lassen. Allerdings ist Eclipse sehr komplex und insbesondere der Start könnte vielleicht dem einen oder anderen etwas schwer fallen.&lt;br /&gt;
&lt;br /&gt;
Wir veranstalten daher wie jedes Jahr einen 2-stündigen Einführungskurs, in dem die basics gezeigt werden. Es geht also um Starthilfe, nicht um die neuesten Eclipse-Tricks oder die besten Plugins. Zielgruppe sind insbesondere Hörer von [[Informatik 2]], aber auch alle anderen Interessenten sind willkommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zeit und Ort ===&lt;br /&gt;
&lt;br /&gt;
==== 2. Kurs (28. April) ====&lt;br /&gt;
Datum: &#039;&#039;&#039;Donnerstag, 28. April 2005&#039;&#039;&#039; &amp;lt;br/&amp;gt;&lt;br /&gt;
Zeit: 16:15-18:00 &amp;lt;br/&amp;gt;&lt;br /&gt;
Dauer: 90 Minuten (einmalig) &amp;lt;br/&amp;gt;&lt;br /&gt;
SWS: keine (studentische Veranstaltung) &amp;lt;br/&amp;gt;&lt;br /&gt;
Ort: FR5046&lt;br /&gt;
&lt;br /&gt;
==== 1. Kurs (21. April) ====&lt;br /&gt;
Datum: &#039;&#039;&#039;Donnerstag, 21. April 2005&#039;&#039;&#039; &amp;lt;br/&amp;gt;&lt;br /&gt;
Zeit: ab 16:15 &amp;lt;br/&amp;gt;&lt;br /&gt;
Dauer: 90 Minuten (einmalig) &amp;lt;br/&amp;gt;&lt;br /&gt;
SWS: keine (studentische Veranstaltung) &amp;lt;br/&amp;gt;&lt;br /&gt;
Ort: FR 5516&lt;br /&gt;
&lt;br /&gt;
=== Themen ===&lt;br /&gt;
* Projekte anlegen&lt;br /&gt;
* Java-Programme schreiben &amp;amp; ausführen&lt;br /&gt;
* Debugging&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Anmerkungen ===&lt;br /&gt;
* 3plus4software.de ist aus irgendwelchen Gruenden nicht mehr aufrufbar. Immerhin gibt es eine englische Kopie der Tutorials unter http://www.eg.bucknell.edu/~cs479/Fall2004SoftwareDesign/eclipse-tutorial/ . Archive.org hat auch die deutsche Version, leider aber unvollständig: http://web.archive.org/web/20041009232736/www.3plus4software.de/eclipse/index.html&lt;br /&gt;
&lt;br /&gt;
=== 1. Kurs ===&lt;br /&gt;
Teilnehmerliste:&lt;br /&gt;
# Florian Zeidler          (fzeidler)&lt;br /&gt;
# Thilo Schmidt            (dude)&lt;br /&gt;
# Alexander Oppermann      (opix)&lt;br /&gt;
# Nicolas Poczka           (npoczka)&lt;br /&gt;
# Daniel Giancaterino      (italia)&lt;br /&gt;
# Ani Hayka                (almhay)&lt;br /&gt;
# Zhuo-Fei Hui             (zfhui@...)&lt;br /&gt;
# Simon Kwoczek            (simonk)&lt;br /&gt;
# E. L. M.                 (easy)&lt;br /&gt;
# Stephan Spiegel          (spiegels)&lt;br /&gt;
# Nina Penova              (nina)&lt;br /&gt;
# Sven Pritzlaff           (snakebln)&lt;br /&gt;
# Jens Meier               (jmeier)&lt;br /&gt;
# Moslem Azizi             (azizi)&lt;br /&gt;
# Seyed Sadra Amirkhalili  (sidnorme)&lt;br /&gt;
# Mohammad Mohebbi         (sidnor_me@...)&lt;br /&gt;
# Meyssam Alihosseini      (meyssam20001@...)&lt;br /&gt;
# Pawel Wojciechowski      (giugiaro)&lt;br /&gt;
# Andreas Gobbin           (andigob)&lt;br /&gt;
# Anton Gräber             (sunlicht)&lt;br /&gt;
# Melanie Ozanik           (qertyxy)   --ich kann heute doch nicht :o(&lt;br /&gt;
# Ulrike Koelle 	   (koelleu)&lt;br /&gt;
# Goßmann Matthias         (matthias)&lt;br /&gt;
# Konstantin Domoratskyy   (kostyan)&lt;br /&gt;
# Christian Retzlaff       (retzlaff)&lt;br /&gt;
# Christoph Lorenz         (yasokuhl)&lt;br /&gt;
# Deniz Ceren Eser         (amphitridenis@...)&lt;br /&gt;
# Andreas Stöckle          (andreasstoeckle@...)&lt;br /&gt;
# Sebastian Ahrndt         (baschi)&lt;br /&gt;
# Yibo Zhao                (boge1981@...)&lt;br /&gt;
# Eik Tauber               (eikohol)&lt;br /&gt;
# Sven Wasmer              (svenfqab)&lt;br /&gt;
# Susi Kellberger          (tarasue@...)&lt;br /&gt;
Bitte nicht mehr anmelden, der Kurs ist voll. Bitte in den zweiten Kurs (s. unten) eintragen.&lt;br /&gt;
&lt;br /&gt;
=== Anmeldung für den 2. Kurs ===&lt;br /&gt;
&lt;br /&gt;
Glücklicherweise sind wir inzwischen fünf Vortragende, d.h. heißt, wir können bequem zwei Kurse veranstalten. Der zweite Kurs wird am 28.4. stattfinden.&lt;br /&gt;
&lt;br /&gt;
Habt bitte Verständnis, dass wir schon auf Grund der Raumsituation eine Teilnehmerbeschränkung (35 Personen) einführen müssen. Bisher konnte aber immer jeder Interessent am Kurs teilnehmen!&lt;br /&gt;
&lt;br /&gt;
Um euch für den Kurs anzumelden, tragt euch bitte unten in der Liste ein. Für Leute, die noch nie ein Wiki benutzt haben: Auf &#039;bearbeiten&#039; klicken (neben der Anmelden-Überschrift), dann im Textfeld die gewünschte Änderung durchführen und anschließend &#039;Artikel speichern&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voranmeldungen hier, wir melden uns bei euch:&lt;br /&gt;
&lt;br /&gt;
MUSTER: &amp;quot;# Name (cs-userid)&amp;quot; ohne die &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Jens Marohn (pica) Bitte um 14:00 Uhr Danke&lt;br /&gt;
# Dominique Charpentier (djcinc) 14.00 Uhr klingt gut!&lt;br /&gt;
# Marcus Daute (marcusd) Donnerstag Lieber 16 Uhr!&lt;br /&gt;
# Thomas Krauß (tkra) Donnerstag&lt;br /&gt;
# Stefan Schaffer (schaffer)&lt;br /&gt;
# Nadezhda Levitan (nlevitan) Donnerstag&lt;br /&gt;
# Johannes Teske (joeheynz) Donnerstag 1600, wie bereits gewünscht ;-)&lt;br /&gt;
# Martin Möller (martino) Freitag 10-12 finde ich klasse&lt;br /&gt;
# Alexander Wachtberger (Pacheco) Donnerstag 1600, bis dann.&lt;br /&gt;
# Neli Gospodinova (nelig)&lt;br /&gt;
# Jens Grohmann (sirsilva) Donnerstag 1600 wäre perfekt &amp;gt;;-)&lt;br /&gt;
# Andreas Hergert (handreas) Donnerstag 16:00 wäre gut&lt;br /&gt;
# Fabian Löser (shorty) Donnerstag 16 Uhr würde passen&lt;br /&gt;
# Krishan Paramasivam (krishi) Donnerstag um 16 Uhr ist OK&lt;br /&gt;
# Jan-Christoph Lange (crusrhai) Donnerstag um 16 Uhr&lt;br /&gt;
# Sascha Friesike (friesike) Donnerstag um 16 Uhr&lt;br /&gt;
# Sebastian Meyer (sebinator2003) Donnerstag um 16 Uhr&lt;br /&gt;
# Karolina Cyganek (kcyganek) Do 16 Uhr&lt;br /&gt;
# Andreas Häusler (ahaeusl) &lt;br /&gt;
# Sebastian Gutsche (sebagut)&lt;br /&gt;
# Marius Walther (mariusw) Do 16 Uhr&lt;br /&gt;
# Arnold Knaub (ares) Do 16 Uhr&lt;br /&gt;
# Diego Iles (diegoile) donnerstag 16 Uhr&lt;br /&gt;
# Stefan Schmidt (rendhark) Do 16 Uhr&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Der zweite Kurs findet jetzt definitiv Donnerstag 16:00 statt.&lt;br /&gt;
&lt;br /&gt;
=== Feedback der Teilnehmer vom 21.4.2005 ===&lt;br /&gt;
(Vorgabe war, dass jeweils zwei positive und negative Dinge genannt werden mussten)&lt;br /&gt;
&lt;br /&gt;
+ Vielen Dank für die informative Einführung in Eclipse&amp;lt;br/&amp;gt;&lt;br /&gt;
+ Der Debugger scheint wirklich nützlich zu sein, wahrscheinlich sogar besser wie C++&amp;lt;br/&amp;gt;&lt;br /&gt;
- Warum gab es nichts Ähnliches für Opal, das hätte ein paar graue Haare gespart.&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;Anmerkung: Dass es für Opal keine vernünftigen Tools gibt, ist auch einer unserer größten Kritikpunkte an Opal.&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
- Ohne Nürnberger Trichter wird ma das alles erst mal selber am Rechner verdauen müssen.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+ gemeinsame Moderation&amp;lt;br/&amp;gt;&lt;br /&gt;
+ Aufbau&amp;lt;br/&amp;gt;&lt;br /&gt;
+ Themen&amp;lt;br/&amp;gt;&lt;br /&gt;
- Frisur der Moderatoren&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;Anmerkung: Schon mal was von Artenschutz gehört?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
+ informativ&amp;lt;br/&amp;gt;&lt;br /&gt;
+ anfängertauglich&amp;lt;br/&amp;gt;&lt;br /&gt;
+ gut strukturiert&amp;lt;br/&amp;gt;&lt;br /&gt;
- zu kleiner Raum&amp;lt;br/&amp;gt;&lt;br /&gt;
- erzwungenes Feedback&amp;lt;br/&amp;gt; &lt;br /&gt;
&#039;&#039;Anmerkung: Wir sind halt fiese, böse Informatiker. *g*&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
+ Handzettel&amp;lt;br/&amp;gt;&lt;br /&gt;
+ man merkt, ihr kennt euch damit aus&amp;lt;br/&amp;gt;&lt;br /&gt;
- vielleicht für die etwas schwierig, die noch nie programmiert haben (Vermutung)&lt;br /&gt;
&lt;br /&gt;
+ Grober Überblick&amp;lt;br/&amp;gt;&lt;br /&gt;
+ Viele Beispiele&amp;lt;br/&amp;gt;&lt;br /&gt;
- Die Publikation kann noch verbessert werden.&lt;br /&gt;
&lt;br /&gt;
+ Der Vortrag war gut und strukturiert.&amp;lt;br/&amp;gt;&lt;br /&gt;
- Es fehlt noch sowas wie ein Java-Programmierkurs.&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;Anmerkung: Stimmt. Haben wir im letzten Sommersemester gemacht.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
+ Eure gemeinsame Moderation.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+ Ansonsten sehr gut&amp;lt;br/&amp;gt;&lt;br /&gt;
- Keine Liste mit Tastenkürzeln.&lt;br /&gt;
&lt;br /&gt;
+ gute Information, gut nachvollziehbar&amp;lt;br/&amp;gt;&lt;br /&gt;
+ humorvoll&amp;lt;br/&amp;gt;&lt;br /&gt;
- ihr seid euch gegenseitig ins Wort gefallen&lt;br /&gt;
&lt;br /&gt;
+ spannend&amp;lt;br/&amp;gt;&lt;br /&gt;
+ schnell gelaufen&amp;lt;br/&amp;gt;&lt;br /&gt;
+ gut gemacht Jungs :-)&amp;lt;br/&amp;gt;&lt;br /&gt;
- bin nicht so weit und brauche noch eine Weile, alles nachzuvollziehen.&amp;lt;br/&amp;gt;&lt;br /&gt;
- kein Vergleich zu anderen IDEs&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;Anmerkung: Wieso? Wir haben doch gesagt, dass es die beste ist. ;-)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
+ Multimediale Nutzung/Präsentation&amp;lt;br/&amp;gt;&lt;br /&gt;
+ Viele Erläuterungen, Tipps&amp;lt;br/&amp;gt;&lt;br /&gt;
- hätten mehr Beispiele sein können&lt;br /&gt;
&lt;br /&gt;
+ gute Einführung, so dass man ohne viele Vorkenntnise verstehen konnte&amp;lt;br/&amp;gt;&lt;br /&gt;
+ lockere Atmosphäre&amp;lt;br/&amp;gt;&lt;br /&gt;
- nichts Negatives&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Mensa&amp;diff=722</id>
		<title>Mensa</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Mensa&amp;diff=722"/>
		<updated>2004-10-26T12:46:53Z</updated>

		<summary type="html">&lt;p&gt;130.149.17.40: Umbauprobleme ergaenzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In der &#039;&#039;&#039;Mensa&#039;&#039;&#039; gibt&#039;s günstiges und manchmal sogar schmackhaftes [[Essen]]. Bezahlt wird nicht mit Bargeld sondern mit der Girovendkarte (die allerdings im Foyer der Mensa mit Bargeld an Automaten aufgeladen werden kann).&lt;br /&gt;
&lt;br /&gt;
Diese Karte bekommt man an einer der Kassen, die als &#039;Barkasse&#039; gekennzeichnet ist gegen einen Pfand ausgehändigt.&lt;br /&gt;
Normalerweise soll man immer seinen Studentenausweis vorlegen, um in den Genuß der günstigeren Preise zu kommen.&lt;br /&gt;
&lt;br /&gt;
Die Mensa befindet sich in der Hardenbergstr. 34, zwischen Phsik-Neubau und Ernst-Reuter Platz bzw. über den Campus hinter dem Hauptgebäude.&lt;br /&gt;
&lt;br /&gt;
Momentan befindet sich die Mensa allerdings im Umbau, weswegen es nicht nur zu einigen Platzproblemen kommt, sondern auch zu einem kleinen Irrweg, bis man den momentanen Eingang erstmal gefunden hat (ist aber auch recht gut ausgeschldert).&lt;br /&gt;
&lt;br /&gt;
Öffnungszeiten: Mo-Fr: 11:30-14:00 (nach Abschluss der Umbauarbeiten: Mo-Fr: 11:00-14:45 Uhr)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
[http://www.studentenwerk-berlin.de/mensen/02/03/ TU Mensa]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: Gebäude]]&lt;br /&gt;
[[Kategorie: Wichtige Orte]]&lt;/div&gt;</summary>
		<author><name>130.149.17.40</name></author>
	</entry>
</feed>