diff --git a/Abstrakte Klassen_001/readme.md b/Abstrakte Klassen_001/readme.md new file mode 100644 index 0000000..5473313 --- /dev/null +++ b/Abstrakte Klassen_001/readme.md @@ -0,0 +1,28 @@ +# Abstrakte Klassen +## Lernziel + + + +Eine abstrakte Klasse einsetzen, um eine einheitliche Schnittstelle für unterschiedliche Klassen anzubieten. + +## Aufgabe + +Im Paket [pr2.interfaces.abstrakte_klassen_e](../sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/) finden Sie Klassen, welche geometrische Figuren repräsentieren. + +Betrachten Sie die vorhandenen Klassen `Dreieck`, `Kreis` und `Geometer` und finden Sie Gemeinsamkeiten und Unterschiede. Lassen Sie das Programm laufen und notieren Sie sich die Ausgabe. + +Führen Sie eine neue _abstrakte_ Klasse `Figur` ein und vereinfachen Sie mit dieser Klasse das vorhandene Programm. Lassen Sie das Programm erneut laufen und vergleichen Sie die Ausgabe mit der vorher notierten. + + + \ No newline at end of file diff --git a/Abstrakte Klassen_002/readme.md b/Abstrakte Klassen_002/readme.md new file mode 100644 index 0000000..1e421cf --- /dev/null +++ b/Abstrakte Klassen_002/readme.md @@ -0,0 +1,31 @@ +# Abstrakte Klasse +## Lernziel + + + +Abstrakte Klasse verwenden. + +## Aufgabe + +Gehen Sie in das Paket [pr2.interfaces.abstrakt_form](../sources/src/main/java/pr2/interfaces/abstrakt_form/). + +Schreiben Sie bitte eine abstrakte Klasse `Form` mit den folgenden abstrakten Methoden: + + * `flaeche()` liefert die Fläche der Form als Gleitkommazahl mit doppelter Genauigkeit zurück + * `umfang()` liefert den Umfang der Form als Gleitkommazahl mit doppelter Genauigkeit zurück + +Fügen Sie außerdem noch zwei Attribute für die x- und y-Position der Form hinzu und schreiben Sie einen entsprechenden Konstruktor. Wählen Sie die Sichtbarkeiten der Attribute so, dass Subklassen sie lesen und schreiben können. + + + \ No newline at end of file diff --git a/Auffrischung_001/readme.md b/Auffrischung_001/readme.md new file mode 100644 index 0000000..eda7a40 --- /dev/null +++ b/Auffrischung_001/readme.md @@ -0,0 +1,33 @@ +# String in Großbuchstaben umwandeln +## Lernziel + + + + * Daten von der Kommandozeile lesen. + * Einfache String-Operationen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.auffrischung.grossmacher](../sources/src/main/java/pr2/auffrischung/grossmacher). + +Schreiben Sie bitte ein Programm mit der Hauptklasse `Grossmacher`, das einen Text als Parameter auf der Kommandozeile nimmt, diesen in Großbuchstaben umwandelt und dann, zusammen mit der enthaltenen Anzahl von Zeichen, wieder auf der Konsole ausgibt. + +```console +> java Grossmacher "Hallo, dies ist ein Test" +Ergebnis: HALLO, DIES IST EIN TEST +Zeichen : 24 +``` + + + \ No newline at end of file diff --git a/Auffrischung_002/readme.md b/Auffrischung_002/readme.md new file mode 100644 index 0000000..9a55dbe --- /dev/null +++ b/Auffrischung_002/readme.md @@ -0,0 +1,28 @@ +# Labeled Break +## Lernziel + + + +Ein labeled break verwenden. + +## Aufgabe + +Gehen Sie in das Paket [pr2.auffrischung.labeled_break](../sources/src/main/java/pr2/auffrischung/labeled_break). + +Schreiben Sie eine Methode `suche`, die ein zweidimensionales `int`-Array übergeben bekommt und das erste Element sucht, das keine `0` ist. Wenn ein solches gefunden wird, soll die Methode `true` zurückgeben, andernfalls `false`. + +Verwenden Sie bitte ein **labeled break** für Ihre Implementierung. + + + \ No newline at end of file diff --git a/Auffrischung_003/readme.md b/Auffrischung_003/readme.md new file mode 100644 index 0000000..781c81d --- /dev/null +++ b/Auffrischung_003/readme.md @@ -0,0 +1,33 @@ +# Passwortbewertung +## Lernziel + + + +Einfache String-Verarbeitung. + +## Aufgabe + +Gehen Sie in das Paket [pr2.auffrischung.password](../sources/src/main/java/pr2/auffrischung/password). + +Schreiben Sie eine Klasse `PasswortChecker` mit einer Methode `checkPassword`, die die Qualität von Passwörtern bewertet. Die Methode vergibt Punkte für bestimmte Qualitätskriterien des Passworts. Es gibt jeweils einen Punkt für: + + * Das Passwort ist mindestens 8 Zeichen lang. + * Das Passwort enthält Groß- und Kleinbuchstaben. + * Das Passwort enthält Buchstaben und Zahlen. + * Das Passwort enthält mindestens eines der Sonderzeichen `!"()%` + +Testen Sie die Methode mit verschiedenen Passwörtern. + + + \ No newline at end of file diff --git a/Auffrischung_004/readme.md b/Auffrischung_004/readme.md new file mode 100644 index 0000000..b058cf6 --- /dev/null +++ b/Auffrischung_004/readme.md @@ -0,0 +1,28 @@ +# printf mit Formatstring +## Lernziel + + + +Formatierung mit Formatstrings. + +## Aufgabe + +Gehen Sie in das Paket [pr2.auffrischung.printf](../sources/src/main/java/pr2/auffrischung/printf). + +Schauen Sie sich die JavaDoc der Methode `printf` in der Klasse `PrintStream` an. + +Schreiben Sie eine Methode `printDouble`, die eine beliebige double-Zahl mit immer genau drei Nachkommastellen ausgibt. Testen Sie die Methode mit einigen Testzahlen. + + + \ No newline at end of file diff --git a/Auffrischung_005/readme.md b/Auffrischung_005/readme.md new file mode 100644 index 0000000..20552f8 --- /dev/null +++ b/Auffrischung_005/readme.md @@ -0,0 +1,28 @@ +# Maximum in einem Array suchen +## Lernziel + + + +Über Arrays iterieren. + +## Aufgabe + +Gehen Sie in das Paket [pr2.auffrischung.suchemax](../sources/src/main/java/pr2/auffrischung/suchemax). + +Schreiben Sie bitte eine Klasse `GroessteZahl` mit der Methode `sucheMax`, die ein `int`-Array übergeben bekommt und die größte Zahl aus diesem heraussucht und zurückgibt. + +Testen Sie die Methode mit einigen Testzahlen. + + + \ No newline at end of file diff --git a/Auffrischung_006/readme.md b/Auffrischung_006/readme.md new file mode 100644 index 0000000..874855a --- /dev/null +++ b/Auffrischung_006/readme.md @@ -0,0 +1,28 @@ +# Taschenrechner +## Lernziel + + + +`case` verwenden. + +## Aufgabe + +Gehen Sie in das Paket [pr2.auffrischung.taschenrechner](../sources/src/main/java/pr2/auffrischung/taschenrechner). + +Schreiben Sie eine Klasse `Taschenrechner`, die genau eine Methode namens `rechne` hat. Die Methode nimmt zwei `double`-Werte, die die Operanden darstellen und ein `char`, das den Operator symbolisiert. Die Methode soll Addition (`+`), Subtraktion (`-`), Multiplikation (`*`), Division (`/`) und Potenzieren (`^`) unterstützen. Geben Sie das Ergebnis der Rechnung als `double`-Wert zurück und behandeln Sie den Fall, dass ein ungültiger Operator übergeben wird, indem Sie `NaN` (Not a Number) zurückgeben. + +Testen Sie Ihre Klasse und Methode mit einigen einfachen Rechnungen. + + + \ No newline at end of file diff --git a/Ausnahmen_001/readme.md b/Ausnahmen_001/readme.md new file mode 100644 index 0000000..25d3898 --- /dev/null +++ b/Ausnahmen_001/readme.md @@ -0,0 +1,30 @@ +# Ausnahmen testen +## Lernziel + + + +Bei einer gegebenen Klasse Testfälle mit JUnit schreiben, die auf das Werfen von Ausnahmen testen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.exceptions.ausnahmen_testen](../sources/src/main/java/pr2/exceptions/ausnahmen_testen/). + +Sie finden in der Aufgabe eine einfache Implementierung einer [Caesar-Verschlüsselung](https://de.wikipedia.org/wiki/Caesar-Verschlüsselung) in der Klasse `CrypterCaesar`. Außerdem finden Sie noch einen JUnit-Test in dem entsprechenden Paket `test`. + +Im JUnit-Test `CaesarTest` fehlen aber noch die Tests für die Ausnahmen. Diese werden geworfen, wenn die übergebenen Schlüssel bzw. die Klar- und Cypher-Texte nicht den Vorgaben entsprechen. Lesen Sie daher sorgfältig die JavaDoc der Klasse `CrypterCaesar` und fügen Sie dann entsprechende Testfälle in `CaesarTest` hinzu, die auf das korrekte Werfen der Ausnahmen testen. + +Lassen Sie Ihre Unit-Tests laufen und testen Sie, ob die Ausnahmen entsprechend der Vorgaben aus der JavaDoc geworfen werden. + + + \ No newline at end of file diff --git a/Ausnahmen_002/readme.md b/Ausnahmen_002/readme.md new file mode 100644 index 0000000..a7299c1 --- /dev/null +++ b/Ausnahmen_002/readme.md @@ -0,0 +1,34 @@ +# Eigene Ausnahmen schreiben und an entsprechender Stelle werfen +## Lernziel + + + +Ausnahmen programmieren und sinnvoll einsetzen. Bedeutung der Schlüsselwörter `throws` und `throw` verstehen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.exceptions.eigene_ausnahme](../sources/src/main/java/pr2/exceptions/eigene_ausnahme/). + +In der vorliegenden Aufgabe sollen Sie eine Sicherung (`Fuse`) programmieren. Sicherungen gibt es (in unserer Modellwelt) nur für 16, 25 und 32 Ampére. + +Beim Anlegen erfährt die Sicherung über den Konstruktor bei welchem Strom sie auslösen soll. Hierbei soll es nur möglich sein, Sicherungen in den vorhandenen Stärken anzulegen. Bei jedem anderen Wert soll der Konstruktor eine `IllegalCurrentException` werfen. In der Ausnahme soll gespeichert werden, mit welchem (falschen) Wert die Sicherung angelegt werden sollte. Diese Information wird beim Aufruf von `toString()` auf der Ausnahme wieder zurückgegeben. + +Die Sicherung wird benutzt, indem die `use`-Methode mit dem aktuellen Strom aufgerufen wird. Ist dieser größer als der Nennstrom der Sicherung löst diese aus und wirft eine `FuseTrippedException`. In der Ausnahme sind sowohl der Nennstrom als auch der Auslösestrom gespeichert und werden in der `toString`-Methode ausgegeben. + +Beachten Sie die TODO-Kommentare und passen Sie das Programm entsprechend an, damit es die oben beschriebenen Anforderungen erfüllt. + +Kommentieren Sie die Tests ein und lassen Sie diese laufen. Erst wenn alle Tests grün sind, gilt die Aufgabe als bestanden. + + + \ No newline at end of file diff --git a/Ausnahmen_003/readme.md b/Ausnahmen_003/readme.md new file mode 100644 index 0000000..4713aa3 --- /dev/null +++ b/Ausnahmen_003/readme.md @@ -0,0 +1,26 @@ +# Eigene Exception schreiben +## Lernziel + + + +Eigene Exceptions entwerfen und verwenden. + +## Aufgabe + +Gehen Sie in das Paket [pr2.exceptions.fakultaet](../sources/src/main/java/pr2/exceptions/fakultaet/). + +Schreiben Sie bitte eine Klasse `Fakultaet`, die die Fakultät einer Zahl zwischen 0 und 20 berechnen kann. Wenn der Wertebereich über- oder unterschritten wird, soll die entsprechende Methode der Klasse eine `FakultaetException` werfen. Schreiben Sie weiterhin einen JUnit-Test, der sowohl die korrekte Funktion, als auch das Werfen der Ausnahme überprüft. + + + \ No newline at end of file diff --git a/Ausnahmen_004/readme.md b/Ausnahmen_004/readme.md new file mode 100644 index 0000000..514e219 --- /dev/null +++ b/Ausnahmen_004/readme.md @@ -0,0 +1,31 @@ +# Handle-or-Declare-Regel anwenden +## Lernziel + + + +In einem vorhandenen Programm die Ausnahmen korrekt weiter deklarieren und an den richtigen Stellen fangen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.exceptions.handle_or_declare](../sources/src/main/java/pr2/exceptions/handle_or_declare/). + +Entfernen Sie auskommentierten Zeilen in der Klasse `Buchstabenzaehler`. Das Programm wird nicht korrekt kompilieren, weil die Ausnahmen nicht richtig deklariert und behandelt wurden. + +Korrigieren Sie diesen Fehler und sorgen Sie dafür, dass die Ausnahmen an den Stellen behandelt werden, an denen Sie behandelt werden sollten, d.h. dort wo die Verursachung liegt. Bei der `StatistikException` handelt es sich um eine Inkonsistenz im Programm. Überlegen Sie, wo diese behandelt werden sollte und wann sie auftreten kann. + +Sie müssen die Ausnahmen sinnvoll behandeln. Sie einfach an der `main`-Methode +zu deklarieren ist keine valide Lösung dieser Aufgabe. + + + \ No newline at end of file diff --git a/Ausnahmen_005/readme.md b/Ausnahmen_005/readme.md new file mode 100644 index 0000000..0541024 --- /dev/null +++ b/Ausnahmen_005/readme.md @@ -0,0 +1,30 @@ +# Ausnahmen mit `try` und `catch` behandeln. +## Lernziel + + + +Vorhandene Ausnahmen mit `try` und `catch` abfangen und behandeln. + +## Aufgabe + +Gehen Sie in das Paket [pr2.exceptions.try_catch](../sources/src/main/java/pr2/exceptions/try_catch/). + +Betrachten Sie das sehr einfache Zahlenraten-Spiel. Lassen Sie es laufen und spielen Sie ein paar Runden. Versuchen Sie das Programm durch falsche Eingaben zum Absturz zu bringen. + +Im Augenblick werden die Ausnahmen in der `main()`-Methode weiter deklariert, was schlechter Stil ist und zu bei Falscheingaben zu Programmabstürzen führt. Ändern Sie das Programm stattdessen so ab, dass die Ausnahmen korrekt behandelt werden. Entfernen Sie danach die `throws`-Deklaration aus dem Kopf der `main()`-Methode. + +Lassen Sie das Programm erneut laufen und testen Sie, ob es jetzt nach Falscheingaben immer noch abstürzt. + + + \ No newline at end of file diff --git a/Collections_001/readme.md b/Collections_001/readme.md new file mode 100644 index 0000000..75fa977 --- /dev/null +++ b/Collections_001/readme.md @@ -0,0 +1,30 @@ +# Iterator schreiben +## Lernziel + + + +Für eine gegebene Klasse einen Iterator schreiben. + +## Aufgabe + +Gehen Sie in das Paket [pr2.collections.iterator](../sources/src/main/java/pr2/collections/iterator/). + +In dieser Aufgabe sollen Sie für eine bereits vorhandene Klasse einen Iterator schreiben. Bei dieser Klasse (`SimpleStack`) handelt es sich um einen sehr einfach (und nicht sehr sicher) programmierten Stack. + +Implementieren Sie in `SimpleStack` das Interface `Iterable` und schreiben Sie, wie vom Interface verlangt einen Iterator für die Klasse. Sie sollten hier innere Klasse verwenden, um den Zugriff auf die privaten Attribute von `SimpleStack` zu vereinfachen. + +Benutzen Sie die Tests in `SimpleStackTest`, um zu überprüfen, dass Ihre Implementierung des Iterators richtig funktioniert. Hierzu müssen Sie die entsprechenden Tests allerdings erst einkommentieren. + + + \ No newline at end of file diff --git a/Collections_002/readme.md b/Collections_002/readme.md new file mode 100644 index 0000000..32bc0e1 --- /dev/null +++ b/Collections_002/readme.md @@ -0,0 +1,26 @@ +# Iterator programmieren +## Lernziel + + + +Iteratoren verstehen und programmieren. + +## Aufgabe + +Im Paket [pr2.collections.list_iterator](../sources/src/main/java/pr2/collections/list_iterator/) finden Sie den Code für eine einfach verkettete Liste `Liste`. + +Geben Sie bitte den fehlenden Code für die innere Klasse `ListenIterator` an. + + + \ No newline at end of file diff --git a/Collections_003/kafka.txt b/Collections_003/kafka.txt new file mode 100644 index 0000000..b5695c5 --- /dev/null +++ b/Collections_003/kafka.txt @@ -0,0 +1,11 @@ +Verhaftung - Gespräch mit Frau Grubach - Dann Fräulein Bürstner + +Jemand mußte Josef K. verleumdet haben, denn ohne daß er etwas Böses getan hätte, wurde er eines Morgens verhaftet. Die Köchin der Frau Grubach, seiner Zimmervermieterin, die ihm jeden Tag gegen acht Uhr früh das Frühstück brachte, kam diesmal nicht. Das war noch niemals geschehen. K. wartete noch ein Weilchen, sah von seinem Kopfkissen aus die alte Frau, die ihm gegenüber wohnte und die ihn mit einer an ihr ganz ungewöhnlichen Neugierde beobachtete, dann aber, gleichzeitig befremdet und hungrig, läutete er. Sofort klopfte es und ein Mann, den er in dieser Wohnung noch niemals gesehen hatte, trat ein. Er war schlank und doch fest gebaut, er trug ein anliegendes schwarzes Kleid, das, ähnlich den Reiseanzügen, mit verschiedenen Falten, Taschen, Schnallen, Knöpfen und einem Gürtel versehen war und infolgedessen, ohne daß man sich darüber klar wurde, wozu es dienen sollte, besonders praktisch erschien. "Wer sind Sie?" fragte K. und saß gleich halb aufrecht im Bett. Der Mann aber ging über die Frage hinweg, als müsse man seine Erscheinung hinnehmen, und sagte bloß seinerseits: "Sie haben geläutet?" "Anna soll mir das Frühstück bringen", sagte K. und versuchte, zunächst stillschweigend, durch Aufmerksamkeit und Überlegung festzustellen, wer der Mann eigentlich war. Aber dieser setzte sich nicht allzulange seinen Blicken aus, sondern wandte sich zur Tür, die er ein wenig öffnete, um jemandem, der offenbar knapp hinter der Tür stand, zu sagen: "Er will, daß Anna ihm das Frühstück bringt." Ein kleines Gelächter im Nebenzimmer folgte, es war nach dem Klang nicht sicher, ob nicht mehrere Personen daran beteiligt waren. Obwohl der fremde Mann dadurch nichts erfahren haben konnte, was er nicht schon früher gewußt hätte, sagte er nun doch zu K. im Tone einer Meldung: "Es ist unmöglich." "Das wäre neu", sagte K., sprang aus dem Bett und zog rasch seine Hosen an. "Ich will doch sehen, was für Leute im Nebenzimmer sind und wie Frau Grubach diese Störung mir gegenüber verantworten wird." Es fiel ihm zwar gleich ein, daß er das nicht hätte laut sagen müssen und daß er dadurch gewissermaßen ein Beaufsichtigungsrecht des Fremden anerkannte, aber es schien ihm jetzt nicht wichtig. Immerhin faßte es der Fremde so auf, denn er sagte: "Wollen Sie nicht lieber hierbleiben?" "Ich will weder hierbleiben, noch von Ihnen angesprochen werden, solange Sie sich mir nicht vorstellen." "Es war gut gemeint", sagte der Fremde und öffnete nun freiwillig die Tür. Im Nebenzimmer, in das K. langsamer eintrat, als er wollte, sah es auf den ersten Blick fast genau so aus wie am Abend vorher. Es war das Wohnzimmer der Frau Grubach, vielleicht war in diesem mit Möbeln, Decken, Porzellan und Photographien überfüllten Zimmer heute ein wenig mehr Raum als sonst, man erkannte das nicht gleich, um so weniger, als die Hauptveränderung in der Anwesenheit eines Mannes bestand, der beim offenen Fenster mit einem Buch saß, von dem er jetzt aufblickte. "Sie hätten in Ihrem Zimmer bleiben sollen! Hat es Ihnen denn Franz nicht gesagt?" "Ja, was wollen Sie denn?" sagte K. und sah von der neuen Bekanntschaft zu dem mit Franz Benannten, der in der Tür stehengeblieben war, und dann wieder zurück. Durch das offene Fenster erblickte man wieder die alte Frau, die mit wahrhaft greisenhafter Neugierde zu dem jetzt gegenüberliegenden Fenster getreten war, um auch weiterhin alles zu sehen. "Ich will doch Frau Grubach -", sagte K., machte eine Bewegung, als reiße er sich von den zwei Männern los, die aber weit von ihm entfernt standen, und wollte weitergehen. "Nein", sagte der Mann beim Fenster, warf das Buch auf ein Tischchen und stand auf. "Sie dürfen nicht weggehen, Sie sind ja verhaftet." "Es sieht so aus", sagte K. "Und warum denn?" fragte er dann. "Wir sind nicht dazu bestellt, Ihnen das zu sagen. Gehen Sie in Ihr Zimmer und warten Sie. Das Verfahren ist nun einmal eingeleitet, und Sie werden alles zur richtigen Zeit erfahren. Ich gehe über meinen Auftrag hinaus, wenn ich Ihnen so freundschaftlich zurede. Aber ich hoffe, es hört es niemand sonst als Franz, und der ist selbst gegen alle Vorschrift freundlich zu Ihnen. Wenn Sie auch weiterhin so viel Glück haben wie bei der Bestimmung Ihrer Wächter, dann können Sie zuversichtlich sein." K. wollte sich setzen, aber nun sah er, daß im ganzen Zimmer keine Sitzgelegenheit war, außer dem Sessel beim Fenster. "Sie werden noch einsehen, wie wahr das alles ist", sagte Franz und ging gleichzeitig mit dem andern Mann auf ihn zu. Besonders der letztere überragte K. bedeutend und klopfte ihm öfters auf die Schulter. Beide prüften K.s Nachthemd und sagten, daß er jetzt ein viel schlechteres Hemd werde anziehen müssen, daß sie aber dieses Hemd wie auch seine übrige Wäsche aufbewahren und, wenn seine Sache günstig ausfallen sollte, ihm wieder zurückgeben würden. "Es ist besser, Sie geben die Sachen uns als ins Depot", sagten sie, "denn im Depot kommen öfters Unterschleife vor und außerdem verkauft man dort alle Sachen nach einer gewissen Zeit, ohne Rücksicht, ob das betreffende Verfahren zu Ende ist oder nicht. Und wie lange dauern doch derartige Prozesse, besonders in letzter Zeit! Sie bekämen dann schließlich allerdings vom Depot den Erlös, aber dieser Erlös ist erstens an sich schon gering, denn beim Verkauf entscheidet nicht die Höhe des Angebotes, sondern die Höhe der Bestechung, und weiter verringern sich solche Erlöse erfahrungsgemäß, wenn sie von Hand zu Hand und von Jahr zu Jahr weitergegeben werden." K. achtete auf diese Reden kaum, das Verfügungsrecht über seine Sachen, das er vielleicht noch besaß, schätzte er nicht hoch ein, viel wichtiger war es ihm, Klarheit über seine Lage zu bekommen; in Gegenwart dieser Leute konnte er aber nicht einmal nachdenken, immer wieder stieß der Bauch des zweiten Wächters - es konnten ja nur Wächter sein - förmlich freundschaftlich an ihn, sah er aber auf, dann erblickte er ein zu diesem dicken Körper gar nicht passendes trockenes, knochiges Gesicht mit starker, seitlich gedrehter Nase, das sich über ihn hinweg mit dem anderen Wächter verständigte. Was waren denn das für Menschen? Wovon sprachen sie? Welcher Behörde gehörten sie an? K. lebte doch in einem Rechtsstaat, überall herrschte Friede, alle Gesetze bestanden aufrecht, wer wagte, ihn in seiner Wohnung zu überfallen? Er neigte stets dazu, alles möglichst leicht zu nehmen, das Schlimmste erst beim Eintritt des Schlimmsten zu glauben, keine Vorsorge für die Zukunft zu treffen, selbst wenn alles drohte. Hier schien ihm das aber nicht richtig, man konnte zwar das Ganze als Spaß ansehen, als einen groben Spaß, den ihm aus unbekannten Gründen, vielleicht weil heute sein dreißigster Geburtstag war, die Kollegen in der Bank veranstaltet hatten, es war natürlich möglich, vielleicht brauchte er nur auf irgendeine Weise den Wächtern ins Gesicht zu lachen, und sie würden mitlachen, vielleicht waren es Dienstmänner von der Straßenecke, sie sahen ihnen nicht unähnlich - trotzdem war er diesmal, förmlich schon seit dem ersten Anblick des Wächters Franz, entschlossen, nicht den geringsten Vorteil, den er vielleicht gegenüber diesen Leuten besaß, aus der Hand zu geben. Darin, daß man später sagen würde, er habe keinen Spaß verstanden, sah K. eine ganz geringe Gefahr, wohl aber erinnerte er sich - ohne daß es sonst seine Gewohnheit gewesen wäre, aus Erfahrungen zu lernen - an einige, an sich unbedeutende Fälle, in denen er zum Unterschied von seinen Freunden mit Bewußtsein, ohne das geringste Gefühl für die möglichen Folgen, sich unvorsichtig benommen hatte und dafür durch das Ergebnis gestraft worden war. Es sollte nicht wieder geschehen, zumindest nicht diesmal; war es eine Komödie, so wollte er mitspielen. + +Noch war er frei. "Erlauben Sie", sagte er und ging eilig zwischen den Wächtern durch in sein Zimmer. "Er scheint vernünftig zu sein", hörte er hinter sich sagen. In seinem Zimmer riß er gleich die Schubladen des Schreibtischs auf, es lag dort alles in großer Ordnung, aber gerade die Legitimationspapiere, die er suchte, konnte er in der Aufregung nicht gleich finden. Schließlich fand er seine Radfahrlegitimation und wollte schon mit ihr zu den Wächtern gehen, dann aber schien ihm das Papier zu geringfügig und er suchte weiter, bis er den Geburtsschein fand. Als er wieder in das Nebenzimmer zurückkam, öffnete sich gerade die gegenüberliegende Tür und Frau Grubach wollte dort eintreten. Man sah sie nur einen Augenblick, denn kaum hatte sie K. erkannt, als sie offenbar verlegen wurde, um Verzeihung bat, verschwand und äußerst vorsichtig die Tür schloß. "Kommen Sie doch herein", hatte K. gerade noch sagen können. Nun aber stand er mit seinen Papieren in der Mitte des Zimmers, sah noch auf die Tür hin, die sich nicht wieder öffnete, und wurde erst durch einen Anruf der Wächter aufgeschreckt, die bei dem Tischchen am offenen Fenster saßen und, wie K. jetzt erkannte, sein Frühstück verzehrten. "Warum ist sie nicht eingetreten?" fragte er. "Sie darf nicht", sagte der große Wächter. "Sie sind doch verhaftet." "Wie kann ich denn verhaftet sein? Und gar auf diese Weise?" "Nun fangen Sie also wieder an", sagte der Wächter und tauchte ein Butterbrot ins Honigfäßchen. "Solche Fragen beantworten wir nicht." "Sie werden sie beantworten müssen", sagte K. "Hier sind meine Legitimationspapiere, zeigen Sie mir jetzt die Ihrigen und vor allem den Verhaftbefehl." "Du lieber Himmel!" sagte der Wächter. "Daß Sie sich in Ihre Lage nicht fügen können und daß Sie es darauf angelegt zu haben scheinen, uns, die wir Ihnen jetzt wahrscheinlich von allen Ihren Mitmenschen am nächsten stehen, nutzlos zu reizen!" "Es ist so, glauben Sie es doch", sagte Franz, führte die Kaffeetasse, die er in der Hand hielt, nicht zum Mund, sondern sah K. mit einem langen, wahrscheinlich bedeutungsvollen, aber unverständlichen Blick an. K. ließ sich, ohne es zu wollen, in ein Zwiegespräch der Blicke mit Franz ein, schlug dann aber doch auf seine Papiere und sagte: "Hier sind meine Legitimationspapiere." "Was kümmern uns denn die?" rief nun schon der große Wächter. "Sie führen sich ärger auf als ein Kind. Was wollen Sie denn? Wollen Sie Ihren großen, verfluchten Prozeß dadurch zu einem raschen Ende bringen, daß Sie mit uns, den Wächtern, über Legitimation und Verhaftbefehl diskutieren? Wir sind niedrige Angestellte, die sich in einem Legitimationspapier kaum auskennen und die mit Ihrer Sache nichts anderes zu tun haben, als daß sie zehn Stunden täglich bei Ihnen Wache halten und dafür bezahlt werden. Das ist alles, was wir sind, trotzdem aber sind wir fähig, einzusehen, daß die hohen Behörden, in deren Dienst wir stehen, ehe sie eine solche Verhaftung verfügen, sich sehr genau über die Gründe der Verhaftung und die Person des Verhafteten unterrichten. Es gibt darin keinen Irrtum. Unsere Behörde, soweit ich sie kenne, und ich kenne nur die niedrigsten Grade, sucht doch nicht etwa die Schuld in der Bevölkerung, sondern wird, wie es im Gesetz heißt, von der Schuld angezogen und muß uns Wächter ausschicken. Das ist Gesetz. Wo gäbe es da einen Irrtum?" "Dieses Gesetz kenne ich nicht", sagte K. "Desto schlimmer für Sie", sagte der Wächter. "Es besteht wohl auch nur in Ihren Köpfen", sagte K., er wollte sich irgendwie in die Gedanken der Wächter einschleichen, sie zu seinen Gunsten wenden oder sich dort einbürgern. Aber der Wächter sagte nur abweisend: "Sie werden es zu fühlen bekommen." Franz mischte sich ein und sagte: "Sieh, Willem, er gibt zu, er kenne das Gesetz nicht, und behauptet gleichzeitig, schuldlos zu sein." "Du hast ganz recht, aber ihm kann man nichts begreiflich machen", sagte der andere. K. antwortete nichts mehr; muß ich, dachte er, durch das Geschwätz dieser niedrigsten Organe - sie geben selbst zu, es zu sein - mich noch mehr verwirren lassen? Sie reden doch jedenfalls von Dingen, die sie gar nicht verstehen. Ihre Sicherheit ist nur durch ihre Dummheit möglich. Ein paar Worte, die ich mit einem mir ebenbürtigen Menschen sprechen werde, werden alles unvergleichlich klarer machen als die längsten Reden mit diesen. Er ging einige Male in dem freien Raum des Zimmers auf und ab, drüben sah er die alte Frau, die einen noch viel älteren Greis zum Fenster gezerrt hatte, den sie umschlungen hielt. K. mußte dieser Schaustellung ein Ende machen: "Führen Sie mich zu Ihrem Vorgesetzten", sagte er. "Wenn er es wünscht; nicht früher", sagte der Wächter, der Willem genannt worden war. "Und nun rate ich Ihnen", fügte er hinzu, "in Ihr Zimmer zu gehen, sich ruhig zu verhalten und darauf zu warten, was über Sie verfügt werden wird. Wir raten Ihnen, zerstreuen Sie sich nicht durch nutzlose Gedanken, sondern sammeln Sie sich, es werden große Anforderungen an Sie gestellt werden. Sie haben uns nicht so behandelt, wie es unser Entgegenkommen verdient hätte, Sie haben vergessen, daß wir, mögen wir auch sein was immer, zumindest jetzt Ihnen gegenüber freie Männer sind, das ist kein kleines Übergewicht. Trotzdem sind wir bereit, falls Sie Geld haben, Ihnen ein kleines Frühstück aus dem Kaffeehaus drüben zu bringen." + +Ohne auf dieses Angebot zu antworten, stand K. ein Weilchen lang still. Vielleicht würden ihn die beiden, wenn er die Tür des folgenden Zimmers oder gar die Tür des Vorzimmers öffnete, gar nicht zu hindern wagen, vielleicht wäre es die einfachste Lösung des Ganzen, daß er es auf die Spitze trieb. Aber vielleicht würden sie ihn doch packen und, war er einmal niedergeworfen, so war auch alle Überlegenheit verloren, die er jetzt ihnen gegenüber in gewisser Hinsicht doch wahrte. Deshalb zog er die Sicherheit der Lösung vor, wie sie der natürliche Verlauf bringen mußte, und ging in sein Zimmer zurück, ohne daß von seiner Seite oder von Seite der Wächter ein weiteres Wort gefallen wäre. + +Er warf sich auf sein Bett und nahm vom Waschtisch einen schönen Apfel, den er sich gestern abend für das Frühstück vorbereitet hatte. Jetzt war er sein einziges Frühstück und jedenfalls, wie er sich beim ersten großen Bissen versicherte, viel besser, als das Frühstück aus dem schmutzigen Nachtcafé gewesen wäre, das er durch die Gnade der Wächter hätte bekommen können. Er fühlte sich wohl und zuversichtlich, in der Bank versäumte er zwar heute vormittag seinen Dienst, aber das war bei der verhältnismäßig hohen Stellung, die er dort einnahm, leicht entschuldigt. Sollte er die wirkliche Entschuldigung anführen? Er gedachte es zu tun, Würde man ihm nicht glauben, was in diesem Fall begreiflich war, so konnte er Frau Grubach als Zeugin führen oder auch die beiden Alten von drüben, die wohl jetzt auf dem Marsch zum gegenüberliegenden Fenster waren. Es wunderte K., wenigstens aus dem Gedankengang der Wächter wunderte es ihn, daß sie ihn in das Zimmer getrieben und ihn hier allein gelassen hatten, wo er doch zehnfache Möglichkeit hatte, sich umzubringen. Gleichzeitig allerdings fragte er sich, diesmal aus seinem Gedankengang, was für einen Grund er haben könnte, es zu tun. Etwa weil die zwei nebenan saßen und sein Frühstück abgefangen hatten? Es wäre so sinnlos gewesen, sich umzubringen, daß er, selbst wenn er es hätte tun wollen, infolge der Sinnlosigkeit dazu nicht imstande gewesen wäre. Wäre die geistige Beschränktheit der Wächter nicht so auffallend gewesen, so hätte man annehmen können, daß auch sie, infolge der gleichen Überzeugung, keine Gefahr darin gesehen hätten, ihn allein zu lassen. Sie mochten jetzt, wenn sie wollten, zusehen, wie er zu einem Wandschränkchen ging, in dem er einen guten Schnaps aufbewahrte, wie er ein Gläschen zuerst zum Ersatz des Frühstücks leerte und wie er ein zweites Gläschen dazu bestimmte, sich Mut zu machen, das letztere nur aus Vorsicht für den unwahrscheinlichen Fall, daß es nötig sein sollte. + + diff --git a/Collections_003/readme.md b/Collections_003/readme.md new file mode 100644 index 0000000..e0b96cf --- /dev/null +++ b/Collections_003/readme.md @@ -0,0 +1,36 @@ +# `List` und dessen Implementierungen +## Lernziel + + + +Das Interface `List` und eine passende Implementierung einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.collections.list](../sources/src/main/java/pr2/collections/list/). + +Im Projekt finden Sie die Klasse `WordCollector` mit deren Hilfe man die Wörter in einem Text analysieren kann. Nach Übergabe eines Dateinamens wird die Datei eingelesen und die vorhandenen Wörter werden gesammelt. Am Ende wird die Liste der Wörter alphabetisch sortiert ausgegeben. + +Leider wurde `WordCollector` von einem Entwickler geschrieben, der nichts von dem Collection-Framework wusste und daher alles mit Array realisiert hat. Hierdurch sind einige sehr komplexe Konstruktionen entstanden. + +Lassen Sie das Programm laufen und betrachten Sie die Ausgabe. Schauen Sie sich die Klasse `WordCollector` an und versuchen Sie die Funktionsweise und die Implementierung genau zu verstehen. Dieser Schritt ist wichtig, um die im Folgenden beschriebenen Änderungen an der Klasse vornehmen zu können, lassen Sie sich also Zeit für diesen Schritt. + +Ändern Sie die Klasse nun so, dass anstatt Arrays `List` und deren Implementierungen verwendet werden. Ändern Sie die Schnittstellen und Parameter der Methoden von `String[]` auf `List`. Modifizieren Sie auch die Implementierung der Methoden und versuchen Sie Arrays wo immer möglich durch Listen zu ersetzen. Schauen Sie sich auch die JavaDoc der Klassen `java.util.Arrays` und `java.util.Collections` an, um möglicherweise sehr hilfreiche Methoden zu finden. + +__Hinweis:__ Die Konstruktion `String[] words = line.toLowerCase().split("[,. ]");` können Sie nicht durch Listen ersetzen, da die `split`-Methode Arrays verwendet. + +Die Datei mit dem Text finden Sie unter [kafka.txt](../sources/src/main/resources/pr2/collections/list/kafka.txt). + + + \ No newline at end of file diff --git a/Collections_004/kafka.txt b/Collections_004/kafka.txt new file mode 100644 index 0000000..b5695c5 --- /dev/null +++ b/Collections_004/kafka.txt @@ -0,0 +1,11 @@ +Verhaftung - Gespräch mit Frau Grubach - Dann Fräulein Bürstner + +Jemand mußte Josef K. verleumdet haben, denn ohne daß er etwas Böses getan hätte, wurde er eines Morgens verhaftet. Die Köchin der Frau Grubach, seiner Zimmervermieterin, die ihm jeden Tag gegen acht Uhr früh das Frühstück brachte, kam diesmal nicht. Das war noch niemals geschehen. K. wartete noch ein Weilchen, sah von seinem Kopfkissen aus die alte Frau, die ihm gegenüber wohnte und die ihn mit einer an ihr ganz ungewöhnlichen Neugierde beobachtete, dann aber, gleichzeitig befremdet und hungrig, läutete er. Sofort klopfte es und ein Mann, den er in dieser Wohnung noch niemals gesehen hatte, trat ein. Er war schlank und doch fest gebaut, er trug ein anliegendes schwarzes Kleid, das, ähnlich den Reiseanzügen, mit verschiedenen Falten, Taschen, Schnallen, Knöpfen und einem Gürtel versehen war und infolgedessen, ohne daß man sich darüber klar wurde, wozu es dienen sollte, besonders praktisch erschien. "Wer sind Sie?" fragte K. und saß gleich halb aufrecht im Bett. Der Mann aber ging über die Frage hinweg, als müsse man seine Erscheinung hinnehmen, und sagte bloß seinerseits: "Sie haben geläutet?" "Anna soll mir das Frühstück bringen", sagte K. und versuchte, zunächst stillschweigend, durch Aufmerksamkeit und Überlegung festzustellen, wer der Mann eigentlich war. Aber dieser setzte sich nicht allzulange seinen Blicken aus, sondern wandte sich zur Tür, die er ein wenig öffnete, um jemandem, der offenbar knapp hinter der Tür stand, zu sagen: "Er will, daß Anna ihm das Frühstück bringt." Ein kleines Gelächter im Nebenzimmer folgte, es war nach dem Klang nicht sicher, ob nicht mehrere Personen daran beteiligt waren. Obwohl der fremde Mann dadurch nichts erfahren haben konnte, was er nicht schon früher gewußt hätte, sagte er nun doch zu K. im Tone einer Meldung: "Es ist unmöglich." "Das wäre neu", sagte K., sprang aus dem Bett und zog rasch seine Hosen an. "Ich will doch sehen, was für Leute im Nebenzimmer sind und wie Frau Grubach diese Störung mir gegenüber verantworten wird." Es fiel ihm zwar gleich ein, daß er das nicht hätte laut sagen müssen und daß er dadurch gewissermaßen ein Beaufsichtigungsrecht des Fremden anerkannte, aber es schien ihm jetzt nicht wichtig. Immerhin faßte es der Fremde so auf, denn er sagte: "Wollen Sie nicht lieber hierbleiben?" "Ich will weder hierbleiben, noch von Ihnen angesprochen werden, solange Sie sich mir nicht vorstellen." "Es war gut gemeint", sagte der Fremde und öffnete nun freiwillig die Tür. Im Nebenzimmer, in das K. langsamer eintrat, als er wollte, sah es auf den ersten Blick fast genau so aus wie am Abend vorher. Es war das Wohnzimmer der Frau Grubach, vielleicht war in diesem mit Möbeln, Decken, Porzellan und Photographien überfüllten Zimmer heute ein wenig mehr Raum als sonst, man erkannte das nicht gleich, um so weniger, als die Hauptveränderung in der Anwesenheit eines Mannes bestand, der beim offenen Fenster mit einem Buch saß, von dem er jetzt aufblickte. "Sie hätten in Ihrem Zimmer bleiben sollen! Hat es Ihnen denn Franz nicht gesagt?" "Ja, was wollen Sie denn?" sagte K. und sah von der neuen Bekanntschaft zu dem mit Franz Benannten, der in der Tür stehengeblieben war, und dann wieder zurück. Durch das offene Fenster erblickte man wieder die alte Frau, die mit wahrhaft greisenhafter Neugierde zu dem jetzt gegenüberliegenden Fenster getreten war, um auch weiterhin alles zu sehen. "Ich will doch Frau Grubach -", sagte K., machte eine Bewegung, als reiße er sich von den zwei Männern los, die aber weit von ihm entfernt standen, und wollte weitergehen. "Nein", sagte der Mann beim Fenster, warf das Buch auf ein Tischchen und stand auf. "Sie dürfen nicht weggehen, Sie sind ja verhaftet." "Es sieht so aus", sagte K. "Und warum denn?" fragte er dann. "Wir sind nicht dazu bestellt, Ihnen das zu sagen. Gehen Sie in Ihr Zimmer und warten Sie. Das Verfahren ist nun einmal eingeleitet, und Sie werden alles zur richtigen Zeit erfahren. Ich gehe über meinen Auftrag hinaus, wenn ich Ihnen so freundschaftlich zurede. Aber ich hoffe, es hört es niemand sonst als Franz, und der ist selbst gegen alle Vorschrift freundlich zu Ihnen. Wenn Sie auch weiterhin so viel Glück haben wie bei der Bestimmung Ihrer Wächter, dann können Sie zuversichtlich sein." K. wollte sich setzen, aber nun sah er, daß im ganzen Zimmer keine Sitzgelegenheit war, außer dem Sessel beim Fenster. "Sie werden noch einsehen, wie wahr das alles ist", sagte Franz und ging gleichzeitig mit dem andern Mann auf ihn zu. Besonders der letztere überragte K. bedeutend und klopfte ihm öfters auf die Schulter. Beide prüften K.s Nachthemd und sagten, daß er jetzt ein viel schlechteres Hemd werde anziehen müssen, daß sie aber dieses Hemd wie auch seine übrige Wäsche aufbewahren und, wenn seine Sache günstig ausfallen sollte, ihm wieder zurückgeben würden. "Es ist besser, Sie geben die Sachen uns als ins Depot", sagten sie, "denn im Depot kommen öfters Unterschleife vor und außerdem verkauft man dort alle Sachen nach einer gewissen Zeit, ohne Rücksicht, ob das betreffende Verfahren zu Ende ist oder nicht. Und wie lange dauern doch derartige Prozesse, besonders in letzter Zeit! Sie bekämen dann schließlich allerdings vom Depot den Erlös, aber dieser Erlös ist erstens an sich schon gering, denn beim Verkauf entscheidet nicht die Höhe des Angebotes, sondern die Höhe der Bestechung, und weiter verringern sich solche Erlöse erfahrungsgemäß, wenn sie von Hand zu Hand und von Jahr zu Jahr weitergegeben werden." K. achtete auf diese Reden kaum, das Verfügungsrecht über seine Sachen, das er vielleicht noch besaß, schätzte er nicht hoch ein, viel wichtiger war es ihm, Klarheit über seine Lage zu bekommen; in Gegenwart dieser Leute konnte er aber nicht einmal nachdenken, immer wieder stieß der Bauch des zweiten Wächters - es konnten ja nur Wächter sein - förmlich freundschaftlich an ihn, sah er aber auf, dann erblickte er ein zu diesem dicken Körper gar nicht passendes trockenes, knochiges Gesicht mit starker, seitlich gedrehter Nase, das sich über ihn hinweg mit dem anderen Wächter verständigte. Was waren denn das für Menschen? Wovon sprachen sie? Welcher Behörde gehörten sie an? K. lebte doch in einem Rechtsstaat, überall herrschte Friede, alle Gesetze bestanden aufrecht, wer wagte, ihn in seiner Wohnung zu überfallen? Er neigte stets dazu, alles möglichst leicht zu nehmen, das Schlimmste erst beim Eintritt des Schlimmsten zu glauben, keine Vorsorge für die Zukunft zu treffen, selbst wenn alles drohte. Hier schien ihm das aber nicht richtig, man konnte zwar das Ganze als Spaß ansehen, als einen groben Spaß, den ihm aus unbekannten Gründen, vielleicht weil heute sein dreißigster Geburtstag war, die Kollegen in der Bank veranstaltet hatten, es war natürlich möglich, vielleicht brauchte er nur auf irgendeine Weise den Wächtern ins Gesicht zu lachen, und sie würden mitlachen, vielleicht waren es Dienstmänner von der Straßenecke, sie sahen ihnen nicht unähnlich - trotzdem war er diesmal, förmlich schon seit dem ersten Anblick des Wächters Franz, entschlossen, nicht den geringsten Vorteil, den er vielleicht gegenüber diesen Leuten besaß, aus der Hand zu geben. Darin, daß man später sagen würde, er habe keinen Spaß verstanden, sah K. eine ganz geringe Gefahr, wohl aber erinnerte er sich - ohne daß es sonst seine Gewohnheit gewesen wäre, aus Erfahrungen zu lernen - an einige, an sich unbedeutende Fälle, in denen er zum Unterschied von seinen Freunden mit Bewußtsein, ohne das geringste Gefühl für die möglichen Folgen, sich unvorsichtig benommen hatte und dafür durch das Ergebnis gestraft worden war. Es sollte nicht wieder geschehen, zumindest nicht diesmal; war es eine Komödie, so wollte er mitspielen. + +Noch war er frei. "Erlauben Sie", sagte er und ging eilig zwischen den Wächtern durch in sein Zimmer. "Er scheint vernünftig zu sein", hörte er hinter sich sagen. In seinem Zimmer riß er gleich die Schubladen des Schreibtischs auf, es lag dort alles in großer Ordnung, aber gerade die Legitimationspapiere, die er suchte, konnte er in der Aufregung nicht gleich finden. Schließlich fand er seine Radfahrlegitimation und wollte schon mit ihr zu den Wächtern gehen, dann aber schien ihm das Papier zu geringfügig und er suchte weiter, bis er den Geburtsschein fand. Als er wieder in das Nebenzimmer zurückkam, öffnete sich gerade die gegenüberliegende Tür und Frau Grubach wollte dort eintreten. Man sah sie nur einen Augenblick, denn kaum hatte sie K. erkannt, als sie offenbar verlegen wurde, um Verzeihung bat, verschwand und äußerst vorsichtig die Tür schloß. "Kommen Sie doch herein", hatte K. gerade noch sagen können. Nun aber stand er mit seinen Papieren in der Mitte des Zimmers, sah noch auf die Tür hin, die sich nicht wieder öffnete, und wurde erst durch einen Anruf der Wächter aufgeschreckt, die bei dem Tischchen am offenen Fenster saßen und, wie K. jetzt erkannte, sein Frühstück verzehrten. "Warum ist sie nicht eingetreten?" fragte er. "Sie darf nicht", sagte der große Wächter. "Sie sind doch verhaftet." "Wie kann ich denn verhaftet sein? Und gar auf diese Weise?" "Nun fangen Sie also wieder an", sagte der Wächter und tauchte ein Butterbrot ins Honigfäßchen. "Solche Fragen beantworten wir nicht." "Sie werden sie beantworten müssen", sagte K. "Hier sind meine Legitimationspapiere, zeigen Sie mir jetzt die Ihrigen und vor allem den Verhaftbefehl." "Du lieber Himmel!" sagte der Wächter. "Daß Sie sich in Ihre Lage nicht fügen können und daß Sie es darauf angelegt zu haben scheinen, uns, die wir Ihnen jetzt wahrscheinlich von allen Ihren Mitmenschen am nächsten stehen, nutzlos zu reizen!" "Es ist so, glauben Sie es doch", sagte Franz, führte die Kaffeetasse, die er in der Hand hielt, nicht zum Mund, sondern sah K. mit einem langen, wahrscheinlich bedeutungsvollen, aber unverständlichen Blick an. K. ließ sich, ohne es zu wollen, in ein Zwiegespräch der Blicke mit Franz ein, schlug dann aber doch auf seine Papiere und sagte: "Hier sind meine Legitimationspapiere." "Was kümmern uns denn die?" rief nun schon der große Wächter. "Sie führen sich ärger auf als ein Kind. Was wollen Sie denn? Wollen Sie Ihren großen, verfluchten Prozeß dadurch zu einem raschen Ende bringen, daß Sie mit uns, den Wächtern, über Legitimation und Verhaftbefehl diskutieren? Wir sind niedrige Angestellte, die sich in einem Legitimationspapier kaum auskennen und die mit Ihrer Sache nichts anderes zu tun haben, als daß sie zehn Stunden täglich bei Ihnen Wache halten und dafür bezahlt werden. Das ist alles, was wir sind, trotzdem aber sind wir fähig, einzusehen, daß die hohen Behörden, in deren Dienst wir stehen, ehe sie eine solche Verhaftung verfügen, sich sehr genau über die Gründe der Verhaftung und die Person des Verhafteten unterrichten. Es gibt darin keinen Irrtum. Unsere Behörde, soweit ich sie kenne, und ich kenne nur die niedrigsten Grade, sucht doch nicht etwa die Schuld in der Bevölkerung, sondern wird, wie es im Gesetz heißt, von der Schuld angezogen und muß uns Wächter ausschicken. Das ist Gesetz. Wo gäbe es da einen Irrtum?" "Dieses Gesetz kenne ich nicht", sagte K. "Desto schlimmer für Sie", sagte der Wächter. "Es besteht wohl auch nur in Ihren Köpfen", sagte K., er wollte sich irgendwie in die Gedanken der Wächter einschleichen, sie zu seinen Gunsten wenden oder sich dort einbürgern. Aber der Wächter sagte nur abweisend: "Sie werden es zu fühlen bekommen." Franz mischte sich ein und sagte: "Sieh, Willem, er gibt zu, er kenne das Gesetz nicht, und behauptet gleichzeitig, schuldlos zu sein." "Du hast ganz recht, aber ihm kann man nichts begreiflich machen", sagte der andere. K. antwortete nichts mehr; muß ich, dachte er, durch das Geschwätz dieser niedrigsten Organe - sie geben selbst zu, es zu sein - mich noch mehr verwirren lassen? Sie reden doch jedenfalls von Dingen, die sie gar nicht verstehen. Ihre Sicherheit ist nur durch ihre Dummheit möglich. Ein paar Worte, die ich mit einem mir ebenbürtigen Menschen sprechen werde, werden alles unvergleichlich klarer machen als die längsten Reden mit diesen. Er ging einige Male in dem freien Raum des Zimmers auf und ab, drüben sah er die alte Frau, die einen noch viel älteren Greis zum Fenster gezerrt hatte, den sie umschlungen hielt. K. mußte dieser Schaustellung ein Ende machen: "Führen Sie mich zu Ihrem Vorgesetzten", sagte er. "Wenn er es wünscht; nicht früher", sagte der Wächter, der Willem genannt worden war. "Und nun rate ich Ihnen", fügte er hinzu, "in Ihr Zimmer zu gehen, sich ruhig zu verhalten und darauf zu warten, was über Sie verfügt werden wird. Wir raten Ihnen, zerstreuen Sie sich nicht durch nutzlose Gedanken, sondern sammeln Sie sich, es werden große Anforderungen an Sie gestellt werden. Sie haben uns nicht so behandelt, wie es unser Entgegenkommen verdient hätte, Sie haben vergessen, daß wir, mögen wir auch sein was immer, zumindest jetzt Ihnen gegenüber freie Männer sind, das ist kein kleines Übergewicht. Trotzdem sind wir bereit, falls Sie Geld haben, Ihnen ein kleines Frühstück aus dem Kaffeehaus drüben zu bringen." + +Ohne auf dieses Angebot zu antworten, stand K. ein Weilchen lang still. Vielleicht würden ihn die beiden, wenn er die Tür des folgenden Zimmers oder gar die Tür des Vorzimmers öffnete, gar nicht zu hindern wagen, vielleicht wäre es die einfachste Lösung des Ganzen, daß er es auf die Spitze trieb. Aber vielleicht würden sie ihn doch packen und, war er einmal niedergeworfen, so war auch alle Überlegenheit verloren, die er jetzt ihnen gegenüber in gewisser Hinsicht doch wahrte. Deshalb zog er die Sicherheit der Lösung vor, wie sie der natürliche Verlauf bringen mußte, und ging in sein Zimmer zurück, ohne daß von seiner Seite oder von Seite der Wächter ein weiteres Wort gefallen wäre. + +Er warf sich auf sein Bett und nahm vom Waschtisch einen schönen Apfel, den er sich gestern abend für das Frühstück vorbereitet hatte. Jetzt war er sein einziges Frühstück und jedenfalls, wie er sich beim ersten großen Bissen versicherte, viel besser, als das Frühstück aus dem schmutzigen Nachtcafé gewesen wäre, das er durch die Gnade der Wächter hätte bekommen können. Er fühlte sich wohl und zuversichtlich, in der Bank versäumte er zwar heute vormittag seinen Dienst, aber das war bei der verhältnismäßig hohen Stellung, die er dort einnahm, leicht entschuldigt. Sollte er die wirkliche Entschuldigung anführen? Er gedachte es zu tun, Würde man ihm nicht glauben, was in diesem Fall begreiflich war, so konnte er Frau Grubach als Zeugin führen oder auch die beiden Alten von drüben, die wohl jetzt auf dem Marsch zum gegenüberliegenden Fenster waren. Es wunderte K., wenigstens aus dem Gedankengang der Wächter wunderte es ihn, daß sie ihn in das Zimmer getrieben und ihn hier allein gelassen hatten, wo er doch zehnfache Möglichkeit hatte, sich umzubringen. Gleichzeitig allerdings fragte er sich, diesmal aus seinem Gedankengang, was für einen Grund er haben könnte, es zu tun. Etwa weil die zwei nebenan saßen und sein Frühstück abgefangen hatten? Es wäre so sinnlos gewesen, sich umzubringen, daß er, selbst wenn er es hätte tun wollen, infolge der Sinnlosigkeit dazu nicht imstande gewesen wäre. Wäre die geistige Beschränktheit der Wächter nicht so auffallend gewesen, so hätte man annehmen können, daß auch sie, infolge der gleichen Überzeugung, keine Gefahr darin gesehen hätten, ihn allein zu lassen. Sie mochten jetzt, wenn sie wollten, zusehen, wie er zu einem Wandschränkchen ging, in dem er einen guten Schnaps aufbewahrte, wie er ein Gläschen zuerst zum Ersatz des Frühstücks leerte und wie er ein zweites Gläschen dazu bestimmte, sich Mut zu machen, das letztere nur aus Vorsicht für den unwahrscheinlichen Fall, daß es nötig sein sollte. + + diff --git a/Collections_004/readme.md b/Collections_004/readme.md new file mode 100644 index 0000000..94b9db9 --- /dev/null +++ b/Collections_004/readme.md @@ -0,0 +1,50 @@ +# `Map` verwenden +## Lernziel + + + +Das Interface `Map` und seine Implementierungen verwenden, um Daten effizient zu verarbeiten. + +## Aufgabe + +Gehen Sie in das Paket [pr2.collections.map](../sources/src/main/java/pr2/collections/map/). + +In dieser Aufgabe geht es darum, die Häufigkeit von Wörtern in einem Text zu analysieren. Ein grundlegendes Gerüst für das Programm ist auch bereits vorgegeben, damit Sie sich auf das Wesentliche konzentrieren können. + +Betrachten Sie die Klasse `WordCount`. In dieser fehlen noch einige Elemente, damit das Programm korrekt funktionieren kann. + +Die innere Klasse `WordFrequency` muss das Sortieren unterstützen. Implementieren Sie daher das Interface `Comparable`. + +Fügen Sie in der Klasse `WordCount` an den durch TODO-Kommentare markierten Stellen Code hinzu, der mithilfe einer Map die Worthäufigkeiten bestimmt. + +Die Datei mit dem Text finden Sie unter [kafka.txt](../sources/src/main/resources/pr2/collections/map/kafka.txt). + +Lassen Sie das Programm laufen. Es sollte eine Ausgabe wie folgt erzeugen: + +```console +er: 80 +sie: 66 +und: 64 +die: 59 +der: 51 +zu: 46 +es: 45 +nicht: 41 +das: 38 +in: 35 +... +``` + + + \ No newline at end of file diff --git a/Collections_005/readme.md b/Collections_005/readme.md new file mode 100644 index 0000000..b32a790 --- /dev/null +++ b/Collections_005/readme.md @@ -0,0 +1,28 @@ +# ReverserGeneric +## Lernziel + + + +`Comparable` verstehen und nutzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.collections.reverser_generic](../sources/src/main/java/pr2/collections/reverser_generic/). + +Schreiben Sie bitte eine generische Klasse `Reverser` mit einer Methode `reverse`, der man eine Liste (`java.util.List`) von Objekten übergeben kann und diese absteigend sortiert wird. Stellen Sie durch korrekte Wahl des Typ-Parameters sicher, dass die in der Liste gespeicherten Objekte das Interface `Comparable` implementieren. + +Testen Sie Ihre Implementierung mit der Klasse `ReverserTest`. + + + \ No newline at end of file diff --git a/Collections_006/readme.md b/Collections_006/readme.md new file mode 100644 index 0000000..1e3a537 --- /dev/null +++ b/Collections_006/readme.md @@ -0,0 +1,28 @@ +# Strings umgekehrt sortieren: Reverser +## Lernziel + + + +`Comparable` verstehen und nutzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.collections.reverser](../sources/src/main/java/pr2/collections/reverser/). + +Schreiben Sie bitte eine Klasse `Reverser` mit einer Methode `reverse`, der man eine Liste (`java.util.List`) von `String` übergeben kann und die diese dann absteigend sortiert, d.h. als Erstes kommen die Einträge mit Z, dann die mit Y etc. + +Testen Sie Ihre Implementierung mit der Klasse `ReverserTest`. + + + \ No newline at end of file diff --git a/Collections_007/kafka.txt b/Collections_007/kafka.txt new file mode 100644 index 0000000..b5695c5 --- /dev/null +++ b/Collections_007/kafka.txt @@ -0,0 +1,11 @@ +Verhaftung - Gespräch mit Frau Grubach - Dann Fräulein Bürstner + +Jemand mußte Josef K. verleumdet haben, denn ohne daß er etwas Böses getan hätte, wurde er eines Morgens verhaftet. Die Köchin der Frau Grubach, seiner Zimmervermieterin, die ihm jeden Tag gegen acht Uhr früh das Frühstück brachte, kam diesmal nicht. Das war noch niemals geschehen. K. wartete noch ein Weilchen, sah von seinem Kopfkissen aus die alte Frau, die ihm gegenüber wohnte und die ihn mit einer an ihr ganz ungewöhnlichen Neugierde beobachtete, dann aber, gleichzeitig befremdet und hungrig, läutete er. Sofort klopfte es und ein Mann, den er in dieser Wohnung noch niemals gesehen hatte, trat ein. Er war schlank und doch fest gebaut, er trug ein anliegendes schwarzes Kleid, das, ähnlich den Reiseanzügen, mit verschiedenen Falten, Taschen, Schnallen, Knöpfen und einem Gürtel versehen war und infolgedessen, ohne daß man sich darüber klar wurde, wozu es dienen sollte, besonders praktisch erschien. "Wer sind Sie?" fragte K. und saß gleich halb aufrecht im Bett. Der Mann aber ging über die Frage hinweg, als müsse man seine Erscheinung hinnehmen, und sagte bloß seinerseits: "Sie haben geläutet?" "Anna soll mir das Frühstück bringen", sagte K. und versuchte, zunächst stillschweigend, durch Aufmerksamkeit und Überlegung festzustellen, wer der Mann eigentlich war. Aber dieser setzte sich nicht allzulange seinen Blicken aus, sondern wandte sich zur Tür, die er ein wenig öffnete, um jemandem, der offenbar knapp hinter der Tür stand, zu sagen: "Er will, daß Anna ihm das Frühstück bringt." Ein kleines Gelächter im Nebenzimmer folgte, es war nach dem Klang nicht sicher, ob nicht mehrere Personen daran beteiligt waren. Obwohl der fremde Mann dadurch nichts erfahren haben konnte, was er nicht schon früher gewußt hätte, sagte er nun doch zu K. im Tone einer Meldung: "Es ist unmöglich." "Das wäre neu", sagte K., sprang aus dem Bett und zog rasch seine Hosen an. "Ich will doch sehen, was für Leute im Nebenzimmer sind und wie Frau Grubach diese Störung mir gegenüber verantworten wird." Es fiel ihm zwar gleich ein, daß er das nicht hätte laut sagen müssen und daß er dadurch gewissermaßen ein Beaufsichtigungsrecht des Fremden anerkannte, aber es schien ihm jetzt nicht wichtig. Immerhin faßte es der Fremde so auf, denn er sagte: "Wollen Sie nicht lieber hierbleiben?" "Ich will weder hierbleiben, noch von Ihnen angesprochen werden, solange Sie sich mir nicht vorstellen." "Es war gut gemeint", sagte der Fremde und öffnete nun freiwillig die Tür. Im Nebenzimmer, in das K. langsamer eintrat, als er wollte, sah es auf den ersten Blick fast genau so aus wie am Abend vorher. Es war das Wohnzimmer der Frau Grubach, vielleicht war in diesem mit Möbeln, Decken, Porzellan und Photographien überfüllten Zimmer heute ein wenig mehr Raum als sonst, man erkannte das nicht gleich, um so weniger, als die Hauptveränderung in der Anwesenheit eines Mannes bestand, der beim offenen Fenster mit einem Buch saß, von dem er jetzt aufblickte. "Sie hätten in Ihrem Zimmer bleiben sollen! Hat es Ihnen denn Franz nicht gesagt?" "Ja, was wollen Sie denn?" sagte K. und sah von der neuen Bekanntschaft zu dem mit Franz Benannten, der in der Tür stehengeblieben war, und dann wieder zurück. Durch das offene Fenster erblickte man wieder die alte Frau, die mit wahrhaft greisenhafter Neugierde zu dem jetzt gegenüberliegenden Fenster getreten war, um auch weiterhin alles zu sehen. "Ich will doch Frau Grubach -", sagte K., machte eine Bewegung, als reiße er sich von den zwei Männern los, die aber weit von ihm entfernt standen, und wollte weitergehen. "Nein", sagte der Mann beim Fenster, warf das Buch auf ein Tischchen und stand auf. "Sie dürfen nicht weggehen, Sie sind ja verhaftet." "Es sieht so aus", sagte K. "Und warum denn?" fragte er dann. "Wir sind nicht dazu bestellt, Ihnen das zu sagen. Gehen Sie in Ihr Zimmer und warten Sie. Das Verfahren ist nun einmal eingeleitet, und Sie werden alles zur richtigen Zeit erfahren. Ich gehe über meinen Auftrag hinaus, wenn ich Ihnen so freundschaftlich zurede. Aber ich hoffe, es hört es niemand sonst als Franz, und der ist selbst gegen alle Vorschrift freundlich zu Ihnen. Wenn Sie auch weiterhin so viel Glück haben wie bei der Bestimmung Ihrer Wächter, dann können Sie zuversichtlich sein." K. wollte sich setzen, aber nun sah er, daß im ganzen Zimmer keine Sitzgelegenheit war, außer dem Sessel beim Fenster. "Sie werden noch einsehen, wie wahr das alles ist", sagte Franz und ging gleichzeitig mit dem andern Mann auf ihn zu. Besonders der letztere überragte K. bedeutend und klopfte ihm öfters auf die Schulter. Beide prüften K.s Nachthemd und sagten, daß er jetzt ein viel schlechteres Hemd werde anziehen müssen, daß sie aber dieses Hemd wie auch seine übrige Wäsche aufbewahren und, wenn seine Sache günstig ausfallen sollte, ihm wieder zurückgeben würden. "Es ist besser, Sie geben die Sachen uns als ins Depot", sagten sie, "denn im Depot kommen öfters Unterschleife vor und außerdem verkauft man dort alle Sachen nach einer gewissen Zeit, ohne Rücksicht, ob das betreffende Verfahren zu Ende ist oder nicht. Und wie lange dauern doch derartige Prozesse, besonders in letzter Zeit! Sie bekämen dann schließlich allerdings vom Depot den Erlös, aber dieser Erlös ist erstens an sich schon gering, denn beim Verkauf entscheidet nicht die Höhe des Angebotes, sondern die Höhe der Bestechung, und weiter verringern sich solche Erlöse erfahrungsgemäß, wenn sie von Hand zu Hand und von Jahr zu Jahr weitergegeben werden." K. achtete auf diese Reden kaum, das Verfügungsrecht über seine Sachen, das er vielleicht noch besaß, schätzte er nicht hoch ein, viel wichtiger war es ihm, Klarheit über seine Lage zu bekommen; in Gegenwart dieser Leute konnte er aber nicht einmal nachdenken, immer wieder stieß der Bauch des zweiten Wächters - es konnten ja nur Wächter sein - förmlich freundschaftlich an ihn, sah er aber auf, dann erblickte er ein zu diesem dicken Körper gar nicht passendes trockenes, knochiges Gesicht mit starker, seitlich gedrehter Nase, das sich über ihn hinweg mit dem anderen Wächter verständigte. Was waren denn das für Menschen? Wovon sprachen sie? Welcher Behörde gehörten sie an? K. lebte doch in einem Rechtsstaat, überall herrschte Friede, alle Gesetze bestanden aufrecht, wer wagte, ihn in seiner Wohnung zu überfallen? Er neigte stets dazu, alles möglichst leicht zu nehmen, das Schlimmste erst beim Eintritt des Schlimmsten zu glauben, keine Vorsorge für die Zukunft zu treffen, selbst wenn alles drohte. Hier schien ihm das aber nicht richtig, man konnte zwar das Ganze als Spaß ansehen, als einen groben Spaß, den ihm aus unbekannten Gründen, vielleicht weil heute sein dreißigster Geburtstag war, die Kollegen in der Bank veranstaltet hatten, es war natürlich möglich, vielleicht brauchte er nur auf irgendeine Weise den Wächtern ins Gesicht zu lachen, und sie würden mitlachen, vielleicht waren es Dienstmänner von der Straßenecke, sie sahen ihnen nicht unähnlich - trotzdem war er diesmal, förmlich schon seit dem ersten Anblick des Wächters Franz, entschlossen, nicht den geringsten Vorteil, den er vielleicht gegenüber diesen Leuten besaß, aus der Hand zu geben. Darin, daß man später sagen würde, er habe keinen Spaß verstanden, sah K. eine ganz geringe Gefahr, wohl aber erinnerte er sich - ohne daß es sonst seine Gewohnheit gewesen wäre, aus Erfahrungen zu lernen - an einige, an sich unbedeutende Fälle, in denen er zum Unterschied von seinen Freunden mit Bewußtsein, ohne das geringste Gefühl für die möglichen Folgen, sich unvorsichtig benommen hatte und dafür durch das Ergebnis gestraft worden war. Es sollte nicht wieder geschehen, zumindest nicht diesmal; war es eine Komödie, so wollte er mitspielen. + +Noch war er frei. "Erlauben Sie", sagte er und ging eilig zwischen den Wächtern durch in sein Zimmer. "Er scheint vernünftig zu sein", hörte er hinter sich sagen. In seinem Zimmer riß er gleich die Schubladen des Schreibtischs auf, es lag dort alles in großer Ordnung, aber gerade die Legitimationspapiere, die er suchte, konnte er in der Aufregung nicht gleich finden. Schließlich fand er seine Radfahrlegitimation und wollte schon mit ihr zu den Wächtern gehen, dann aber schien ihm das Papier zu geringfügig und er suchte weiter, bis er den Geburtsschein fand. Als er wieder in das Nebenzimmer zurückkam, öffnete sich gerade die gegenüberliegende Tür und Frau Grubach wollte dort eintreten. Man sah sie nur einen Augenblick, denn kaum hatte sie K. erkannt, als sie offenbar verlegen wurde, um Verzeihung bat, verschwand und äußerst vorsichtig die Tür schloß. "Kommen Sie doch herein", hatte K. gerade noch sagen können. Nun aber stand er mit seinen Papieren in der Mitte des Zimmers, sah noch auf die Tür hin, die sich nicht wieder öffnete, und wurde erst durch einen Anruf der Wächter aufgeschreckt, die bei dem Tischchen am offenen Fenster saßen und, wie K. jetzt erkannte, sein Frühstück verzehrten. "Warum ist sie nicht eingetreten?" fragte er. "Sie darf nicht", sagte der große Wächter. "Sie sind doch verhaftet." "Wie kann ich denn verhaftet sein? Und gar auf diese Weise?" "Nun fangen Sie also wieder an", sagte der Wächter und tauchte ein Butterbrot ins Honigfäßchen. "Solche Fragen beantworten wir nicht." "Sie werden sie beantworten müssen", sagte K. "Hier sind meine Legitimationspapiere, zeigen Sie mir jetzt die Ihrigen und vor allem den Verhaftbefehl." "Du lieber Himmel!" sagte der Wächter. "Daß Sie sich in Ihre Lage nicht fügen können und daß Sie es darauf angelegt zu haben scheinen, uns, die wir Ihnen jetzt wahrscheinlich von allen Ihren Mitmenschen am nächsten stehen, nutzlos zu reizen!" "Es ist so, glauben Sie es doch", sagte Franz, führte die Kaffeetasse, die er in der Hand hielt, nicht zum Mund, sondern sah K. mit einem langen, wahrscheinlich bedeutungsvollen, aber unverständlichen Blick an. K. ließ sich, ohne es zu wollen, in ein Zwiegespräch der Blicke mit Franz ein, schlug dann aber doch auf seine Papiere und sagte: "Hier sind meine Legitimationspapiere." "Was kümmern uns denn die?" rief nun schon der große Wächter. "Sie führen sich ärger auf als ein Kind. Was wollen Sie denn? Wollen Sie Ihren großen, verfluchten Prozeß dadurch zu einem raschen Ende bringen, daß Sie mit uns, den Wächtern, über Legitimation und Verhaftbefehl diskutieren? Wir sind niedrige Angestellte, die sich in einem Legitimationspapier kaum auskennen und die mit Ihrer Sache nichts anderes zu tun haben, als daß sie zehn Stunden täglich bei Ihnen Wache halten und dafür bezahlt werden. Das ist alles, was wir sind, trotzdem aber sind wir fähig, einzusehen, daß die hohen Behörden, in deren Dienst wir stehen, ehe sie eine solche Verhaftung verfügen, sich sehr genau über die Gründe der Verhaftung und die Person des Verhafteten unterrichten. Es gibt darin keinen Irrtum. Unsere Behörde, soweit ich sie kenne, und ich kenne nur die niedrigsten Grade, sucht doch nicht etwa die Schuld in der Bevölkerung, sondern wird, wie es im Gesetz heißt, von der Schuld angezogen und muß uns Wächter ausschicken. Das ist Gesetz. Wo gäbe es da einen Irrtum?" "Dieses Gesetz kenne ich nicht", sagte K. "Desto schlimmer für Sie", sagte der Wächter. "Es besteht wohl auch nur in Ihren Köpfen", sagte K., er wollte sich irgendwie in die Gedanken der Wächter einschleichen, sie zu seinen Gunsten wenden oder sich dort einbürgern. Aber der Wächter sagte nur abweisend: "Sie werden es zu fühlen bekommen." Franz mischte sich ein und sagte: "Sieh, Willem, er gibt zu, er kenne das Gesetz nicht, und behauptet gleichzeitig, schuldlos zu sein." "Du hast ganz recht, aber ihm kann man nichts begreiflich machen", sagte der andere. K. antwortete nichts mehr; muß ich, dachte er, durch das Geschwätz dieser niedrigsten Organe - sie geben selbst zu, es zu sein - mich noch mehr verwirren lassen? Sie reden doch jedenfalls von Dingen, die sie gar nicht verstehen. Ihre Sicherheit ist nur durch ihre Dummheit möglich. Ein paar Worte, die ich mit einem mir ebenbürtigen Menschen sprechen werde, werden alles unvergleichlich klarer machen als die längsten Reden mit diesen. Er ging einige Male in dem freien Raum des Zimmers auf und ab, drüben sah er die alte Frau, die einen noch viel älteren Greis zum Fenster gezerrt hatte, den sie umschlungen hielt. K. mußte dieser Schaustellung ein Ende machen: "Führen Sie mich zu Ihrem Vorgesetzten", sagte er. "Wenn er es wünscht; nicht früher", sagte der Wächter, der Willem genannt worden war. "Und nun rate ich Ihnen", fügte er hinzu, "in Ihr Zimmer zu gehen, sich ruhig zu verhalten und darauf zu warten, was über Sie verfügt werden wird. Wir raten Ihnen, zerstreuen Sie sich nicht durch nutzlose Gedanken, sondern sammeln Sie sich, es werden große Anforderungen an Sie gestellt werden. Sie haben uns nicht so behandelt, wie es unser Entgegenkommen verdient hätte, Sie haben vergessen, daß wir, mögen wir auch sein was immer, zumindest jetzt Ihnen gegenüber freie Männer sind, das ist kein kleines Übergewicht. Trotzdem sind wir bereit, falls Sie Geld haben, Ihnen ein kleines Frühstück aus dem Kaffeehaus drüben zu bringen." + +Ohne auf dieses Angebot zu antworten, stand K. ein Weilchen lang still. Vielleicht würden ihn die beiden, wenn er die Tür des folgenden Zimmers oder gar die Tür des Vorzimmers öffnete, gar nicht zu hindern wagen, vielleicht wäre es die einfachste Lösung des Ganzen, daß er es auf die Spitze trieb. Aber vielleicht würden sie ihn doch packen und, war er einmal niedergeworfen, so war auch alle Überlegenheit verloren, die er jetzt ihnen gegenüber in gewisser Hinsicht doch wahrte. Deshalb zog er die Sicherheit der Lösung vor, wie sie der natürliche Verlauf bringen mußte, und ging in sein Zimmer zurück, ohne daß von seiner Seite oder von Seite der Wächter ein weiteres Wort gefallen wäre. + +Er warf sich auf sein Bett und nahm vom Waschtisch einen schönen Apfel, den er sich gestern abend für das Frühstück vorbereitet hatte. Jetzt war er sein einziges Frühstück und jedenfalls, wie er sich beim ersten großen Bissen versicherte, viel besser, als das Frühstück aus dem schmutzigen Nachtcafé gewesen wäre, das er durch die Gnade der Wächter hätte bekommen können. Er fühlte sich wohl und zuversichtlich, in der Bank versäumte er zwar heute vormittag seinen Dienst, aber das war bei der verhältnismäßig hohen Stellung, die er dort einnahm, leicht entschuldigt. Sollte er die wirkliche Entschuldigung anführen? Er gedachte es zu tun, Würde man ihm nicht glauben, was in diesem Fall begreiflich war, so konnte er Frau Grubach als Zeugin führen oder auch die beiden Alten von drüben, die wohl jetzt auf dem Marsch zum gegenüberliegenden Fenster waren. Es wunderte K., wenigstens aus dem Gedankengang der Wächter wunderte es ihn, daß sie ihn in das Zimmer getrieben und ihn hier allein gelassen hatten, wo er doch zehnfache Möglichkeit hatte, sich umzubringen. Gleichzeitig allerdings fragte er sich, diesmal aus seinem Gedankengang, was für einen Grund er haben könnte, es zu tun. Etwa weil die zwei nebenan saßen und sein Frühstück abgefangen hatten? Es wäre so sinnlos gewesen, sich umzubringen, daß er, selbst wenn er es hätte tun wollen, infolge der Sinnlosigkeit dazu nicht imstande gewesen wäre. Wäre die geistige Beschränktheit der Wächter nicht so auffallend gewesen, so hätte man annehmen können, daß auch sie, infolge der gleichen Überzeugung, keine Gefahr darin gesehen hätten, ihn allein zu lassen. Sie mochten jetzt, wenn sie wollten, zusehen, wie er zu einem Wandschränkchen ging, in dem er einen guten Schnaps aufbewahrte, wie er ein Gläschen zuerst zum Ersatz des Frühstücks leerte und wie er ein zweites Gläschen dazu bestimmte, sich Mut zu machen, das letztere nur aus Vorsicht für den unwahrscheinlichen Fall, daß es nötig sein sollte. + + diff --git a/Collections_007/readme.md b/Collections_007/readme.md new file mode 100644 index 0000000..9c95223 --- /dev/null +++ b/Collections_007/readme.md @@ -0,0 +1,36 @@ +# `Set` und dessen Implementierungen +## Lernziel + + + +Das Interface `Set` und eine passende Implementierung einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.collections.set](../sources/src/main/java/pr2/collections/set/). + +Im Projekt finden Sie die Klasse `WordCollector` mit deren Hilfe man die Wörter in einem Text analysieren kann. Nach Übergabe eines Dateinamens wird die Datei eingelesen und die vorhandenen Wörter werden gesammelt. Am Ende wird die Liste der Wörter alphabetisch sortiert ausgegeben. + +Leider wurde `WordCollector` von einem Entwickler geschrieben, der nichts von dem Collection-Framework wusste und daher alles mit Array realisiert hat. Hierdurch sind einige sehr komplexe Konstruktionen entstanden. + +Lassen Sie das Programm laufen und betrachten Sie die Ausgabe. Schauen Sie sich die Klasse `WordCollector` an und versuchen Sie die Funktionsweise und die Implementierung genau zu verstehen. Dieser Schritt ist wichtig, um die im Folgenden beschriebenen Änderungen an der Klasse vornehmen zu können, lassen Sie sich also Zeit für diesen Schritt. + +Ändern Sie die Klasse nun so, dass anstatt Arrays `Set` und deren Implementierungen verwendet werden. Ändern Sie die Schnittstellen und Parameter der Methoden von `String[]` auf `Set` bzw. `List`. Modifizieren Sie auch die Implementierung der Methoden und versuchen Sie Arrays wo immer möglich durch Sets und Listen zu ersetzen. Schauen Sie sich auch die JavaDoc der Klassen `java.util.Arrays` und `java.util.Collections` an, um möglicherweise sehr hilfreiche Methoden zu finden. + +__Hinweis:__ Die Konstruktion `String[] words = line.toLowerCase().split("[,. ]");` können Sie nicht durch Listen ersetzen, da die `split`-Methode Arrays verwendet. + +Die Datei mit dem Text finden Sie unter [kafka.txt](../sources/src/main/resources/pr2/collections/set/kafka.txt). + + + \ No newline at end of file diff --git a/Collections_008/readme.md b/Collections_008/readme.md new file mode 100644 index 0000000..f150c63 --- /dev/null +++ b/Collections_008/readme.md @@ -0,0 +1,37 @@ +# CommandLineSorter +## Lernziel + + + +Sortieren von Collections. + +## Aufgabe + +Gehen Sie in das Paket [pr2.collections.sorter_1](../sources/src/main/java/pr2/collections/sorter_1/). + +Schreiben Sie bitte eine Klasse `CommandLineSorter`, die eine Reihe von Wörtern auf der Kommandozeile als Parameter annimmt und diese dann alphabetisch sortiert wieder ausgibt. + +```console +> java CommandLineSorter Albert Dieter Sigmund Thomas Frank Dieter Herbert +Albert +Dieter +Dieter +Frank +Herbert +Sigmund +Thomas +``` + + + \ No newline at end of file diff --git a/Collections_009/readme.md b/Collections_009/readme.md new file mode 100644 index 0000000..0d76a7f --- /dev/null +++ b/Collections_009/readme.md @@ -0,0 +1,36 @@ +# CommandLineSorter -- Version 2 +## Lernziel + + + +Sortieren von Collections. + +## Aufgabe + +Gehen Sie in das Paket [pr2.collections.sorter_2](../sources/src/main/java/pr2/collections/sorter_2/). + +Schreiben Sie bitte eine Klasse `CommandLineSorter`, die eine Reihe von Wörtern auf der Kommandozeile als Parameter annimmt und diese dann alphabetisch sortiert wieder ausgibt. Hierbei sollen alle Dubletten entfernt werden, d.h. es soll kein Wort doppelt in der Liste auftauchen. + +```console +> java CommandLineSorter Albert Dieter Sigmund Dieter Thomas Frank Herbert +Albert +Dieter +Frank +Herbert +Sigmund +Thomas +``` + + + \ No newline at end of file diff --git a/Collections_010/readme.md b/Collections_010/readme.md new file mode 100644 index 0000000..7a8066c --- /dev/null +++ b/Collections_010/readme.md @@ -0,0 +1,32 @@ +# `Comparator` verwenden und Objekte sortieren +## Lernziel + + + +Verschiedene Sortierreihenfolgen durch die Implementierung von `Comparator` realisieren. + +## Aufgabe + +Gehen Sie in das Paket [pr2.collections.sortieren](../sources/src/main/java/pr2/collections/sortieren/). + +Sie finden in der Aufgabe bereits die Klasse `Sorter` und den JUnit-Test `SorterTest` vor. Schauen Sie sich die Klasse `Sorter` an und versuchen Sie anhand der JavaDoc und des bereits vorhandenen Codes zu verstehen, was die Klasse machen soll. + +Lassen Sie den Test laufen. Sie werden feststellen, dass ein Testfall grün ist, obwohl in `Sorter` gar keine Implementierung vorhanden ist. Versuchen Sie herauszufinden, warum dies so ist. + +Fügen Sie nun den fehlenden Code in die Klasse `Sorter` ein, und geben Sie entsprechende `Comparator`-Objekte zurück, sodass die Daten entsprechend dem Parameter `order` sortiert werden können. + +Lassen Sie erneut die Tests laufen. Es müssen alle Testfälle grün sein, bevor Sie die Lösung einchecken. + + + \ No newline at end of file diff --git a/Collections_011/readme.md b/Collections_011/readme.md new file mode 100644 index 0000000..415810d --- /dev/null +++ b/Collections_011/readme.md @@ -0,0 +1,41 @@ +# Wörterbuchprogramm +## Lernziel + + + +Interface `Map` und seine Implementierungen einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.collections.woerterbuch](../sources/src/main/java/pr2/collections/woerterbuch/). + +Schreiben Sie ein einfaches Wörterbuchprogramm, dem man auf der Kommandozeile eine beliebige Anzahl von Wörtern übergeben kann und das dann die entsprechende Übersetzung ausgibt. Die Wörter des Wörterbuchs sollen fest im Programm einprogrammiert sein. Es reicht, wenn Sie einige wenige Wörter vorsehen. + +Berücksichtigen Sie bitte den Fall, dass der Benutzer kein Wort auf der Kommandozeile angibt bzw. dass ein Wort nicht im Wörterbuch vorhanden ist. + +```console +> java Woerterbuch +Bitte mindestens ein Wort angeben! +``` + +```console +>java Woerterbuch gehen schlafen tanzen hopsen +gehen => go +schlafen => sleep +tanzen => dance +hopsen => +``` + + + \ No newline at end of file diff --git a/Einführung_001/readme.md b/Einführung_001/readme.md new file mode 100644 index 0000000..28b225e --- /dev/null +++ b/Einführung_001/readme.md @@ -0,0 +1,28 @@ +# Java-Coding-Standard anwenden +## Lernziel + + + +Java-Code korrekt entsprechend dem [Coding-Standard von Oracle](http://www.oracle.com/technetwork/java/codeconventions-150003.pdf) formatieren. + +## Aufgabe + +Im Paket [pr2.intro.coding_standard](../sources/src/main/java/pr2/intro/coding_standard/) finden Sie eine Klasse `CodingStandard`. Compilieren Sie die Datei `CodingStandard.java` und stellen Sie so sicher, dass es sich um eine syntaktisch korrekte Java-Klasse handelt. + +Formatieren Sie `CodingStandard` so um, dass sie dem in der Vorlesung vorgestellten Coding-Standard entspricht. + +Prüfen Sie, ob sich die Klasse noch korrekt compilieren lässt, bevor sie fortfahren. + + + \ No newline at end of file diff --git a/Einführung_002/readme.md b/Einführung_002/readme.md new file mode 100644 index 0000000..c2907be --- /dev/null +++ b/Einführung_002/readme.md @@ -0,0 +1,26 @@ +# JavaDoc schreiben +## Lernziel + + + +Eine vorhandene Klasse mit korrekten JavaDoc-Kommentaren versehen. + +## Aufgabe + +Im Paket [pr2.intro.javadoc](../sources/src/main/java/pr2/intro/javadoc/) finden Sie eine Klasse namens `Waehrung`, die eine Währung repräsentiert. Leider hat ein böser Geist bei dieser Klasse fast die gesamte JavaDoc gelöscht. + +Schreiben Sie eine sinnvolle JavaDoc für die Klasse `Waehrung`, die insbesondere die Funktion der Methoden und deren Parameter und Rückgabewerte erläutert. Vergessen Sie nicht, auch die Klasse selbst zu dokumentieren. + + + \ No newline at end of file diff --git a/Einführung_003/readme.md b/Einführung_003/readme.md new file mode 100644 index 0000000..3e208b9 --- /dev/null +++ b/Einführung_003/readme.md @@ -0,0 +1,26 @@ +# Klasse mit JUnit testen +## Lernziel + + + +Einen JUnit-Test für eine gegebene Klasse schreiben. + +## Aufgabe + +Gehen Sie in das Paket [pr2.intro.junit_faculty](../sources/src/main/java/pr2/intro/junit_faculty/). + +Schreiben Sie bitte einen JUnit-Test für folgende Klasse `Fakultaet`, der die Funktionalität der Methode `fact` testet. Denken Sie insbesondere daran, die Randfälle zu testen. + + + \ No newline at end of file diff --git a/Enumerationen_001/readme.md b/Enumerationen_001/readme.md new file mode 100644 index 0000000..7b036ac --- /dev/null +++ b/Enumerationen_001/readme.md @@ -0,0 +1,36 @@ +# Eigene Enumeration schreiben und verwenden +## Lernziel + + + +Eine einfache Enumeration (ohne abstrakte Methoden) erstellen und in einem kleinen Programm einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.enums.eigene](../sources/src/main/java/pr2/enums/eigene/). + +In Rollenspielen verwendet man oft Würfel mit einer unterschiedlichen Anzahl von Seiten. Üblich sind 4-, 6-, 8-, 10-, und 12-seitige Würfel. Das vorliegende Programm erlaubt es unterschiedliche Würfel zu simulieren. + +Betrachten Sie das vorliegende Projekt. Darin gibt es eine Klasse `Wuerfel`, die einen Würfel in einem Rollenspiel simulieren kann und einen dazugehörigen Test in `WuerfelTest`. Welche Art von Würfel man haben möchte, setzt man über den Konstruktorparameter von `Wuerfel` und die entsprechenden Konstanten (z.B. `D6`). Lassen Sie die Unit-Test laufen. Wahrscheinlich wird einer fehlschlagen. Korrigieren Sie den Fehler, damit alle Tests grün sind. + +Das Problem mit der vorliegenden Klasse ist, dass man auch Würfel mit einer anderen Augenzahl (insbesondere ungerade) erzeugen kann. Um dies zu verhindern, sollen Sie das Programm auf die Verwendung von Enumerationen umstellen. + +Schreiben Sie eine Enumeration `WuerfelTyp`, die über die Konstanten `D4`, `D6`,`D8`, `D10` und `D12` die möglichen Würfelarten vorgibt. Ändern Sie den Konstruktorparameter von `Wuerfel` so, dass er anstatt eines `int` einen `WuerfelTyp` nimmt. Damit das Programm erweiterbar bleibt, speichern Sie die Anzahl der Seiten, die zu den jeweiligen Typen gehören in der Enumeration und nicht in der Klasse `Wuerfel`. Geben Sie der Enumeration außerdem eine Methode mit, welche den erwarteten Durchschnittswert für eine große Anzahl von Würfen zurückgibt (Methodenname `average`). + +Ändern Sie die Tests so, dass sie mit der Enumeration arbeiten. Codieren Sie die Enum-Werte (`D4`...`D12`) nicht hart im Test, sondern verwenden Sie die Methode `values()`, um die Tests möglichst generisch zu gestalten. + +Fügen Sie nun einen weiteren Würfeltyp `D20` ein und testen Sie diesen. Wenn Sie alles richtig gemacht haben, müssen Sie hierfür nur die Enumeration `WuerfelTyp` ändern, alle anderen Klassen bleiben unverändert. + + + \ No newline at end of file diff --git a/Enumerationen_002/readme.md b/Enumerationen_002/readme.md new file mode 100644 index 0000000..2d96a2e --- /dev/null +++ b/Enumerationen_002/readme.md @@ -0,0 +1,14 @@ +# Enumeration schreiben +## Lernziel + + + +Eine einfache Enumeration (ohne abstrakte Methoden) erstellen und in einem kleinen Programm einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.enums.filme](../sources/src/main/java/pr2/enums/filme/). + +Schreiben Sie eine Enumeration `LieblingsFilme`, die Ihre Lieblingsfilme enthalten soll. Speichern Sie zu jedem Film bitte den Titel, den Regisseur und eine Bewertung auf einer Skala von 0 bis 10. Bieten Sie weiterhin eine `toString`-Methode an, die diese Informationen wieder ausgibt und denken Sie an Methoden, um später wieder auf die Daten zu den Filmen zugreifen zu können. + +Schreiben Sie eine Klasse `Main`, welche alle Lieblingsfilme auf der Konsole ausgibt. \ No newline at end of file diff --git a/Enumerationen_003/readme.md b/Enumerationen_003/readme.md new file mode 100644 index 0000000..f986150 --- /dev/null +++ b/Enumerationen_003/readme.md @@ -0,0 +1,14 @@ +# Singleton-Eigenschaft von Enumerationen +## Lernziel + + + +Die Singleton-Eigenschaft von Enumerationen verstehen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.enums.singleton](../sources/src/main/java/pr2/enums/singleton/). + +Enumerationen werden in Java durch echte Klassen und Objekte dargestellt. Eine Besonderheit ist allerdings, dass von jeder Enumerationskonstante immer genau ein Objekt existiert, es sich also um Singletons handelt. Daher darf man Java-Enumerationen sicher mit `==` vergleichen. + +Schreiben Sie bitte ein kleines Java-Programm `SingletonBeweis`, das nachweist, dass es sich bei Enumerationen wirklich um Singletons handelt. Verwenden Sie dazu die bereits vorgegebene Enumeration `MyEnum`. \ No newline at end of file diff --git a/Enumerationen_004/img/schnick.png b/Enumerationen_004/img/schnick.png new file mode 100644 index 0000000..9066a36 Binary files /dev/null and b/Enumerationen_004/img/schnick.png differ diff --git a/Enumerationen_004/readme.md b/Enumerationen_004/readme.md new file mode 100644 index 0000000..d63cac8 --- /dev/null +++ b/Enumerationen_004/readme.md @@ -0,0 +1,52 @@ +# Assignment: Stein, Papier, Schere, Echse, Spock +## Lernziel + + + +Mit Enumerationen arbeiten. + +## Aufgabe + +Gehen Sie in das Paket [pr2.enums.schnick](../sources/src/main/java/pr2/enums/schnick). + +![Regeln für Schnick-Schnack-Schnuck](img/schnick.png) + +Schreiben Sie ein einfaches Spiel (Klasse `SchnickSchnackSchnuck`), bei dem Sie gegen den Computer Schnick-Schnack-Schnuck spielen (auch Rock, Paper, Scissors genannt) mit folgenden Eigenschaften: + + * Das Spiel geht über drei Runden. + * Es fragt den Spieler nach seiner Auswahl (r, p, s). + * Der Computer zieht zufällig eine der drei Möglichkeiten. + * Nach jeder Runde sagt das Spiel, wer welche Möglichkeit gewählt hat und wer die Runde gewonnen hat. + * Ein Sieg bringt einen Punkt, ein Unentschieden 0 Punkte. + * Die Punkte jeder Runde werden addiert. + * Am Ende wird der Gesamtpunktestand ausgegeben. + +Eine beispielhafte Session mit dem Programm sieht dann wie folgt aus: + +```console +Runde 1: Dein Zug ([r]rock, [p]aper, [s]cissors)? r +Der Computer hat gewonnen - Du: ROCK, Computer: PAPER - [0:1] + +Runde 2: Dein Zug ([r]rock, [p]aper, [s]cissors)? p +Unentschieden - Du: PAPER, Computer: PAPER - [0:1] + +Runde 3: Dein Zug ([r]rock, [p]aper, [s]cissors)? s +Du hast gewonnen: Du: SCISSORS, Computer: PAPER - [1:1]### Abgabe +Ergebnis - Du 1 Punkt(e), Computer 1 Punkt(e) +``` + +Repräsentieren Sie die Züge mithilfe einer Enumeration `Move`. Diese soll auch die Tasten beinhalten, welche man für die einzelnen Züge (`r`, `p`, `s`) drücken muss. + + + \ No newline at end of file diff --git a/Generische Typen_001/readme.md b/Generische Typen_001/readme.md new file mode 100644 index 0000000..73d89a5 --- /dev/null +++ b/Generische Typen_001/readme.md @@ -0,0 +1,32 @@ +# Einen generischen Typ schreiben +## Lernziel + + + +Einen vorhandenen Typ so umgestalten, dass er als generischer Typ verwendet werden kann. + +## Aufgabe + +Gehen Sie in das Paket [pr2.generics.einfach](../sources/src/main/java/pr2/generics/einfach/). + +Sie finden mit `Liste` eine sehr simple Implementierung einer einfach verketteten Liste vor. Zusätzlich gib es auch noch Tests, die die Liste testen. + +Führen Sie die Tests aus und überzeugen Sie sich, dass die Liste korrekt funktioniert. + +Schreiben Sie die Klasse `Liste` so um, dass sie zu einem generischen Typ wird. Dies bedeutet insbesondere, dass die Methoden `get` und `add` nicht mehr mit `Object` arbeiten, sondern typsicher werden. Sie dürfen in Ihrer Lösung __keine Casts__ verwenden, d.h. Sie müssen sich auch mit der Klasse `ListNode` beschäftigen und hier Änderungen vornehmen. + +Führen Sie die Tests erneut aus, um sicherzugehen, dass Sie bei Ihren Änderungen nichts kaputt gemacht haben. + + + \ No newline at end of file diff --git a/Generische Typen_002/readme.md b/Generische Typen_002/readme.md new file mode 100644 index 0000000..79da9ec --- /dev/null +++ b/Generische Typen_002/readme.md @@ -0,0 +1,28 @@ +# Generische Klasse Pair schreiben +## Lernziel + + + +Von einem generischen Typ erben. + +## Aufgabe + +Gehen Sie in das Paket [pr2.generics.pair](../sources/src/main/java/pr2/generics/pair/). + +Schreiben Sie eine generische Klasse `Pair`, die zwei Objekte unterschiedlichen Typs verwalten kann. Die Instanzen von `Pair` sollen unveränderlich (**immutable**) sein. + +Testen Sie Ihre Implementierung mit der vorhandenen `Main`-Klasse. + + + \ No newline at end of file diff --git a/Generische Typen_003/readme.md b/Generische Typen_003/readme.md new file mode 100644 index 0000000..682e5e1 --- /dev/null +++ b/Generische Typen_003/readme.md @@ -0,0 +1,28 @@ +# Generische Klasse Pair erweitern: NumberPair +## Lernziel + + + +Von einem generischen Typ erben. + +## Aufgabe + +Gehen Sie in das Paket [pr2.generics.number_pair](../sources/src/main/java/pr2/generics/number_pair/). + +Schreiben Sie eine generische Klasse `NumberPair`, die von der Klasse `Pair` aus der vorhergehenden Aufgabe abgeleitet ist und erzwingt, dass beide verwaltete Objekte von `Number` oder einer Subklasse von `Number` (`Double`, `Integer`, `Long` etc.) sind. + +Testen Sie Ihre Implementierung mit der vorhandenen `Main`-Klasse. + + + \ No newline at end of file diff --git a/Generische Typen_004/readme.md b/Generische Typen_004/readme.md new file mode 100644 index 0000000..4ae6226 --- /dev/null +++ b/Generische Typen_004/readme.md @@ -0,0 +1,28 @@ +# Generische Klasse Pair erweitern: SamePair +## Lernziel + + + +Von einem generischen Typ erben. + +## Aufgabe + +Gehen Sie in das Paket [pr2.generics.same_pair](../sources/src/main/java/pr2/generics/same_pair/). + +Schreiben Sie eine generische Klasse `SamePair`, die von der Klasse `Pair` aus der vorhergehenden Aufgabe abgeleitet ist und erzwingt, dass beide verwaltete Objekte vom selben Typ sind. + +Testen Sie Ihre Implementierung mit der vorhandenen `Main`-Klasse. + + + \ No newline at end of file diff --git a/Generische Typen_005/readme.md b/Generische Typen_005/readme.md new file mode 100644 index 0000000..55a9b8f --- /dev/null +++ b/Generische Typen_005/readme.md @@ -0,0 +1,28 @@ +# PairList +## Lernziel + + + +Sammlungen von Objekten eines generischen Typs erstellen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.generics.pairlist](../sources/src/main/java/pr2/generics/pairlist/). + +Schreiben Sie eine generische Klasse `PairList`, die eine beliebige Anzahl von `Pair`-Objekten verwalten kann. Die Anzahl der maximal gespeicherten Objekte wird beim Erzeugen mitgegeben. Die Klasse erlaubt das Hinzufügen (`add`) und das Auslesen von Objekten anhand des Indexes (`get`). + +Testen Sie Ihre Implementierung mit der vorhandenen `Main`-Klasse. + + + \ No newline at end of file diff --git a/Generische Typen_006/readme.md b/Generische Typen_006/readme.md new file mode 100644 index 0000000..4cbb3db --- /dev/null +++ b/Generische Typen_006/readme.md @@ -0,0 +1,26 @@ +# Wildcard benutzen +## Lernziel + + + +Wildcards einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.generics.printer](../sources/src/main/java/pr2/generics/printer/). + +Schreiben Sie eine Klasse `CollectionPrinter` mit einer statischen Methode `print`, der man eine beliebige (generische) Collection übergeben kann und die dann deren Inhalt ausdruckt. Eine _Collection_ ist eine Klasse, die beliebig viele Objekte verwalten kann und über die man mit der _for each_-Schleife iterieren kann. + + + \ No newline at end of file diff --git a/Generische Typen_007/readme.md b/Generische Typen_007/readme.md new file mode 100644 index 0000000..d14fccf --- /dev/null +++ b/Generische Typen_007/readme.md @@ -0,0 +1,30 @@ +# Generische Queue +## Lernziel + + + +Einen komplexeren generischen Typ entwickeln. + +## Aufgabe + +Gehen Sie in das Paket [pr2.generics.queue](../sources/src/main/java/pr2/generics/queue/). + +Schreiben Sie eine generische Klasse `Queue`, die eine einfache Warteschlange (Queue) realisiert. Über die Methode `offer` können Objekte hinzugefügt werden, über `poll` wieder ausgelesen. Über Probleme des Over- und Underflows brauchen Sie sich hier keine Gedanken zu machen. + +Erweitern Sie die Klasse `Queue` um eine Methode `addAll`, der man eine andere `Queue` übergibt und die dann alle Elemente der übergebenen Queue in die aktuelle übernimmt. + +Erweitern Sie die Klasse `Queue` aus der vorhergehenden Aufgabe um eine Methode `copyInto`, der man eine andere `Queue` übergibt und die dann alle Elemente der aktuellen Queue in die übergebenen kopiert. + + + \ No newline at end of file diff --git a/Generische Typen_008/readme.md b/Generische Typen_008/readme.md new file mode 100644 index 0000000..89d585d --- /dev/null +++ b/Generische Typen_008/readme.md @@ -0,0 +1,35 @@ +# `super` und `extends` einsetzen +## Lernziel + + + +Methoden unter Verwendung von `super` und `extends` gestalten, sodass sie flexibel auch mit Sub- bzw. Supertypen umgehen können. + +## Aufgabe + +Gehen Sie in das Paket [pr2.generics.super_extends](../sources/src/main/java/pr2/generics/super_extends/). + +In dieser Aufgabe sollen Sie die Klasse `Liste` erweitern. + +Fügen Sie `Liste` zwei Methoden hinzu: + + * `fillFrom`: befüllt die Liste mit den Daten aus einer anderen (übergebene) Liste. + * `copyInto`: kopiert die Daten der Liste in eine andere (übergebene) Liste. + +Verwenden Sie für Ihre Lösung `super` und `extends` zusammen mit Wildcards (`?`). + +Kommentieren Sie die Testmethode in den vorhandenen Tests ein und führen Sie diese danach aus. Versichern Sie sich, dass Ihre Implementierung korrekt funktioniert, bevor Sie die Lösung abgeben. + + + \ No newline at end of file diff --git a/Generische Typen_009/readme.md b/Generische Typen_009/readme.md new file mode 100644 index 0000000..d936508 --- /dev/null +++ b/Generische Typen_009/readme.md @@ -0,0 +1,49 @@ +# Generische Typen zusammen mit Wildcards einsetzen +## Lernziel + + + +Gebundene und ungebundene Wildcards einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.generics.wildcards](../sources/src/main/java/pr2/generics/wildcards/). + +In dieser Aufgabe finden Sie bereits eine Implementierung einer generischen, auf Arrays basierenden Liste namens `SimpleList` vor. An dieser müssen Sie nichts verändern, sondern verwenden die Klasse wie sie ist. + +Schreiben Sie nun eine _nicht generische_ Klasse `ListHelper`, die zwei statische Methoden enthält: + + * `printList`: Diese Methode bekommt eine beliebige `SimpleList` übergeben und druckt deren Inhalt einfach auf der Konsole aus. Deswegen hat die Methode auch den Rückgabetyp `void`. + * `sumList`: Diese Methode nimmt als Parameter `SimpleList`-Objekte, die irgendeine Form von Zahlen enthalten (`Number` oder Subklassen davon) und berechnet deren Summe. Das Ergebnis wird als `double`-Wert zurückgegeben. + +Verwenden Sie für die Methoden gebundene bzw. ungebundene Wildcards. + +Kommentieren Sie die entsprechenden Zeilen in der Klasse `Main` aus und sehen überprüfen Sie, ob Ihre Implementierungen auch wie gewünscht funktionieren. Die Ausgabe sollte sein: + +```console +Dies +ist +ein +Test +. +1 +2 +3 +4 +5 +15.0 +``` + + + \ No newline at end of file diff --git a/Geschachtelte Klassen_001/readme.md b/Geschachtelte Klassen_001/readme.md new file mode 100644 index 0000000..35d8843 --- /dev/null +++ b/Geschachtelte Klassen_001/readme.md @@ -0,0 +1,28 @@ +# MatrixSuche +## Lernziel + + + +Statische innere Klassen einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.lambda.matrixsuche](../sources/src/main/java/pr2/lambda/matrixsuche/). + +Schreiben Sie eine Klasse `MatrixSuche`, die eine statische Methode `findEntry` anbietet. Die Methode soll in einem zweidimensionalen `int`-Array nach einem gegebenen Eintrag suchen und die Position des gefundenen Eintrags in der Matrix zurückgeben. Um die Position zurückzugeben, verwenden Sie bitte eine statische innere Klasse namens `Position`, die die x- und y-Postion enthält. + +Überschreiben Sie die `toString`-Methode in `Position` und testen Sie, ob Ihre Implementierung richtig funktioniert. + + + \ No newline at end of file diff --git a/Geschachtelte Klassen_002/readme.md b/Geschachtelte Klassen_002/readme.md new file mode 100644 index 0000000..e6d59c4 --- /dev/null +++ b/Geschachtelte Klassen_002/readme.md @@ -0,0 +1,30 @@ +# Innere Klasse Beobachter +## Lernziel + + + +Zugriff von inneren Klassen auf die umgebende Klasse. + +## Aufgabe + +Gehen Sie in das Paket: [pr2.lambda.observer](../sources/src/main/java/pr2/lambda/observer/). + +Dort finden Sie das Interface `Beobachter`. + +Schreiben Sie eine Klasse `Datenhalter`, die eine einziges, privates Attribut vom Typ `int` enthält. Setzen Sie das Attribut im Konstruktor, erzeugen Sie aber keinen Getter. + +Implementieren Sie das Interface `Beobachter` als nicht-statische, private innere Klasse in `Datenhalter` und erlauben Sie über den Beobachter Zugriff auf das Attribut, indem Sie ein entsprechendes Objekt vom Typ `Beobachter` zurückgeben. Testen Sie Ihre Implementierung mit einem JUnit-Test. + + + \ No newline at end of file diff --git a/Geschachtelte Klassen_003/readme.md b/Geschachtelte Klassen_003/readme.md new file mode 100644 index 0000000..bef6698 --- /dev/null +++ b/Geschachtelte Klassen_003/readme.md @@ -0,0 +1,30 @@ +# Callback mit anonymer Klasse realisieren +## Lernziel + + + +Eine gegebene Funktion durch einen Callback parametrieren. Der Callback wird als anonyme innere Klasse realisiert. + +## Aufgabe + +Gehen Sie in das Paket [pr2.lambda.callback](../sources/src/main/java/pr2/lambda/callback/). + +In dieser Aufgabe wird ein sehr gängiges Muster benutzt, dass auch bei großen Suchmaschinen zum Einsatz kommt. Über eine Filter-Funktion werden aus einer Menge von Daten diejenigen ausgewählt, die gewünscht sind. Die Auswahlfunktion wird von außen vorgegeben, sodass beliebige Filteroperationen möglich sind, auch solche, die beim Schreiben des Rahmenwerkes noch nicht bekannt waren. + +Sehen Sie sich das Interface `Prediacte` und die Klasse `NumberSelector` an und versuchen Sie die Funktionsweise der beiden zu verstehen. Betrachten Sie nun die Klasse `Main`, die versucht zuerst die geraden und dann die ungeraden Zahlen auszuwählen und auszugeben. Der hierfür nötige Code ist zwar schon weitgehend vorhanden, aber in der `main`-Methode müssen Sie noch zwei passende Filterfunktionen als **anonyme innere Klassen** realisieren. + +Nachdem Sie die beiden Filter geschrieben haben, lassen Sie das Programm laufen und überprüfen Sie, ob wirklich die richtigen Zahlen ausgewählt werden. + + + \ No newline at end of file diff --git a/Input und Output_001/kafka.txt b/Input und Output_001/kafka.txt new file mode 100644 index 0000000..b5695c5 --- /dev/null +++ b/Input und Output_001/kafka.txt @@ -0,0 +1,11 @@ +Verhaftung - Gespräch mit Frau Grubach - Dann Fräulein Bürstner + +Jemand mußte Josef K. verleumdet haben, denn ohne daß er etwas Böses getan hätte, wurde er eines Morgens verhaftet. Die Köchin der Frau Grubach, seiner Zimmervermieterin, die ihm jeden Tag gegen acht Uhr früh das Frühstück brachte, kam diesmal nicht. Das war noch niemals geschehen. K. wartete noch ein Weilchen, sah von seinem Kopfkissen aus die alte Frau, die ihm gegenüber wohnte und die ihn mit einer an ihr ganz ungewöhnlichen Neugierde beobachtete, dann aber, gleichzeitig befremdet und hungrig, läutete er. Sofort klopfte es und ein Mann, den er in dieser Wohnung noch niemals gesehen hatte, trat ein. Er war schlank und doch fest gebaut, er trug ein anliegendes schwarzes Kleid, das, ähnlich den Reiseanzügen, mit verschiedenen Falten, Taschen, Schnallen, Knöpfen und einem Gürtel versehen war und infolgedessen, ohne daß man sich darüber klar wurde, wozu es dienen sollte, besonders praktisch erschien. "Wer sind Sie?" fragte K. und saß gleich halb aufrecht im Bett. Der Mann aber ging über die Frage hinweg, als müsse man seine Erscheinung hinnehmen, und sagte bloß seinerseits: "Sie haben geläutet?" "Anna soll mir das Frühstück bringen", sagte K. und versuchte, zunächst stillschweigend, durch Aufmerksamkeit und Überlegung festzustellen, wer der Mann eigentlich war. Aber dieser setzte sich nicht allzulange seinen Blicken aus, sondern wandte sich zur Tür, die er ein wenig öffnete, um jemandem, der offenbar knapp hinter der Tür stand, zu sagen: "Er will, daß Anna ihm das Frühstück bringt." Ein kleines Gelächter im Nebenzimmer folgte, es war nach dem Klang nicht sicher, ob nicht mehrere Personen daran beteiligt waren. Obwohl der fremde Mann dadurch nichts erfahren haben konnte, was er nicht schon früher gewußt hätte, sagte er nun doch zu K. im Tone einer Meldung: "Es ist unmöglich." "Das wäre neu", sagte K., sprang aus dem Bett und zog rasch seine Hosen an. "Ich will doch sehen, was für Leute im Nebenzimmer sind und wie Frau Grubach diese Störung mir gegenüber verantworten wird." Es fiel ihm zwar gleich ein, daß er das nicht hätte laut sagen müssen und daß er dadurch gewissermaßen ein Beaufsichtigungsrecht des Fremden anerkannte, aber es schien ihm jetzt nicht wichtig. Immerhin faßte es der Fremde so auf, denn er sagte: "Wollen Sie nicht lieber hierbleiben?" "Ich will weder hierbleiben, noch von Ihnen angesprochen werden, solange Sie sich mir nicht vorstellen." "Es war gut gemeint", sagte der Fremde und öffnete nun freiwillig die Tür. Im Nebenzimmer, in das K. langsamer eintrat, als er wollte, sah es auf den ersten Blick fast genau so aus wie am Abend vorher. Es war das Wohnzimmer der Frau Grubach, vielleicht war in diesem mit Möbeln, Decken, Porzellan und Photographien überfüllten Zimmer heute ein wenig mehr Raum als sonst, man erkannte das nicht gleich, um so weniger, als die Hauptveränderung in der Anwesenheit eines Mannes bestand, der beim offenen Fenster mit einem Buch saß, von dem er jetzt aufblickte. "Sie hätten in Ihrem Zimmer bleiben sollen! Hat es Ihnen denn Franz nicht gesagt?" "Ja, was wollen Sie denn?" sagte K. und sah von der neuen Bekanntschaft zu dem mit Franz Benannten, der in der Tür stehengeblieben war, und dann wieder zurück. Durch das offene Fenster erblickte man wieder die alte Frau, die mit wahrhaft greisenhafter Neugierde zu dem jetzt gegenüberliegenden Fenster getreten war, um auch weiterhin alles zu sehen. "Ich will doch Frau Grubach -", sagte K., machte eine Bewegung, als reiße er sich von den zwei Männern los, die aber weit von ihm entfernt standen, und wollte weitergehen. "Nein", sagte der Mann beim Fenster, warf das Buch auf ein Tischchen und stand auf. "Sie dürfen nicht weggehen, Sie sind ja verhaftet." "Es sieht so aus", sagte K. "Und warum denn?" fragte er dann. "Wir sind nicht dazu bestellt, Ihnen das zu sagen. Gehen Sie in Ihr Zimmer und warten Sie. Das Verfahren ist nun einmal eingeleitet, und Sie werden alles zur richtigen Zeit erfahren. Ich gehe über meinen Auftrag hinaus, wenn ich Ihnen so freundschaftlich zurede. Aber ich hoffe, es hört es niemand sonst als Franz, und der ist selbst gegen alle Vorschrift freundlich zu Ihnen. Wenn Sie auch weiterhin so viel Glück haben wie bei der Bestimmung Ihrer Wächter, dann können Sie zuversichtlich sein." K. wollte sich setzen, aber nun sah er, daß im ganzen Zimmer keine Sitzgelegenheit war, außer dem Sessel beim Fenster. "Sie werden noch einsehen, wie wahr das alles ist", sagte Franz und ging gleichzeitig mit dem andern Mann auf ihn zu. Besonders der letztere überragte K. bedeutend und klopfte ihm öfters auf die Schulter. Beide prüften K.s Nachthemd und sagten, daß er jetzt ein viel schlechteres Hemd werde anziehen müssen, daß sie aber dieses Hemd wie auch seine übrige Wäsche aufbewahren und, wenn seine Sache günstig ausfallen sollte, ihm wieder zurückgeben würden. "Es ist besser, Sie geben die Sachen uns als ins Depot", sagten sie, "denn im Depot kommen öfters Unterschleife vor und außerdem verkauft man dort alle Sachen nach einer gewissen Zeit, ohne Rücksicht, ob das betreffende Verfahren zu Ende ist oder nicht. Und wie lange dauern doch derartige Prozesse, besonders in letzter Zeit! Sie bekämen dann schließlich allerdings vom Depot den Erlös, aber dieser Erlös ist erstens an sich schon gering, denn beim Verkauf entscheidet nicht die Höhe des Angebotes, sondern die Höhe der Bestechung, und weiter verringern sich solche Erlöse erfahrungsgemäß, wenn sie von Hand zu Hand und von Jahr zu Jahr weitergegeben werden." K. achtete auf diese Reden kaum, das Verfügungsrecht über seine Sachen, das er vielleicht noch besaß, schätzte er nicht hoch ein, viel wichtiger war es ihm, Klarheit über seine Lage zu bekommen; in Gegenwart dieser Leute konnte er aber nicht einmal nachdenken, immer wieder stieß der Bauch des zweiten Wächters - es konnten ja nur Wächter sein - förmlich freundschaftlich an ihn, sah er aber auf, dann erblickte er ein zu diesem dicken Körper gar nicht passendes trockenes, knochiges Gesicht mit starker, seitlich gedrehter Nase, das sich über ihn hinweg mit dem anderen Wächter verständigte. Was waren denn das für Menschen? Wovon sprachen sie? Welcher Behörde gehörten sie an? K. lebte doch in einem Rechtsstaat, überall herrschte Friede, alle Gesetze bestanden aufrecht, wer wagte, ihn in seiner Wohnung zu überfallen? Er neigte stets dazu, alles möglichst leicht zu nehmen, das Schlimmste erst beim Eintritt des Schlimmsten zu glauben, keine Vorsorge für die Zukunft zu treffen, selbst wenn alles drohte. Hier schien ihm das aber nicht richtig, man konnte zwar das Ganze als Spaß ansehen, als einen groben Spaß, den ihm aus unbekannten Gründen, vielleicht weil heute sein dreißigster Geburtstag war, die Kollegen in der Bank veranstaltet hatten, es war natürlich möglich, vielleicht brauchte er nur auf irgendeine Weise den Wächtern ins Gesicht zu lachen, und sie würden mitlachen, vielleicht waren es Dienstmänner von der Straßenecke, sie sahen ihnen nicht unähnlich - trotzdem war er diesmal, förmlich schon seit dem ersten Anblick des Wächters Franz, entschlossen, nicht den geringsten Vorteil, den er vielleicht gegenüber diesen Leuten besaß, aus der Hand zu geben. Darin, daß man später sagen würde, er habe keinen Spaß verstanden, sah K. eine ganz geringe Gefahr, wohl aber erinnerte er sich - ohne daß es sonst seine Gewohnheit gewesen wäre, aus Erfahrungen zu lernen - an einige, an sich unbedeutende Fälle, in denen er zum Unterschied von seinen Freunden mit Bewußtsein, ohne das geringste Gefühl für die möglichen Folgen, sich unvorsichtig benommen hatte und dafür durch das Ergebnis gestraft worden war. Es sollte nicht wieder geschehen, zumindest nicht diesmal; war es eine Komödie, so wollte er mitspielen. + +Noch war er frei. "Erlauben Sie", sagte er und ging eilig zwischen den Wächtern durch in sein Zimmer. "Er scheint vernünftig zu sein", hörte er hinter sich sagen. In seinem Zimmer riß er gleich die Schubladen des Schreibtischs auf, es lag dort alles in großer Ordnung, aber gerade die Legitimationspapiere, die er suchte, konnte er in der Aufregung nicht gleich finden. Schließlich fand er seine Radfahrlegitimation und wollte schon mit ihr zu den Wächtern gehen, dann aber schien ihm das Papier zu geringfügig und er suchte weiter, bis er den Geburtsschein fand. Als er wieder in das Nebenzimmer zurückkam, öffnete sich gerade die gegenüberliegende Tür und Frau Grubach wollte dort eintreten. Man sah sie nur einen Augenblick, denn kaum hatte sie K. erkannt, als sie offenbar verlegen wurde, um Verzeihung bat, verschwand und äußerst vorsichtig die Tür schloß. "Kommen Sie doch herein", hatte K. gerade noch sagen können. Nun aber stand er mit seinen Papieren in der Mitte des Zimmers, sah noch auf die Tür hin, die sich nicht wieder öffnete, und wurde erst durch einen Anruf der Wächter aufgeschreckt, die bei dem Tischchen am offenen Fenster saßen und, wie K. jetzt erkannte, sein Frühstück verzehrten. "Warum ist sie nicht eingetreten?" fragte er. "Sie darf nicht", sagte der große Wächter. "Sie sind doch verhaftet." "Wie kann ich denn verhaftet sein? Und gar auf diese Weise?" "Nun fangen Sie also wieder an", sagte der Wächter und tauchte ein Butterbrot ins Honigfäßchen. "Solche Fragen beantworten wir nicht." "Sie werden sie beantworten müssen", sagte K. "Hier sind meine Legitimationspapiere, zeigen Sie mir jetzt die Ihrigen und vor allem den Verhaftbefehl." "Du lieber Himmel!" sagte der Wächter. "Daß Sie sich in Ihre Lage nicht fügen können und daß Sie es darauf angelegt zu haben scheinen, uns, die wir Ihnen jetzt wahrscheinlich von allen Ihren Mitmenschen am nächsten stehen, nutzlos zu reizen!" "Es ist so, glauben Sie es doch", sagte Franz, führte die Kaffeetasse, die er in der Hand hielt, nicht zum Mund, sondern sah K. mit einem langen, wahrscheinlich bedeutungsvollen, aber unverständlichen Blick an. K. ließ sich, ohne es zu wollen, in ein Zwiegespräch der Blicke mit Franz ein, schlug dann aber doch auf seine Papiere und sagte: "Hier sind meine Legitimationspapiere." "Was kümmern uns denn die?" rief nun schon der große Wächter. "Sie führen sich ärger auf als ein Kind. Was wollen Sie denn? Wollen Sie Ihren großen, verfluchten Prozeß dadurch zu einem raschen Ende bringen, daß Sie mit uns, den Wächtern, über Legitimation und Verhaftbefehl diskutieren? Wir sind niedrige Angestellte, die sich in einem Legitimationspapier kaum auskennen und die mit Ihrer Sache nichts anderes zu tun haben, als daß sie zehn Stunden täglich bei Ihnen Wache halten und dafür bezahlt werden. Das ist alles, was wir sind, trotzdem aber sind wir fähig, einzusehen, daß die hohen Behörden, in deren Dienst wir stehen, ehe sie eine solche Verhaftung verfügen, sich sehr genau über die Gründe der Verhaftung und die Person des Verhafteten unterrichten. Es gibt darin keinen Irrtum. Unsere Behörde, soweit ich sie kenne, und ich kenne nur die niedrigsten Grade, sucht doch nicht etwa die Schuld in der Bevölkerung, sondern wird, wie es im Gesetz heißt, von der Schuld angezogen und muß uns Wächter ausschicken. Das ist Gesetz. Wo gäbe es da einen Irrtum?" "Dieses Gesetz kenne ich nicht", sagte K. "Desto schlimmer für Sie", sagte der Wächter. "Es besteht wohl auch nur in Ihren Köpfen", sagte K., er wollte sich irgendwie in die Gedanken der Wächter einschleichen, sie zu seinen Gunsten wenden oder sich dort einbürgern. Aber der Wächter sagte nur abweisend: "Sie werden es zu fühlen bekommen." Franz mischte sich ein und sagte: "Sieh, Willem, er gibt zu, er kenne das Gesetz nicht, und behauptet gleichzeitig, schuldlos zu sein." "Du hast ganz recht, aber ihm kann man nichts begreiflich machen", sagte der andere. K. antwortete nichts mehr; muß ich, dachte er, durch das Geschwätz dieser niedrigsten Organe - sie geben selbst zu, es zu sein - mich noch mehr verwirren lassen? Sie reden doch jedenfalls von Dingen, die sie gar nicht verstehen. Ihre Sicherheit ist nur durch ihre Dummheit möglich. Ein paar Worte, die ich mit einem mir ebenbürtigen Menschen sprechen werde, werden alles unvergleichlich klarer machen als die längsten Reden mit diesen. Er ging einige Male in dem freien Raum des Zimmers auf und ab, drüben sah er die alte Frau, die einen noch viel älteren Greis zum Fenster gezerrt hatte, den sie umschlungen hielt. K. mußte dieser Schaustellung ein Ende machen: "Führen Sie mich zu Ihrem Vorgesetzten", sagte er. "Wenn er es wünscht; nicht früher", sagte der Wächter, der Willem genannt worden war. "Und nun rate ich Ihnen", fügte er hinzu, "in Ihr Zimmer zu gehen, sich ruhig zu verhalten und darauf zu warten, was über Sie verfügt werden wird. Wir raten Ihnen, zerstreuen Sie sich nicht durch nutzlose Gedanken, sondern sammeln Sie sich, es werden große Anforderungen an Sie gestellt werden. Sie haben uns nicht so behandelt, wie es unser Entgegenkommen verdient hätte, Sie haben vergessen, daß wir, mögen wir auch sein was immer, zumindest jetzt Ihnen gegenüber freie Männer sind, das ist kein kleines Übergewicht. Trotzdem sind wir bereit, falls Sie Geld haben, Ihnen ein kleines Frühstück aus dem Kaffeehaus drüben zu bringen." + +Ohne auf dieses Angebot zu antworten, stand K. ein Weilchen lang still. Vielleicht würden ihn die beiden, wenn er die Tür des folgenden Zimmers oder gar die Tür des Vorzimmers öffnete, gar nicht zu hindern wagen, vielleicht wäre es die einfachste Lösung des Ganzen, daß er es auf die Spitze trieb. Aber vielleicht würden sie ihn doch packen und, war er einmal niedergeworfen, so war auch alle Überlegenheit verloren, die er jetzt ihnen gegenüber in gewisser Hinsicht doch wahrte. Deshalb zog er die Sicherheit der Lösung vor, wie sie der natürliche Verlauf bringen mußte, und ging in sein Zimmer zurück, ohne daß von seiner Seite oder von Seite der Wächter ein weiteres Wort gefallen wäre. + +Er warf sich auf sein Bett und nahm vom Waschtisch einen schönen Apfel, den er sich gestern abend für das Frühstück vorbereitet hatte. Jetzt war er sein einziges Frühstück und jedenfalls, wie er sich beim ersten großen Bissen versicherte, viel besser, als das Frühstück aus dem schmutzigen Nachtcafé gewesen wäre, das er durch die Gnade der Wächter hätte bekommen können. Er fühlte sich wohl und zuversichtlich, in der Bank versäumte er zwar heute vormittag seinen Dienst, aber das war bei der verhältnismäßig hohen Stellung, die er dort einnahm, leicht entschuldigt. Sollte er die wirkliche Entschuldigung anführen? Er gedachte es zu tun, Würde man ihm nicht glauben, was in diesem Fall begreiflich war, so konnte er Frau Grubach als Zeugin führen oder auch die beiden Alten von drüben, die wohl jetzt auf dem Marsch zum gegenüberliegenden Fenster waren. Es wunderte K., wenigstens aus dem Gedankengang der Wächter wunderte es ihn, daß sie ihn in das Zimmer getrieben und ihn hier allein gelassen hatten, wo er doch zehnfache Möglichkeit hatte, sich umzubringen. Gleichzeitig allerdings fragte er sich, diesmal aus seinem Gedankengang, was für einen Grund er haben könnte, es zu tun. Etwa weil die zwei nebenan saßen und sein Frühstück abgefangen hatten? Es wäre so sinnlos gewesen, sich umzubringen, daß er, selbst wenn er es hätte tun wollen, infolge der Sinnlosigkeit dazu nicht imstande gewesen wäre. Wäre die geistige Beschränktheit der Wächter nicht so auffallend gewesen, so hätte man annehmen können, daß auch sie, infolge der gleichen Überzeugung, keine Gefahr darin gesehen hätten, ihn allein zu lassen. Sie mochten jetzt, wenn sie wollten, zusehen, wie er zu einem Wandschränkchen ging, in dem er einen guten Schnaps aufbewahrte, wie er ein Gläschen zuerst zum Ersatz des Frühstücks leerte und wie er ein zweites Gläschen dazu bestimmte, sich Mut zu machen, das letztere nur aus Vorsicht für den unwahrscheinlichen Fall, daß es nötig sein sollte. + + diff --git a/Input und Output_001/readme.md b/Input und Output_001/readme.md new file mode 100644 index 0000000..b3dfbe0 --- /dev/null +++ b/Input und Output_001/readme.md @@ -0,0 +1,39 @@ +# `BufferedReader` zum zeilenweisen Lesen einsetzen +## Lernziel + + + +Daten Zeilenweise mit einem `BufferedReader` verwenden und dabei das Decorator Pattern einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.buffered_reader](../sources/src/main/java/pr2/io/buffered_reader/). + +Lesen Sie die Datei [kafka.txt](../sources/src/main/resources/pr2/io/buffered_reader/kafka.txt) zeilenweise ein und geben Sie die Zeilen mit einer fortlaufenden Zeilennummer wieder aus. Verwenden Sie hierzu einen `BufferedReader`. + +Eine beispielhafte Ausgabe sieht wie folgt aus: + +```console +1: Verhaftung - Gespräch mit Frau Grubach - Dann Fräulein Bürstner +2: +3: Jemand mußte Josef K. verleumdet haben, denn ohne daß er etwas Böses +4: getan hätte, wurde er eines Morgens verhaftet. Die Köchin der Frau +5: Grubach, seiner Zimmervermieterin, die ihm jeden Tag gegen acht Uhr früh +6: das Frühstück brachte, kam diesmal nicht. Das war noch niemals +``` + +Lassen Sie das Programm laufen und überprüfen Sie, ob die Ausgabe korrekt ist. Die Beispieldatei hat 232 Zeilen. + + + \ No newline at end of file diff --git a/Input und Output_002/readme.md b/Input und Output_002/readme.md new file mode 100644 index 0000000..bdbab59 --- /dev/null +++ b/Input und Output_002/readme.md @@ -0,0 +1,38 @@ +# DataOutputStream +## Lernziel + + + +Daten mit einem `DataOutputStreams` manuell serialisieren. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.datainputoutput_1](../sources/src/main/java/pr2/io/datainputoutput_1/). + +Schreiben Sie eine Klasse `DateWriter`, die ein Datum in der Form yyyy-MM-dd (z.B. 1997-08-29) von der Konsole annimmt und als `long`-Wert mithilfe eines `DataOutputStreams` in eine Datei schreibt. + +Schreiben Sie eine Klasse `DateReader`, die den `long`-Wert aus der Datei ausliest und wieder in das ursprüngliche Format bringt und auf der Konsole ausgibt. + +**Hinweis:** Zur Konvertierung eines Strings in ein Datum und umgekehrt, können Sie die Klasse `SimpleDateFormat` verwenden. Ein `Date`-Objekt lässt sich leicht über die Methode `getTime` in einen `long`-Wert umwandeln. Denken Sie an eine korrekte Behandlung von möglichen Fehlern. + +```console +> java DateWriter 1997-08-29 +> java DateReader +Das Datum war: 1997-08-29 +``` + +**Zusatzfrage:** Welche besondere Bedeutung hat das hier als Beispiel verwendete Datum? + + + \ No newline at end of file diff --git a/Input und Output_003/readme.md b/Input und Output_003/readme.md new file mode 100644 index 0000000..8f0233e --- /dev/null +++ b/Input und Output_003/readme.md @@ -0,0 +1,28 @@ +# DataOutputStream durch Serialisierung ersetzen +## Lernziel + + + +Daten mit einem `ObjectOutputStreams` serialisieren. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.datainputoutput_2](../sources/src/main/java/pr2/io/datainputoutput_2/). + +Verändern Sie die beiden Klassen aus der vorhergehenden Aufgabe so, dass sie jetzt anstatt eines `DataOutputStreams` bzw. eines `DataInputStreams` Serialisierung verwenden. + +Vergleichen Sie bitte die Dateien, die bei diesem und der anderen Lösung entstanden sind. Was fällt ihnen auf? + + + \ No newline at end of file diff --git a/Input und Output_004/readme.md b/Input und Output_004/readme.md new file mode 100644 index 0000000..4f919a2 --- /dev/null +++ b/Input und Output_004/readme.md @@ -0,0 +1,53 @@ +# Daten mit `DataOutputStream` und `DataInputStream` verarbeiten +## Lernziel + + + +Ein eigenes Format für die Daten einer Klasse definieren und diese Dann in einer Datei speichern und aus dieser wieder laden. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.data_output](../sources/src/main/java/pr2/io/data_output/). + +In dieser Aufgabe finden Sie bereits eine fertig implementierte Klasse `Board` vor, die ein Schachbrett repräsentiert. Allerdings wird dieses nicht für Schach benutzt, sondern für ein Spiel, bei dem man nur schwarze und weiße Steine auf das Brett stellen kann (z.B. Dame). Die Farbe der Steine wird durch die Enumeration `Color` dargestellt. + +Was bei dem Schachbrett allerdings noch fehlt, ist eine Möglichkeit den Spielstand zu speichern und später wieder einzulesen. + +Schauen Sie sich die Klassen `Board` und `Color` genau an und versuchen Sie diese zu verstehen. Sie können auch testweise ein Brett anlegen und mit Daten befüllen. (Wie dies geht, sehen Sie im JUnit-Test). Die `toString()`-Methode liefert eine anschauliche Darstellung des Spielfeldes. + +Implementieren Sie nun die Methoden `writeToFile` und `loadFromFile` unter Zuhilfenahme von `DateOutputStream` und `DataInputStream`. Hierzu müssen Sie noch das Datenformat für die Speicherung festlegen. Dieses ist wie folgt definiert: + + 1. Als erstes der String "Schachbrett" im UTF8-Format, um das Datenformat zu kennzeichnen. + 2. Die Koordinaten der ersten Figur im Format x-Pos, y-Pos (beide als `byte`) und Farbe entsprechend `Color.ordinal()` (als `int`) + 3. Wiederholung von Schritt 2. bis alle Figuren gespeichert sind. + 4. Werte `0xff`, `0xff`, `-1`, um das Dateiende zu kennzeichnen + +Lassen Sie den JUnit-Test laufen, um zu sehen, ob die Daten korrekt verarbeitet werden. + + + + + + \ No newline at end of file diff --git a/Input und Output_005/daten.dat b/Input und Output_005/daten.dat new file mode 100644 index 0000000..8d3eacd Binary files /dev/null and b/Input und Output_005/daten.dat differ diff --git a/Input und Output_005/readme.md b/Input und Output_005/readme.md new file mode 100644 index 0000000..7656507 --- /dev/null +++ b/Input und Output_005/readme.md @@ -0,0 +1,34 @@ +# Daten mit einem `InputStream` lesen +## Lernziel + + + +Einen `InputStream` benutzen, um Daten aus einer Datei zu lesen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.datei_lesen](../sources/src/main/java/pr2/io/datei_lesen/). + +Lesen Sie die Daten aus der Datei [daten.dat](../sources/src/main/resources/pr2/io/datei_lesen/daten.dat) byteweise und geben Sie den Inhalt auf der Konsole aus. Für die Ausgabe verwenden Sie bitte die Hexadezimale Darstellung, also z.B. `0x0a` für den Wert 11. + +Lassen Sie das Programm laufen und betrachten Sie die Ausgabe. Wenn Sie alles korrekt implementiert haben, sollten Sie den Text + + 0xca 0xff 0xfe 0xba 0xbe 0x0 0xde 0xad 0xbe 0xef + +sehen. + +Denken Sie auch an eine Fehlerbehandlung für eventuelle Ausnahmen im Zusammenhang mit der Datei. + + + \ No newline at end of file diff --git a/Input und Output_006/readme.md b/Input und Output_006/readme.md new file mode 100644 index 0000000..729007b --- /dev/null +++ b/Input und Output_006/readme.md @@ -0,0 +1,36 @@ +# Daten mit einem `OutputStream` schreiben +## Lernziel + + + +Einen `OutputStream` verwenden, um Daten zu schreiben. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.datei_schreiben](../sources/src/main/java/pr2/io/datei_schreiben/). + +In dieser Aufgabe sollen Sie eine Reihe von Bytes in eine Datei schreiben. Ein JUnit-Test wird überprüfen, ob Sie dies richtig getan haben. + +Öffnen Sie einen passenden `OutputStream`, um in die Datei `output/daten.dat` zu schreiben (verwenden Sie die Konstante `FILE` für den Dateinamen). Schreiben Sie nun die Byte-Folge + +```console +0xca 0xff 0xfe 0xba 0xbe 0x0 0xde 0xad 0xbe 0xef +``` + +hinein und schließen Sie die Datei wieder. + +Führen Sie den JUnit-Test aus, der überprüft, ob alle Daten korrekt in die Datei geschrieben wurden. + + + \ No newline at end of file diff --git a/Input und Output_007/readme.md b/Input und Output_007/readme.md new file mode 100644 index 0000000..ed6c479 --- /dev/null +++ b/Input und Output_007/readme.md @@ -0,0 +1,47 @@ +# Filesystem-Abstraktion mit `File` +## Lernziel + + + +Die Klasse `Path` einsetzen, um plattformunabhängig Operationen auf dem Dateisystem durchzuführen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.file](../sources/src/main/java/pr2/io/file/). + +Benutzen Sie die Klasse `Path`, um die Festplatte Ihres Computers, ausgehend von dem als `root` bezeichneten Verzeichnis `../..` zu durchsuchen und die Größe der Verzeichnisse zu berechnen. + +Sie können die Größe eines Verzeichnisses nur indirekt bestimme, indem Sie die Größe aller Dateien in dem Verzeichnis addieren. Das Verzeichnis direkt kann man _nicht_ mit `size()` nach seiner Größe fragen, wohl aber normale Dateien. Deswegen müssen Sie in Ihrem Programm immer sauber unterscheiden, ob ein Verzeichnis vorliegt (das sie rekursiv durchlaufen müssen) oder eine normale Datei (deren Größe Sie abfragen). + +Geben Sie die Verzeichnisse mit Ihrer Größe aus. Am Ende des Programms geben Sie noch die Gesamtgröße aller Unterverzeichnisse aus. Eine beispielhafte sähe wie folgt aus: + +```console +Untersuche: /home/thomas/eclipse-workspace + +465 Byte - /home/thomas/eclipse-workspace/.recommenders/snipmatch/repositories +1,4 kByte - /home/thomas/eclipse-workspace/.recommenders/snipmatch +4,6 MByte - /home/thomas/eclipse-workspace/.recommenders +57,5 MByte - /home/thomas/eclipse-workspace +103 Byte - /home/thomas/lib/.settings +5,8 MByte - /home/thomas/lib + +Gesamtgröße: 80,4 MByte +``` + +Lassen Sie Ihr Programm laufen und überprüfen Sie, ob die Ausgaben plausibel sind. Vergleichen Sie das Ergebnis mit den Angaben des Windows-Explorers, Mac-Finders oder Linux-Dateimanagers. + +Unter Linux und MacOS müssen Sie darauf achten, dass Sie symbolischen Links in Ihrem Programm nicht folgen, sonst zählen Sie möglicherweise zu viel. + + + \ No newline at end of file diff --git a/Input und Output_008/readme.md b/Input und Output_008/readme.md new file mode 100644 index 0000000..f00effd --- /dev/null +++ b/Input und Output_008/readme.md @@ -0,0 +1,42 @@ +# Fileattribute lesen +## Lernziel + + + +Methoden der Klassen `Path` und `Files` nutzen und verstehen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.filetest](../sources/src/main/java/pr2/io/filetest/). + +Schreiben Sie eine Klasse `FileInfo`, der man auf der Konsole einen Datei- oder Verzeichnisnamen übergeben kann. Sie soll dann einige grundlegende Informationen über die Datei ausgeben (siehe Beispiel). + +```console +> java FileTest /Users/thomas/Documents/../Documents/ +/Users/thomas/Documents existiert +/Users/thomas/Documents ist 408 Bytes groß +/Users/thomas/Documents ist ein Verzeichnis +/Users/thomas/Documents darf gelesen werden +/Users/thomas/Documents darf geschrieben werden + +> java FileTest /Users/thomas/Documents/../Documents/Uebungsklausur.pages +/Users/thomas/Documents/Uebungsklausur.pages existiert +/Users/thomas/Documents/Uebungsklausur.pages ist 258920 Bytes groß +/Users/thomas/Documents/Uebungsklausur.pages ist ein normale Datei +/Users/thomas/Documents/Uebungsklausur.pages darf gelesen werden +/Users/thomas/Documents/Uebungsklausur.pages darf geschrieben werden +``` + + + \ No newline at end of file diff --git a/Input und Output_009/readme.md b/Input und Output_009/readme.md new file mode 100644 index 0000000..f16bd04 --- /dev/null +++ b/Input und Output_009/readme.md @@ -0,0 +1,28 @@ +# `FilterReader` +## Lernziel + + + +Einen eigenen Filter in Form eines `FilterReaders` programmieren und hiermit in den Datenstrom eingreifen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.filter](../sources/src/main/java/pr2/io/filter/). + +Vervollständigen Sie die Klasse `UCaseReader` so, dass Sie als Filter (`FilterReader`) verwendet werden kann. Die Aufgabe dieses Filters besteht darin, alle gelesenen Zeichen in Großbuchstaben umzuwandeln. + +Testen Sie, ob Ihre Implementierung korrekt ist, indem Sie die JUnit-Tests ausführen. + + + \ No newline at end of file diff --git a/Input und Output_010/readme.md b/Input und Output_010/readme.md new file mode 100644 index 0000000..1856bac --- /dev/null +++ b/Input und Output_010/readme.md @@ -0,0 +1,30 @@ +# Konsolen Input/Output +## Lernziel + + + +Daten von der Konsole lesen und über eine Ausgabeumlenkung in eine Datei umlenken. `PrintStream` und `InputStreamReader` einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.konsole](../sources/src/main/java/pr2/io/konsole/). + +Lesen Sie zeilenweise mithilfe eines `BufferedReaders` von der Konsole Zeichen ein. Geben Sie diese wieder auf `System.out` aus und zeigen Sie die aktuelle Zeilennummer auf `System.err` an. + +Testen Sie das Programm. + +Lenken Sie nun die Ausgabe von `System.out` in die Datei `output/console.log` um (siehe Konstante `LOGFILE`). Lassen Sie das Programm erneut laufen und betrachten Sie danach die Datei mit den umgeleiteten Daten. + + + \ No newline at end of file diff --git a/Input und Output_011/readme.md b/Input und Output_011/readme.md new file mode 100644 index 0000000..b7c2b0c --- /dev/null +++ b/Input und Output_011/readme.md @@ -0,0 +1,31 @@ +# Zeilen einer Textdatei zählen +## Lernziel + + + +Dateien zeilenweise lesen und verarbeiten. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.linecounter](../sources/src/main/java/pr2/io/linecounter/). + +Schreiben Sie eine Klasse `LineCounter`, die den Namen einer Textdatei von der Kommandozeile entgegennimmt und dann die Anzahl der Zeilen in der Datei ausgibt. + +```console +> java LineCounter ../src/LineCounter.java +Datei: ../src/LineCounter.java hat 30 Zeilen +``` + + + \ No newline at end of file diff --git a/Input und Output_012/data.dat b/Input und Output_012/data.dat new file mode 100644 index 0000000..33a6855 Binary files /dev/null and b/Input und Output_012/data.dat differ diff --git a/Input und Output_012/readme.md b/Input und Output_012/readme.md new file mode 100644 index 0000000..a02cae2 --- /dev/null +++ b/Input und Output_012/readme.md @@ -0,0 +1,32 @@ +# `RandomAccessFile` +## Lernziel + + + +`RandomAccessFile` sowohl zum Lesen, als auch zum Schreiben von Daten einsetzen. Verstehen, dass man sich wahlfrei durch die Datei bewegen kann. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.random_access](../sources/src/main/java/pr2/io/random_access/). + +Bei dieser Aufgabe werden Sie ein Verfahren anwenden, das bei sehr großen Datenmengen zum Einsatz kommt: das Sortieren der Daten direkt auf der Festplatte, ohne sie vollständig in den Hauptspeicher zu laden. + +Implementieren Sie einen [Bubblesort](https://de.wikipedia.org/wiki/Bubblesort) mithilfe von `RandomAccessFile` direkt auf einer Datei. Bubblesort ist ein ausgesprochen ineffizienter Algorithmus (O(n*n)), er ist aber sehr einfach zu implementieren. Da die zu sortierende Datei klein ist, können wir hier mit den Nachteilen von Bubblesort leben. + +Implementieren Sie die bereits vorhandene Methode `sortFile` der Klasse `FileSort`. Öffnen Sie zuerst die Datei mithilfe von `RandomAccessFile` im Modus `"rw"`. Wandern Sie nun - entsprechend dem Bubblesort-Algorithmus - über die Daten und sortieren Sie die Bytes der Datei. Halten Sie nie mehr als zwei `byte` und die Position als `long` im Speicher. Weitere Variablen können auch noch nötig sein, um den Algorithmus zu implementieren. + +Testen Sie Ihre Implementierung mit den JUnit-Tests. Die Testdatei für den Unit-Test ist [data.dat](../sources/src/main/resources/pr2/io/random_access/data.dat) + + + \ No newline at end of file diff --git a/Input und Output_013/kafka.txt b/Input und Output_013/kafka.txt new file mode 100644 index 0000000..b5695c5 --- /dev/null +++ b/Input und Output_013/kafka.txt @@ -0,0 +1,11 @@ +Verhaftung - Gespräch mit Frau Grubach - Dann Fräulein Bürstner + +Jemand mußte Josef K. verleumdet haben, denn ohne daß er etwas Böses getan hätte, wurde er eines Morgens verhaftet. Die Köchin der Frau Grubach, seiner Zimmervermieterin, die ihm jeden Tag gegen acht Uhr früh das Frühstück brachte, kam diesmal nicht. Das war noch niemals geschehen. K. wartete noch ein Weilchen, sah von seinem Kopfkissen aus die alte Frau, die ihm gegenüber wohnte und die ihn mit einer an ihr ganz ungewöhnlichen Neugierde beobachtete, dann aber, gleichzeitig befremdet und hungrig, läutete er. Sofort klopfte es und ein Mann, den er in dieser Wohnung noch niemals gesehen hatte, trat ein. Er war schlank und doch fest gebaut, er trug ein anliegendes schwarzes Kleid, das, ähnlich den Reiseanzügen, mit verschiedenen Falten, Taschen, Schnallen, Knöpfen und einem Gürtel versehen war und infolgedessen, ohne daß man sich darüber klar wurde, wozu es dienen sollte, besonders praktisch erschien. "Wer sind Sie?" fragte K. und saß gleich halb aufrecht im Bett. Der Mann aber ging über die Frage hinweg, als müsse man seine Erscheinung hinnehmen, und sagte bloß seinerseits: "Sie haben geläutet?" "Anna soll mir das Frühstück bringen", sagte K. und versuchte, zunächst stillschweigend, durch Aufmerksamkeit und Überlegung festzustellen, wer der Mann eigentlich war. Aber dieser setzte sich nicht allzulange seinen Blicken aus, sondern wandte sich zur Tür, die er ein wenig öffnete, um jemandem, der offenbar knapp hinter der Tür stand, zu sagen: "Er will, daß Anna ihm das Frühstück bringt." Ein kleines Gelächter im Nebenzimmer folgte, es war nach dem Klang nicht sicher, ob nicht mehrere Personen daran beteiligt waren. Obwohl der fremde Mann dadurch nichts erfahren haben konnte, was er nicht schon früher gewußt hätte, sagte er nun doch zu K. im Tone einer Meldung: "Es ist unmöglich." "Das wäre neu", sagte K., sprang aus dem Bett und zog rasch seine Hosen an. "Ich will doch sehen, was für Leute im Nebenzimmer sind und wie Frau Grubach diese Störung mir gegenüber verantworten wird." Es fiel ihm zwar gleich ein, daß er das nicht hätte laut sagen müssen und daß er dadurch gewissermaßen ein Beaufsichtigungsrecht des Fremden anerkannte, aber es schien ihm jetzt nicht wichtig. Immerhin faßte es der Fremde so auf, denn er sagte: "Wollen Sie nicht lieber hierbleiben?" "Ich will weder hierbleiben, noch von Ihnen angesprochen werden, solange Sie sich mir nicht vorstellen." "Es war gut gemeint", sagte der Fremde und öffnete nun freiwillig die Tür. Im Nebenzimmer, in das K. langsamer eintrat, als er wollte, sah es auf den ersten Blick fast genau so aus wie am Abend vorher. Es war das Wohnzimmer der Frau Grubach, vielleicht war in diesem mit Möbeln, Decken, Porzellan und Photographien überfüllten Zimmer heute ein wenig mehr Raum als sonst, man erkannte das nicht gleich, um so weniger, als die Hauptveränderung in der Anwesenheit eines Mannes bestand, der beim offenen Fenster mit einem Buch saß, von dem er jetzt aufblickte. "Sie hätten in Ihrem Zimmer bleiben sollen! Hat es Ihnen denn Franz nicht gesagt?" "Ja, was wollen Sie denn?" sagte K. und sah von der neuen Bekanntschaft zu dem mit Franz Benannten, der in der Tür stehengeblieben war, und dann wieder zurück. Durch das offene Fenster erblickte man wieder die alte Frau, die mit wahrhaft greisenhafter Neugierde zu dem jetzt gegenüberliegenden Fenster getreten war, um auch weiterhin alles zu sehen. "Ich will doch Frau Grubach -", sagte K., machte eine Bewegung, als reiße er sich von den zwei Männern los, die aber weit von ihm entfernt standen, und wollte weitergehen. "Nein", sagte der Mann beim Fenster, warf das Buch auf ein Tischchen und stand auf. "Sie dürfen nicht weggehen, Sie sind ja verhaftet." "Es sieht so aus", sagte K. "Und warum denn?" fragte er dann. "Wir sind nicht dazu bestellt, Ihnen das zu sagen. Gehen Sie in Ihr Zimmer und warten Sie. Das Verfahren ist nun einmal eingeleitet, und Sie werden alles zur richtigen Zeit erfahren. Ich gehe über meinen Auftrag hinaus, wenn ich Ihnen so freundschaftlich zurede. Aber ich hoffe, es hört es niemand sonst als Franz, und der ist selbst gegen alle Vorschrift freundlich zu Ihnen. Wenn Sie auch weiterhin so viel Glück haben wie bei der Bestimmung Ihrer Wächter, dann können Sie zuversichtlich sein." K. wollte sich setzen, aber nun sah er, daß im ganzen Zimmer keine Sitzgelegenheit war, außer dem Sessel beim Fenster. "Sie werden noch einsehen, wie wahr das alles ist", sagte Franz und ging gleichzeitig mit dem andern Mann auf ihn zu. Besonders der letztere überragte K. bedeutend und klopfte ihm öfters auf die Schulter. Beide prüften K.s Nachthemd und sagten, daß er jetzt ein viel schlechteres Hemd werde anziehen müssen, daß sie aber dieses Hemd wie auch seine übrige Wäsche aufbewahren und, wenn seine Sache günstig ausfallen sollte, ihm wieder zurückgeben würden. "Es ist besser, Sie geben die Sachen uns als ins Depot", sagten sie, "denn im Depot kommen öfters Unterschleife vor und außerdem verkauft man dort alle Sachen nach einer gewissen Zeit, ohne Rücksicht, ob das betreffende Verfahren zu Ende ist oder nicht. Und wie lange dauern doch derartige Prozesse, besonders in letzter Zeit! Sie bekämen dann schließlich allerdings vom Depot den Erlös, aber dieser Erlös ist erstens an sich schon gering, denn beim Verkauf entscheidet nicht die Höhe des Angebotes, sondern die Höhe der Bestechung, und weiter verringern sich solche Erlöse erfahrungsgemäß, wenn sie von Hand zu Hand und von Jahr zu Jahr weitergegeben werden." K. achtete auf diese Reden kaum, das Verfügungsrecht über seine Sachen, das er vielleicht noch besaß, schätzte er nicht hoch ein, viel wichtiger war es ihm, Klarheit über seine Lage zu bekommen; in Gegenwart dieser Leute konnte er aber nicht einmal nachdenken, immer wieder stieß der Bauch des zweiten Wächters - es konnten ja nur Wächter sein - förmlich freundschaftlich an ihn, sah er aber auf, dann erblickte er ein zu diesem dicken Körper gar nicht passendes trockenes, knochiges Gesicht mit starker, seitlich gedrehter Nase, das sich über ihn hinweg mit dem anderen Wächter verständigte. Was waren denn das für Menschen? Wovon sprachen sie? Welcher Behörde gehörten sie an? K. lebte doch in einem Rechtsstaat, überall herrschte Friede, alle Gesetze bestanden aufrecht, wer wagte, ihn in seiner Wohnung zu überfallen? Er neigte stets dazu, alles möglichst leicht zu nehmen, das Schlimmste erst beim Eintritt des Schlimmsten zu glauben, keine Vorsorge für die Zukunft zu treffen, selbst wenn alles drohte. Hier schien ihm das aber nicht richtig, man konnte zwar das Ganze als Spaß ansehen, als einen groben Spaß, den ihm aus unbekannten Gründen, vielleicht weil heute sein dreißigster Geburtstag war, die Kollegen in der Bank veranstaltet hatten, es war natürlich möglich, vielleicht brauchte er nur auf irgendeine Weise den Wächtern ins Gesicht zu lachen, und sie würden mitlachen, vielleicht waren es Dienstmänner von der Straßenecke, sie sahen ihnen nicht unähnlich - trotzdem war er diesmal, förmlich schon seit dem ersten Anblick des Wächters Franz, entschlossen, nicht den geringsten Vorteil, den er vielleicht gegenüber diesen Leuten besaß, aus der Hand zu geben. Darin, daß man später sagen würde, er habe keinen Spaß verstanden, sah K. eine ganz geringe Gefahr, wohl aber erinnerte er sich - ohne daß es sonst seine Gewohnheit gewesen wäre, aus Erfahrungen zu lernen - an einige, an sich unbedeutende Fälle, in denen er zum Unterschied von seinen Freunden mit Bewußtsein, ohne das geringste Gefühl für die möglichen Folgen, sich unvorsichtig benommen hatte und dafür durch das Ergebnis gestraft worden war. Es sollte nicht wieder geschehen, zumindest nicht diesmal; war es eine Komödie, so wollte er mitspielen. + +Noch war er frei. "Erlauben Sie", sagte er und ging eilig zwischen den Wächtern durch in sein Zimmer. "Er scheint vernünftig zu sein", hörte er hinter sich sagen. In seinem Zimmer riß er gleich die Schubladen des Schreibtischs auf, es lag dort alles in großer Ordnung, aber gerade die Legitimationspapiere, die er suchte, konnte er in der Aufregung nicht gleich finden. Schließlich fand er seine Radfahrlegitimation und wollte schon mit ihr zu den Wächtern gehen, dann aber schien ihm das Papier zu geringfügig und er suchte weiter, bis er den Geburtsschein fand. Als er wieder in das Nebenzimmer zurückkam, öffnete sich gerade die gegenüberliegende Tür und Frau Grubach wollte dort eintreten. Man sah sie nur einen Augenblick, denn kaum hatte sie K. erkannt, als sie offenbar verlegen wurde, um Verzeihung bat, verschwand und äußerst vorsichtig die Tür schloß. "Kommen Sie doch herein", hatte K. gerade noch sagen können. Nun aber stand er mit seinen Papieren in der Mitte des Zimmers, sah noch auf die Tür hin, die sich nicht wieder öffnete, und wurde erst durch einen Anruf der Wächter aufgeschreckt, die bei dem Tischchen am offenen Fenster saßen und, wie K. jetzt erkannte, sein Frühstück verzehrten. "Warum ist sie nicht eingetreten?" fragte er. "Sie darf nicht", sagte der große Wächter. "Sie sind doch verhaftet." "Wie kann ich denn verhaftet sein? Und gar auf diese Weise?" "Nun fangen Sie also wieder an", sagte der Wächter und tauchte ein Butterbrot ins Honigfäßchen. "Solche Fragen beantworten wir nicht." "Sie werden sie beantworten müssen", sagte K. "Hier sind meine Legitimationspapiere, zeigen Sie mir jetzt die Ihrigen und vor allem den Verhaftbefehl." "Du lieber Himmel!" sagte der Wächter. "Daß Sie sich in Ihre Lage nicht fügen können und daß Sie es darauf angelegt zu haben scheinen, uns, die wir Ihnen jetzt wahrscheinlich von allen Ihren Mitmenschen am nächsten stehen, nutzlos zu reizen!" "Es ist so, glauben Sie es doch", sagte Franz, führte die Kaffeetasse, die er in der Hand hielt, nicht zum Mund, sondern sah K. mit einem langen, wahrscheinlich bedeutungsvollen, aber unverständlichen Blick an. K. ließ sich, ohne es zu wollen, in ein Zwiegespräch der Blicke mit Franz ein, schlug dann aber doch auf seine Papiere und sagte: "Hier sind meine Legitimationspapiere." "Was kümmern uns denn die?" rief nun schon der große Wächter. "Sie führen sich ärger auf als ein Kind. Was wollen Sie denn? Wollen Sie Ihren großen, verfluchten Prozeß dadurch zu einem raschen Ende bringen, daß Sie mit uns, den Wächtern, über Legitimation und Verhaftbefehl diskutieren? Wir sind niedrige Angestellte, die sich in einem Legitimationspapier kaum auskennen und die mit Ihrer Sache nichts anderes zu tun haben, als daß sie zehn Stunden täglich bei Ihnen Wache halten und dafür bezahlt werden. Das ist alles, was wir sind, trotzdem aber sind wir fähig, einzusehen, daß die hohen Behörden, in deren Dienst wir stehen, ehe sie eine solche Verhaftung verfügen, sich sehr genau über die Gründe der Verhaftung und die Person des Verhafteten unterrichten. Es gibt darin keinen Irrtum. Unsere Behörde, soweit ich sie kenne, und ich kenne nur die niedrigsten Grade, sucht doch nicht etwa die Schuld in der Bevölkerung, sondern wird, wie es im Gesetz heißt, von der Schuld angezogen und muß uns Wächter ausschicken. Das ist Gesetz. Wo gäbe es da einen Irrtum?" "Dieses Gesetz kenne ich nicht", sagte K. "Desto schlimmer für Sie", sagte der Wächter. "Es besteht wohl auch nur in Ihren Köpfen", sagte K., er wollte sich irgendwie in die Gedanken der Wächter einschleichen, sie zu seinen Gunsten wenden oder sich dort einbürgern. Aber der Wächter sagte nur abweisend: "Sie werden es zu fühlen bekommen." Franz mischte sich ein und sagte: "Sieh, Willem, er gibt zu, er kenne das Gesetz nicht, und behauptet gleichzeitig, schuldlos zu sein." "Du hast ganz recht, aber ihm kann man nichts begreiflich machen", sagte der andere. K. antwortete nichts mehr; muß ich, dachte er, durch das Geschwätz dieser niedrigsten Organe - sie geben selbst zu, es zu sein - mich noch mehr verwirren lassen? Sie reden doch jedenfalls von Dingen, die sie gar nicht verstehen. Ihre Sicherheit ist nur durch ihre Dummheit möglich. Ein paar Worte, die ich mit einem mir ebenbürtigen Menschen sprechen werde, werden alles unvergleichlich klarer machen als die längsten Reden mit diesen. Er ging einige Male in dem freien Raum des Zimmers auf und ab, drüben sah er die alte Frau, die einen noch viel älteren Greis zum Fenster gezerrt hatte, den sie umschlungen hielt. K. mußte dieser Schaustellung ein Ende machen: "Führen Sie mich zu Ihrem Vorgesetzten", sagte er. "Wenn er es wünscht; nicht früher", sagte der Wächter, der Willem genannt worden war. "Und nun rate ich Ihnen", fügte er hinzu, "in Ihr Zimmer zu gehen, sich ruhig zu verhalten und darauf zu warten, was über Sie verfügt werden wird. Wir raten Ihnen, zerstreuen Sie sich nicht durch nutzlose Gedanken, sondern sammeln Sie sich, es werden große Anforderungen an Sie gestellt werden. Sie haben uns nicht so behandelt, wie es unser Entgegenkommen verdient hätte, Sie haben vergessen, daß wir, mögen wir auch sein was immer, zumindest jetzt Ihnen gegenüber freie Männer sind, das ist kein kleines Übergewicht. Trotzdem sind wir bereit, falls Sie Geld haben, Ihnen ein kleines Frühstück aus dem Kaffeehaus drüben zu bringen." + +Ohne auf dieses Angebot zu antworten, stand K. ein Weilchen lang still. Vielleicht würden ihn die beiden, wenn er die Tür des folgenden Zimmers oder gar die Tür des Vorzimmers öffnete, gar nicht zu hindern wagen, vielleicht wäre es die einfachste Lösung des Ganzen, daß er es auf die Spitze trieb. Aber vielleicht würden sie ihn doch packen und, war er einmal niedergeworfen, so war auch alle Überlegenheit verloren, die er jetzt ihnen gegenüber in gewisser Hinsicht doch wahrte. Deshalb zog er die Sicherheit der Lösung vor, wie sie der natürliche Verlauf bringen mußte, und ging in sein Zimmer zurück, ohne daß von seiner Seite oder von Seite der Wächter ein weiteres Wort gefallen wäre. + +Er warf sich auf sein Bett und nahm vom Waschtisch einen schönen Apfel, den er sich gestern abend für das Frühstück vorbereitet hatte. Jetzt war er sein einziges Frühstück und jedenfalls, wie er sich beim ersten großen Bissen versicherte, viel besser, als das Frühstück aus dem schmutzigen Nachtcafé gewesen wäre, das er durch die Gnade der Wächter hätte bekommen können. Er fühlte sich wohl und zuversichtlich, in der Bank versäumte er zwar heute vormittag seinen Dienst, aber das war bei der verhältnismäßig hohen Stellung, die er dort einnahm, leicht entschuldigt. Sollte er die wirkliche Entschuldigung anführen? Er gedachte es zu tun, Würde man ihm nicht glauben, was in diesem Fall begreiflich war, so konnte er Frau Grubach als Zeugin führen oder auch die beiden Alten von drüben, die wohl jetzt auf dem Marsch zum gegenüberliegenden Fenster waren. Es wunderte K., wenigstens aus dem Gedankengang der Wächter wunderte es ihn, daß sie ihn in das Zimmer getrieben und ihn hier allein gelassen hatten, wo er doch zehnfache Möglichkeit hatte, sich umzubringen. Gleichzeitig allerdings fragte er sich, diesmal aus seinem Gedankengang, was für einen Grund er haben könnte, es zu tun. Etwa weil die zwei nebenan saßen und sein Frühstück abgefangen hatten? Es wäre so sinnlos gewesen, sich umzubringen, daß er, selbst wenn er es hätte tun wollen, infolge der Sinnlosigkeit dazu nicht imstande gewesen wäre. Wäre die geistige Beschränktheit der Wächter nicht so auffallend gewesen, so hätte man annehmen können, daß auch sie, infolge der gleichen Überzeugung, keine Gefahr darin gesehen hätten, ihn allein zu lassen. Sie mochten jetzt, wenn sie wollten, zusehen, wie er zu einem Wandschränkchen ging, in dem er einen guten Schnaps aufbewahrte, wie er ein Gläschen zuerst zum Ersatz des Frühstücks leerte und wie er ein zweites Gläschen dazu bestimmte, sich Mut zu machen, das letztere nur aus Vorsicht für den unwahrscheinlichen Fall, daß es nötig sein sollte. + + diff --git a/Input und Output_013/readme.md b/Input und Output_013/readme.md new file mode 100644 index 0000000..457c146 --- /dev/null +++ b/Input und Output_013/readme.md @@ -0,0 +1,26 @@ +# `Reader` verwenden +## Lernziel + + + +Textdaten mithilfe von `Reader` verarbeiten. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.reader_writer](../sources/src/main/java/pr2/io/reader_writer/). + +Lesen Sie die Datei [kafka.txt](../sources/src/main/resources/pr2/io/reader_writer/kafka.txt) mit einem passenden `Reader` ein und geben Sie sie auf der Konsole aus. Verwenden Sie nicht die `read()`-Methode, die einzelne Zeichen verarbeitet, sondern arbeiten Sie mit einem `char[]`-Buffer. + + + \ No newline at end of file diff --git a/Input und Output_014/readme.md b/Input und Output_014/readme.md new file mode 100644 index 0000000..4b37ead --- /dev/null +++ b/Input und Output_014/readme.md @@ -0,0 +1,36 @@ +# Rot13-Verschlüsselung +## Lernziel + + + +Funktionsweise und Einsatz von Filtern. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.rot13](../sources/src/main/java/pr2/io/rot13/). + +Schreiben Sie eine Klasse `Rot13Reader`, die als Filter-Reader implementiert ist und jedes eingelesene Zeichen durch ein Zeichen ersetzt, dessen numerischer Wert um 13 höher ist (d.h. um 13 Schritte im Alphabet verschoben ist). + +Schreiben Sie eine Klasse `Rot13`, die einen Dateinamen von der Kommandozeile nimmt und diese Text-Datei mithilfe von `Rot13Reader` liest und auf der Konsole ausgibt. + +```console +> cat /tmp/test +DIES IST EIN TEXT, DER GLEICH ROT13 VERSCHLUESSELT WIRD. + +> java Rot13 /tmp/test +QVR`-V`a-RV[-aRea9-QR_-TYRVPU-_\a>@-cR_`PUYbR``RYa-dV_Q; +``` + + + \ No newline at end of file diff --git a/Input und Output_015/readme.md b/Input und Output_015/readme.md new file mode 100644 index 0000000..c21c74a --- /dev/null +++ b/Input und Output_015/readme.md @@ -0,0 +1,39 @@ +# Datei zerhacken +## Lernziel + + + +Daten byteweise aus einem Stream lesen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.scrambler](../sources/src/main/java/pr2/io/scrambler/). + +Schreiben Sie eine Klasse `Scrambler`, die einen Dateinamen von der Kommandozeile entgegennimmt, die Datei einliest und dann wieder auf der Konsole ausgibt. Allerdings soll bei der Ausgabe nur jedes zweite Byte berücksichtigt werden. + +```console +> java Scrambler ../src/Scrambler.java +motjv.oFlIpttem +motjv.oFlNtonEcpin +motjv.oIEcpin +pbi ls cabe + pbi ttcvi anSrn[ rs hosIEcpin{ i ag.egh! ){ Sse.r.rnl( + Bteen ae nee"; Sse.xt1; } + ienuSra i; + r + i e ienuSra(rs0) +``` + + + \ No newline at end of file diff --git a/Input und Output_016/readme.md b/Input und Output_016/readme.md new file mode 100644 index 0000000..3c38348 --- /dev/null +++ b/Input und Output_016/readme.md @@ -0,0 +1,34 @@ +# Serialisierung +## Lernziel + + + +Serialisierung einsetzen können, um Objekte zu persistieren und wieder zu laden. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.serialisierung](../sources/src/main/java/pr2/io/serialisierung/). + +In dieser Aufgabe finden Sie bereits eine fertig implementierte Klasse `Board` vor, die ein Schachbrett repräsentiert. Allerdings wird dieses nicht für Schach benutzt, sondern für ein Spiel, bei dem man nur schwarze und weiße Steine auf das Brett stellen kann (z.B. Dame). Die Farbe der Steine wird durch die Enumeration `Color` dargestellt. + +Was bei dem Schachbrett allerdings noch fehlt, ist eine Möglichkeit den Spielstand zu speichern und später wieder einzulesen. + +Schauen Sie sich die Klassen `Board` und `Color` genau an und versuchen Sie diese zu verstehen. Sie können auch testweise ein Brett anlegen und mit Daten befüllen. (Wie dies geht, sehen Sie im JUnit-Test). Die `toString()`-Methode liefert eine anschauliche Darstellung des Spielfeldes. + +Implementieren Sie nun die Methoden `writeToFile` und `loadFromFile` unter Zuhilfenahme von Serialisierung. D.h. anders als in der Aufgabe zu `DataOutputStream`, sollen Sie hier kein eigenes Datenformat implementieren. Verwenden Sie stattdessen einen `ObjectOutputStream` bzw. `ObjectInputStream`. + +Lassen Sie den JUnit-Test laufen, um zu sehen, ob die Daten korrekt verarbeitet werden. Die Test-Datei für den Unit-Test ist [testdata.dat](../sources/src/main/resources/pr2/io/serialisierung/testdata.dat) + + + \ No newline at end of file diff --git a/Input und Output_016/testdata.dat b/Input und Output_016/testdata.dat new file mode 100644 index 0000000..34b842b Binary files /dev/null and b/Input und Output_016/testdata.dat differ diff --git a/Interfaces_001/readme.md b/Interfaces_001/readme.md new file mode 100644 index 0000000..efb5d6d --- /dev/null +++ b/Interfaces_001/readme.md @@ -0,0 +1,26 @@ +# Comparable implementieren +## Lernziel + + + +Klasse "comparable" machen. + +## Aufgabe + +Im Paket [pr2.interfaces.comparable_student](../sources/src/main/java/pr2/interfaces/comparable_student/) finden Sie die Klasse `Student`. + +Ändern Sie die Klasse bitte so ab, dass sie das `Comparable`-Interface implementiert. Die Sortierfolge soll sein: Nachname, Vorname, Matrikelnummer. + + + \ No newline at end of file diff --git a/Interfaces_002/readme.md b/Interfaces_002/readme.md new file mode 100644 index 0000000..94ceda5 --- /dev/null +++ b/Interfaces_002/readme.md @@ -0,0 +1,35 @@ +# Interface Stack entwerfen +## Lernziel + + + +Ein Interface entwerfen und dieses dann implementieren. + +## Aufgabe + +Gehen Sie in das Paket [pr2.interfaces.stack](../sources/src/main/java/pr2/interfaces/stack/). + +Entwerfen Sie bitte ein Interface `Stack`, das die grundlegenden Operationen eines Stacks definiert: + + * `push` -- schiebt ein neues Objekt auf den Stack + * `pop` -- holt das obere Element vom Stack und gibt es zurück + * `peek` -- gibt das obere Element zurück, lässt es aber auf dem Stack liegen + * `size` -- gibt die Anzahl der Elemente auf dem Stack zurück + +Der Stack soll beliebige Objekte verwalten können. + +Implementieren Sie das Interface mit einer Klasse `StackImpl` und schreiben Sie JUnit-Tests, um Ihre Implementierung zu testen. + + + \ No newline at end of file diff --git a/Interfaces_003/readme.md b/Interfaces_003/readme.md new file mode 100644 index 0000000..e05c6b9 --- /dev/null +++ b/Interfaces_003/readme.md @@ -0,0 +1,42 @@ +# Interface: Uebersetzer +## Lernziel + + + +Ein Interface implementieren. + +## Aufgabe + +Im Paket [pr2.interfaces.uebersetzer](../sources/src/main/java/pr2/interfaces/uebersetzer/) finden Sie das Interface `Uebersetzer`, das eine Methode zum Übersetzen von Strings definiert. + +Implementieren Sie das Interface für die Sprachen Spanisch (`UebersetzerDeutschSpanisch`) und Englisch (`UebersetzerDeutschEnglisch`) und schreiben Sie eine Klasse `Translator`, die auf der Kommandozeile als erstes Argument die Sprache und als zweites das zu über\-setzende deutsche Wort nimmt und dann auf der Konsole die Übersetzung ausgibt. Es genügt, wenn Sie einige wenige Worte in den Klassen als Übersetzungen vorhalten. + +```console +> java Translator englisch gehen +Übersetzung: deutsch -> englisch +gehen -> go + +> java Translator spanisch gehen +Übersetzung: deutsch -> spanisch +gehen -> ir + +> java Translator deutsch gehen +Unbekannte Sprache + +> java Translator spanisch fliegen +Unbekanntes Wort: fliegen +``` + + + \ No newline at end of file diff --git a/Interfaces_004/readme.md b/Interfaces_004/readme.md new file mode 100644 index 0000000..1e20447 --- /dev/null +++ b/Interfaces_004/readme.md @@ -0,0 +1,38 @@ +# Interfaces anwenden und entwerfen +## Lernziel + + + +Ein vorhandenes Interface implementieren und ein eigenes Interface programmieren. Klassen schreiben, die mehrere Interfaces implementieren. Die Kollision von gleichnamigen Interface-Methoden und deren Konsequenzen verstehen. + +## Aufgabe + +Im Paket [pr2.interfaces.interfaces_e](../sources/src/main/java/pr2/interfaces/interfaces_e/) finden Sie Klassen für einen einfachen Spielecontroller. + +Bei dieser Aufgabe geht es um Spielecontroller (Joysticks) und deren Abbildung in einem Programm. Schauen Sie sich das Interface `DigitalController` und die dazugehörige Implementierung `DigitalControllerImpl` an. Führen Sie die passenden Tests aus. + +Schreiben Sie nun ein neues Interface `AnalogController` im Paket `api`, das dieselben Methoden wie `DigitalController` hat, mit dem Unterschied, dass die Methoden `up`, `down`, `left` und `right` einen Prozentsatz (Wert zwischen `0.0` und `1.0`) bekommen, der die Auslenkung des Joysticks anzeigt. Die Methode `getPosition` bleibt im Vergleich zum `DigitalController` unverändert. Aus z.B. der Methode `void up()` aus `DigitalController` wird also `void up(double percentage)` in `AnalogController`. + +Implementieren Sie das Interface jetzt in einer Klasse `AnalogControllerImpl` im Paket `impl` und testen Sie Ihre Implementierung mit dem Test `AnalogControllerTest`. Damit der Test ausgeführt werden kann, müssen Sie die Tests noch einkommentieren. + +__Hinweis:__ Lassen Sie sich bei der Implementierung der Klasse `AnalogControllerImpl` nicht zu sehr von `DigitalControllerImpl` beeinflussen. Sie müssen einen anderen Weg wählen und die Position als `double`-Werte speichern. Eine direkte Verwendung von `Point` wird nicht funktionieren, da `Point` nur ganzzahlige Positionen verwalten kann. Erst in `getPosition` sollten Sie die `double`-Werte runden. + +Schreiben Sie nun eine Klasse `DualShock4` im Paket `impl`, die beide Interfaces implementiert. Beachten Sie, dass der Controller zwar zwei Steuerknüppel hat (einen analogen und einen digitalen), aber aus beiden nur eine gemeinsame Position errechnet. + +__Hinweis:__ `DualShock4` implementiert zwar die Interfaces, er erbt aber nicht von den Implementierungen. Modellieren Sie die Beziehung zwischen `DualShock4` und `DigitalControllerImpl` bzw. `AnalogControllerImpl` als Assoziation. Leiten Sie dann die Aufrufe der implementierten Methoden an diese Instanzvariablen weiter. + +Testen Sie die Implementierung mit dem entsprechenden Test `DualShock4Test`. Auch hier müssen Sie erst die Kommentarzeichen entfernen, bevor der Test laufen kann. + + + \ No newline at end of file diff --git a/Lambdas_001/readme.md b/Lambdas_001/readme.md new file mode 100644 index 0000000..d9b8fdb --- /dev/null +++ b/Lambdas_001/readme.md @@ -0,0 +1,34 @@ +# StringTransmogrifier +## Lernziel + + + +Funktionale Interfaces entwerfen und verwenden. + +## Aufgabe + +Gehen Sie in das Paket [pr2.lambda.mogrifier_1](../sources/src/main/java/pr2/lambda/mogrifier_1/). + +Schreiben Sie ein funktionales Interface namens `StringFunction`. Die Methode des Interfaces nimmt eine String und gibt einen String zurück. + +Schreiben Sie eine Klasse `StringTransmogrifier`, die eine statische Methode `transmogrify` hat, der man ein String-Array und eine `StringFunction` übergibt. Die Methode wendet die Funktion auf jedes Element des Arrays an und gibt ein neues Array mit dem Ergebnis zurück. + +Schreiben Sie eine Klasse `StringTransmogrifierTest`, die ein String-Array erzeugt und dann mithilfe der Klasse `StringTransmogrifier` die Elemente verändert. Nehmen Sie folgende Änderungen am Array vor, indem Sie entsprechende Lambda-Ausdrücke oder Methodenreferenzen übergeben: + + * Umwandeln aller Buchstaben in Kleinbuchstaben. + * Umwandeln aller Buchstaben in Großbuchstaben. + * Ersetzen jedes Buchstaben durch den im Alphabet folgenden. + + + \ No newline at end of file diff --git a/Lambdas_002/readme.md b/Lambdas_002/readme.md new file mode 100644 index 0000000..8a3de32 --- /dev/null +++ b/Lambdas_002/readme.md @@ -0,0 +1,28 @@ +# StringTransmogrifier erweitern +## Lernziel + + + +Funktionale Interfaces entwerfen und verwenden. + +## Aufgabe + +Gehen Sie in das Paket [pr2.lambda.mogrifier_2](../sources/src/main/java/pr2/lambda/mogrifier_2/). + +Ausgehend von der vorhergehenden Aufgabe, erweitern Sie das Interface `StringFunction` um eine _statische Methode_ namens `caesar`, mit der man sich eine `StringFunction` erzeugen lassen kann, die die Buchstaben des Strings um einen frei wählbaren Wert verschiebt. + +Teste Sie Ihre Implementierung wieder mit `StringTransmogrifierTest`. + + + \ No newline at end of file diff --git a/Object und Wrapper_001/readme.md b/Object und Wrapper_001/readme.md new file mode 100644 index 0000000..de42507 --- /dev/null +++ b/Object und Wrapper_001/readme.md @@ -0,0 +1,26 @@ +# Deep-Copy mit `clone()` +## Lernziel + + + +Den Nutzen der `clone()`-Methode verstehen und diese richtig einsetzen. Eine eigene `clone()`-Methode schreiben und eine tiefe Kopie durchführen. + +## Aufgabe + +Im Paket [pr2.object.clone_alien](../sources/src/main/java/pr2/object/clone_alien/) fügen Sie der Klasse `Alien` eine `clone()`-Methode hinzu, die eine _tiefe Kopie_ der Objekte anlegt. Hierzu müssen Sie auch Raumanzug mit einer `clone()`-Methode ausstatten. + +Testen Sie, ob Ihre Implementierung korrekt funktioniert, indem Sie die vorhandenen Testfälle ausführen. Damit die Tests laufen können, müssen Sie die Kommentarzeichen entfernen. + + + \ No newline at end of file diff --git a/Object und Wrapper_002/readme.md b/Object und Wrapper_002/readme.md new file mode 100644 index 0000000..d2f43b5 --- /dev/null +++ b/Object und Wrapper_002/readme.md @@ -0,0 +1,26 @@ +# Clone +## Lernziel + + + +Den Nutzen der `clone()`-Methode verstehen und diese richtig einsetzen. Eine eigene `clone()`-Methode schreiben und eine tiefe Kopie durchführen. + +## Aufgabe + +Im Paket [pr2.object.clone_person](../sources/src/main/java/pr2/object/clone_person) finden Sie die Klasse `Person`. + +Erweitern Sie die Klasse bitte um eine `clone()`-Methode, die eine tiefe Kopie (**deep copy**) durchführt. + + + \ No newline at end of file diff --git a/Object und Wrapper_003/readme.md b/Object und Wrapper_003/readme.md new file mode 100644 index 0000000..337ee9e --- /dev/null +++ b/Object und Wrapper_003/readme.md @@ -0,0 +1,32 @@ +# `equals()` und `hashCode()` implementieren und nutzen +## Lernziel + + + +Die Methoden `equals()` und `hashCode()` der Klasse `Object` korrekt überschreiben und nutzen. + +## Aufgabe + +Im Projekt finden Sie ein Paket [pr2.object.equals_hashcode](../sources/src/main/java/pr2/object/equals_hashcode/) mit zwei Klassen `Wesen` und `Ork` und einen Testfall `WesenTest`. + +Wenn Sie den Test ausführen wird er nicht erfolgreich sein, da die Methoden `equals` und `hashCode` in der Klasse Ork fehlen. + +Schauen Sie sich die `equals`- und `hashCode`-Methoden in `Wesen` an und versuchen Sie die Methoden zu verstehen. + +Schreiben Sie im nächsten Schritt korrekte `equals`- und `hashCode`-Methoden für `Ork`. __Achtung:__ Sie sollten für Ihre Lösung die Klasse `Wesen` nicht verändern. + +Führen Sie den Test erneut aus, um sicherzustellen, dass die Methoden richtig funktionieren. + + + \ No newline at end of file diff --git a/Object und Wrapper_004/readme.md b/Object und Wrapper_004/readme.md new file mode 100644 index 0000000..cebe590 --- /dev/null +++ b/Object und Wrapper_004/readme.md @@ -0,0 +1,26 @@ +# equals und hashCode +## Lernziel + + + +Die Methoden `equals()` und `hashCode()` der Klasse `Object` korrekt überschreiben und nutzen. + +## Aufgabe + +Im Paket [pr2.object.equals_person](../sources/src/main/java/pr2/object/equals_person) finden Sie die Klasse `Person`. + +Geben Sie bitte den Java-Quelltext einer `equals`- und `hashCode`-Methode für diese Klasse an, die die in der Klasse `java.lang.Object` zugesicherte Äquivalenzbeziehung einhalten. + + + \ No newline at end of file diff --git a/Object und Wrapper_005/readme.md b/Object und Wrapper_005/readme.md new file mode 100644 index 0000000..5b276d3 --- /dev/null +++ b/Object und Wrapper_005/readme.md @@ -0,0 +1,38 @@ +# `toString()`-Methode implementieren +## Lernziel + + + +Klassen mit einer `toString()`-Methode versehen und diese gegenseitig nutzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.object.tostring](../sources/src/main/java/pr2/object/tostring/). + +Lassen Sie die Klasse `Ausgabe` laufen und sehen Sie sich die Ausgabe an. Versuchen Sie zu verstehen, wie es zu dieser Ausgabe kommt und was sie bedeutet. + +Schreiben Sie im nächsten Schritt für die Klassen `Alien` und `Raumanzug` passende `toString()`-Methoden, sodass beim Aufruf der Klasse `Ausgabe` eine sinnvolle Ausgabe entsteht. Geben Sie + + * den Namen des Aliens, + * die Marke des Raumanzuges und + * den vorhandenen Sauerstoffvorrat + +aus. + +Eine beispielhafte Ausgabe könnte wie folgt aussehen: + +`Ich bin ein Alien und heiße 'E.T.'. Ich trage einen Raumanzug von Spaceman 2000 (Füllstand 19%).` + + + \ No newline at end of file diff --git a/Object und Wrapper_006/readme.md b/Object und Wrapper_006/readme.md new file mode 100644 index 0000000..b82c722 --- /dev/null +++ b/Object und Wrapper_006/readme.md @@ -0,0 +1,28 @@ +# Optimierung bei Integer +## Lernziel + + + +Wrapper-Klassen und deren Optimierungen verstehen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.object.wrapper_boxsearch](../sources/src/main/java/pr2/object/wrapper_boxsearch/). + +Bei den Wrapper-Typen (z.B. `Integer`) wird eine interne Optimierung durchgeführt, die dazu führt, dass bei Werten unterhalb einer bestimmten Schranke, beim Autoboxing immer wieder dasselbe Objekt verwendet wird, anstatt ein neues Wrapper-Objekt zu erzeugten. + +Schreiben Sie bitte ein Programm in der Klasse `BoxSearcher`, das für `Integer` diese Schranke sucht, indem es die Werte von `0` bis `200` auf diese Eigenschaft hin untersucht und für jeden Integer-Wert ausgibt, ob der Mechanismus bei ihm greift oder nicht. + + + \ No newline at end of file diff --git a/Object und Wrapper_007/readme.md b/Object und Wrapper_007/readme.md new file mode 100644 index 0000000..ed49b9f --- /dev/null +++ b/Object und Wrapper_007/readme.md @@ -0,0 +1,39 @@ +# Methoden der Wrapper-Klassen +## Lernziel + + + +Wrapper-Klassen nutzen, um Zahlen umzuwandeln. + +## Aufgabe + +Gehen Sie in das Paket [pr2.object.wrapper_umwandler](../sources/src/main/java/pr2/object/wrapper_umwandler/). + +Vervollständigen Sie die Klasse `Umwandler` so, dass die Methode `toString` eine Zahl nimmt und in vier verschiedenen Formaten ausgibt. Schauen Sie sich die Klasse `Integer` an und überlegen Sie, welche der vorhandenen statischen Methoden für das Problem passend sein könnten. + +Eine beispielhafte könnte wie folgt aussehen: + +```console +Dezimal: 17871 +Hex : 45cf +Oktal : 42717 +Binär : 100010111001111 +``` + +Im nächsten Schritt stellen Sie bitte die Methode `fromString` fertig. Auch hierzu sollten Sie sich die Klasse `Integer` genauer anschauen. + +Führen Sie das Programm aus und schauen Sie, ob das Ergebnis sinnvoll ist. + + + \ No newline at end of file diff --git a/Reflection_001/readme.md b/Reflection_001/readme.md new file mode 100644 index 0000000..4010670 --- /dev/null +++ b/Reflection_001/readme.md @@ -0,0 +1,36 @@ +# Klasse per Reflection analysieren +## Lernziel + + + +Reflection einsetzen, um Klassen zu untersuchen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.reflection.analyzer](../sources/src/main/java/pr2/reflection/analyzer/). + +Schreiben Sie eine Klasse `Analyzer`, der man auf der Kommandozeile den Namen einer Klasse übergeben kann. Diese Klasse wird dann von `Analyzer` geladen und alle öffentlichen Methoden und Attribute der angegebenen Klasse werden auf der Konsole ausgegeben. + +```console +> java Analyzer java.awt.Point +public int java.awt.Point.x +public int java.awt.Point.y +public boolean java.awt.Point.equals(java.lang.Object) +public java.lang.String java.awt.Point.toString() +public java.awt.Point java.awt.Point.getLocation( +... +``` + + + \ No newline at end of file diff --git a/Reflection_002/readme.md b/Reflection_002/readme.md new file mode 100644 index 0000000..7834440 --- /dev/null +++ b/Reflection_002/readme.md @@ -0,0 +1,27 @@ +# Objekte per Reflection erzeugen +## Lernziel + + + +Objekte per Reflection erzeugen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.reflection.reflector](../sources/src/main/java/pr2/reflection/reflector/). + +Schreiben Sie eine Klasse `Reflector`, die über Reflection ein neues Objekt vom Typ `java.util.Date` erzeugt und auf diesem Objekt die `toString`-Methode aufruft. Das Ergebnis des Aufrufs soll dann auf der Konsole ausgegeben werden. + + + + \ No newline at end of file diff --git a/Streams_001/readme.md b/Streams_001/readme.md new file mode 100644 index 0000000..39b74d5 --- /dev/null +++ b/Streams_001/readme.md @@ -0,0 +1,28 @@ +# Kleinbuchstaben in einem String zählen +## Lernziel + + + +Streams verwenden. + +## Aufgabe + +Gehen Sie in das Paket [pr2.streams.chars_1](../.. /sources/src/main/java/pr2/streams/chars_1/). + +Schreiben Sie eine Klasse `CountLetters` mit der statischen Methode `count`. Zählen Sie alle Kleinbuchstaben in einem String (Tipp: schauen Sie sich die `chars`-Methode der Klasse String an). + +Testen Sie Ihre Implementierung mit der Klasse `CountLettersTest`. + + + \ No newline at end of file diff --git a/Streams_002/readme.md b/Streams_002/readme.md new file mode 100644 index 0000000..2b66375 --- /dev/null +++ b/Streams_002/readme.md @@ -0,0 +1,28 @@ +# Buchstaben in einer Liste von Strings zählen +## Lernziel + + + +Streams verwenden. + +## Aufgabe + +Gehen Sie in das Paket [pr2.streams.chars_2](../.. /sources/src/main/java/pr2/streams/chars_2/). + +Zählen Sie die Zeichen in einer Liste von Strings (Typ `List`). + +Testen Sie Ihre Implementierung mit der Klasse `CountLettersTest`. + + + \ No newline at end of file diff --git a/Streams_003/readme.md b/Streams_003/readme.md new file mode 100644 index 0000000..798b2e6 --- /dev/null +++ b/Streams_003/readme.md @@ -0,0 +1,28 @@ +# Kleinbuchstaben in einem String zählen +## Lernziel + + + +Streams verwenden. + +## Aufgabe + +Gehen Sie in das Paket [pr2.streams.chars_3](../.. /sources/src/main/java/pr2/streams/chars_3/). + +Ausgehend von der vorhergehenden Aufgabe, zählen Sie jetzt nur noch die Kleinbuchstaben in den Strings der Liste. + +Testen Sie Ihre Implementierung mit der Klasse `CountLettersTest`. + + + \ No newline at end of file diff --git a/Streams_004/readme.md b/Streams_004/readme.md new file mode 100644 index 0000000..6d46587 --- /dev/null +++ b/Streams_004/readme.md @@ -0,0 +1,28 @@ +# Liste filtern +## Lernziel + + + +Daten in Streams filtern. + +## Aufgabe + +Gehen Sie in das Paket [pr2.streams.filter](../.. /sources/src/main/java/pr2/streams/filter/). + +Gegeben sei eine Liste von Strings (`List`). Erzeugen Sie eine neue Liste, in der nur noch die Strings mit mindestens fünf Zeichen enthalten sind und in der jeder String durch eine Variante ersetzt ist, in der er nur noch aus Kleinbuchstaben besteht. + +Testen Sie Ihre Implementierung mit der Klasse `FilterListTest`. + + + \ No newline at end of file diff --git a/Streams_005/games.txt b/Streams_005/games.txt new file mode 100644 index 0000000..3390355 --- /dev/null +++ b/Streams_005/games.txt @@ -0,0 +1,994 @@ +96;Half-Life 2;9.2;Nov 16, 2004 +96;Grand Theft Auto V;7.8;Apr 14, 2015 +96;The Orange Box;9.3;Oct 10, 2007 +96;Half-Life;9.1;Oct 31, 1998 +96;BioShock;8.4;Aug 21, 2007 +95;Baldur's Gate II: Shadows of Amn;9.2;Sep 24, 2000 +95;Portal 2;8.8;Apr 19, 2011 +94;The Elder Scrolls V: Skyrim;8.1;Nov 11, 2011 +94;Mass Effect 2;8.7;Jan 26, 2010 +94;Grand Theft Auto: Vice City;8.8;May 12, 2003 +94;Civilization II;9.0;Feb 29, 1996 +94;Quake;8.8;Jun 22, 1996 +94;BioShock Infinite;8.5;Mar 26, 2013 +94;The Elder Scrolls IV: Oblivion;8.0;Mar 20, 2006 +94;Grim Fandango;9.1;Sep 30, 1998 +94;Diablo;8.7;Nov 30, 1996 +94;Sid Meier's Civilization IV;8.2;Oct 25, 2005 +93;The Witcher 3: Wild Hunt;9.1;May 19, 2015 +93;Company of Heroes;8.8;Sep 13, 2006 +93;Unreal Tournament 2004;8.9;Mar 16, 2004 +93;Starcraft II: Wings of Liberty;8.2;Jul 27, 2010 +93;Minecraft;7.4;May 10, 2009 +93;Grand Theft Auto III;8.4;May 20, 2002 +93;Homeworld;8.9;Aug 31, 1999 +93;Star Wars: Knights of the Old Republic;9.0;Nov 18, 2003 +93;World of Warcraft;7.2;Nov 23, 2004 +93;Grand Theft Auto: San Andreas;8.8;Jun 7, 2005 +92;Call of Duty 4: Modern Warfare;8.5;Nov 5, 2007 +92;Warcraft III: Reign of Chaos;9.1;Jul 3, 2002 +92;The Sims;7.9;Jan 31, 2000 +92;Sid Meier's Gettysburg!;7.7;Sep 30, 1997 +92;World Soccer Winning Eleven 7 International;7.9;Apr 9, 2004 +92;Team Fortress 2;9.2;Apr 8, 2008 +92;System Shock 2;9.1;Aug 11, 1999 +92;Tom Clancy's Splinter Cell: Chaos Theory;8.8;Mar 28, 2005 +92;Undertale;8.2;Sep 15, 2015 +92;Rome: Total War;9.1;Sep 22, 2004 +92;Thief: The Dark Project;9.1;Nov 30, 1998 +92;Age of Empires II: The Age of Kings;9.0;Sep 30, 1999 +92;Unreal Tournament (1999);9.1;Nov 30, 1999 +92;Sid Meier's Alpha Centauri;9.1;Feb 12, 1999 +92;Galactic Civilizations II: Twilight of the Arnor;8.4;Apr 30, 2008 +92;Tiger Woods PGA Tour 2003;6.0;Oct 31, 2002 +91;Dishonored;8.4;Oct 9, 2012 +91;Medal of Honor: Allied Assault;8.6;Jan 20, 2002 +91;Myth: The Fallen Lords;8.8;Oct 31, 1997 +91;World of Warcraft: Wrath of the Lich King;7.4;Nov 13, 2008 +91;F1 Challenge '99-'02;8.3;Jun 24, 2003 +91;Baldur's Gate;9.0;Nov 30, 1998 +91;IL-2 Sturmovik;8.7;Nov 18, 2001 +91;FreeSpace 2;8.8;Sep 30, 1999 +91;Metal Gear Solid V: The Phantom Pain;7.7;Sep 1, 2015 +91;Tom Clancy's Splinter Cell;8.6;Feb 19, 2003 +91;Crysis;8.0;Nov 13, 2007 +91;World of Warcraft: The Burning Crusade;7.9;Jan 16, 2007 +91;Tiger Woods PGA Tour 2005;4.6;Sep 20, 2004 +91;The Longest Journey;8.9;Nov 16, 2000 +91;Tony Hawk's Pro Skater 2;8.5;Oct 31, 2000 +91;Star Wars Jedi Knight: Dark Forces II;8.5;Sep 30, 1997 +91;Batman: Arkham Asylum;8.7;Sep 15, 2009 +91;Galactic Civilizations II: Dark Avatar;8.2;Feb 14, 2007 +91;The Operative: No One Lives Forever;8.9;Nov 9, 2000 +91;Battlefield 2;8.4;Jun 21, 2005 +91;Street Fighter IV;8.0;Jul 1, 2009 +91;Fallout 3;7.9;Oct 28, 2008 +91;Batman: Arkham City;8.6;Nov 22, 2011 +91;Fez;6.5;May 1, 2013 +91;Planescape: Torment;9.3;Nov 30, 1999 +91;Neverwinter Nights;8.1;Jun 16, 2002 +91;No One Lives Forever 2: A Spy in H.A.R.M.'s Way;8.7;Sep 30, 2002 +91;Dragon Age: Origins;8.6;Nov 3, 2009 +91;Mark of the Ninja;8.0;Oct 16, 2012 +91;Dark Souls II;7.1;Apr 25, 2014 +91;Call of Duty;8.5;Oct 29, 2003 +91;Madden NFL 2004;8.2;Aug 12, 2003 +90;The Sims 2;8.8;Sep 14, 2004 +90;World of Warcraft: Cataclysm;5.5;Dec 7, 2010 +90;World of Goo;8.5;Oct 21, 2008 +90;Spelunky;7.2;Aug 8, 2013 +90;Black & White;7.6;Mar 26, 2001 +90;Portal;9.3;Apr 8, 2008 +90;NHL 2001;6.9;Sep 28, 2000 +90;Tony Hawk's Pro Skater 3;8.6;Mar 28, 2002 +90;Deus Ex;9.3;Jun 26, 2000 +90;Half-Life 2: Episode Two;9.2;Oct 10, 2007 +90;Braid;8.6;Jan 26, 2010 +90;The Chronicles of Riddick: Escape From Butcher Bay - Developer's Cut;8.7;Dec 8, 2004 +90;Sid Meier's Civilization III;8.4;Oct 30, 2001 +90;Silent Hunter III;7.8;Mar 15, 2005 +90;Sid Meier's Civilization V;7.8;Sep 21, 2010 +90;Falcon 4.0: Allied Force;8.6;Jun 28, 2005 +90;Deus Ex: Human Revolution;8.5;Aug 23, 2011 +90;Dark Souls III;8.2;Apr 12, 2016 +90;Flight Simulator 2002;8.4;Oct 19, 2001 +90;Brothers: A Tale of Two Sons;8.5;Sep 3, 2013 +90;Dota 2;6.2;Jul 9, 2013 +90;Guild Wars 2;7.9;Aug 28, 2012 +90;Freedom Force;8.0;Mar 24, 2002 +90;GTR 2;8.7;Sep 29, 2006 +90;Grand Theft Auto IV;6.5;Dec 2, 2008 +90;Total War: Shogun 2;8.3;Mar 15, 2011 +90;Empire: Total War;6.9;Mar 3, 2009 +90;Command & Conquer: Red Alert;8.9;Oct 31, 1996 +89;Star Wars Jedi Knight II: Jedi Outcast;8.6;Mar 26, 2002 +89;The Walking Dead: A Telltale Games Series;8.7;Dec 11, 2012 +89;Age of Mythology;8.9;Nov 1, 2002 +89;Sacrifice;8.8;Nov 5, 2000 +89;The Witcher 3: Wild Hunt - Hearts of Stone;8.4;Oct 13, 2015 +89;Pillars of Eternity;8.3;Mar 26, 2015 +89;The Elder Scrolls III: Morrowind;9.0;May 1, 2002 +89;Rocksmith 2014 Edition;7.9;Oct 22, 2013 +89;Fallout;8.9;Sep 30, 1997 +89;World Soccer Winning Eleven 9;8.4;Apr 28, 2006 +89;Worldwide Soccer Manager 2005;8.7;Dec 7, 2004 +89;Left 4 Dead;9.2;Nov 18, 2008 +89;Left 4 Dead 2;8.5;Nov 17, 2009 +89;NASCAR Racing 2002 Season;5.8;Feb 14, 2002 +89;Mass Effect;8.6;May 28, 2008 +89;Combat Mission: Barbarossa to Berlin;8.3;Oct 29, 2002 +89;Homeworld: Cataclysm;8.9;Sep 7, 2000 +89;The Walking Dead: Episode 5 - No Time Left;8.9;Nov 21, 2012 +89;Guild Wars;8.4;Apr 26, 2005 +89;Borderlands 2;8.2;Sep 18, 2012 +89;Max Payne;9.1;Jul 23, 2001 +89;Out of the Park Baseball 15;7.2;Apr 21, 2014 +89;World in Conflict;8.1;Sep 18, 2007 +89;NASCAR Racing 4;8.2;Feb 6, 2001 +89;Duke Nukem 3D;8.8;Jan 31, 1996 +89;Far Cry;8.0;Mar 23, 2004 +89;FIFA Soccer 12;7.1;Sep 27, 2011 +89;XCOM: Enemy Unknown;8.2;Oct 9, 2012 +89;Mass Effect 3;5.4;Mar 6, 2012 +89;Rise of Nations;9.0;May 20, 2003 +89;NASCAR Racing 2003 Season;8.6;Feb 14, 2003 +89;Descent 3;8.3;Jun 14, 2000 +89;The Curse of Monkey Island;9.1;Oct 31, 1997 +89;Battlefield 3;7.5;Oct 25, 2011 +89;Battlefield 1942;8.6;Sep 10, 2002 +89;Madden NFL 2003;8.4;Aug 12, 2002 +89;DiRT 2;8.3;Dec 10, 2009 +89;Stardew Valley;8.5;Feb 26, 2016 +89;Prince of Persia: The Sands of Time;8.6;Nov 30, 2003 +89;Railroad Tycoon II;8.4;Oct 31, 1998 +88;Microsoft Flight Simulator 2004: A Century of Flight;8.2;Jul 29, 2003 +88;Medieval: Total War;8.8;Aug 19, 2002 +88;Mafia;9.1;Aug 27, 2002 +88;LIMBO;8.1;Aug 2, 2011 +88;Nuclear Throne;7.4;Dec 5, 2015 +88;Crusader Kings II: The Old Gods;8.8;May 28, 2013 +88;Assassin's Creed: Brotherhood;8.2;Mar 22, 2011 +88;Superbike 2001;6.5;Oct 9, 2000 +88;F.E.A.R.;8.3;Oct 17, 2005 +88;Kerbal Space Program;8.1;Apr 27, 2015 +88;Tribes 2;8.5;Mar 28, 2001 +88;Age of Empires II: The Conquerors Expansion;9.0;Aug 24, 2000 +88;Tiger Woods PGA Tour 2004;8.8;Sep 22, 2003 +88;Warcraft III: The Frozen Throne;9.0;Jul 1, 2003 +88;Starcraft;9.1;Apr 1, 1998 +88;Far Cry 3;8.2;Dec 4, 2012 +88;XCOM 2;7.0;Feb 5, 2016 +88;World Soccer Winning Eleven 8 International;8.5;Feb 16, 2005 +88;Torchlight II;8.6;Sep 20, 2012 +88;Myth II: Soulblighter;9.0;Nov 30, 1998 +88;Return to Castle Wolfenstein;8.7;Nov 19, 2001 +88;Shogo: Mobile Armor Division;8.9;Sep 30, 1998 +88;Thirty Flights of Loving;5.0;Aug 20, 2012 +88;Hearthstone: Heroes of Warcraft;6.3;Mar 11, 2014 +88;Medieval II: Total War;8.9;Nov 13, 2006 +88;F1 2002;7.6;Jun 13, 2002 +88;The Stanley Parable;8.0;Oct 17, 2013 +88;BioShock 2;8.0;Feb 9, 2010 +88;Counter-Strike: Source;8.9;Sep 26, 2005 +88;Starcraft II: Legacy of the Void;8.3;Nov 10, 2015 +88;Diablo III;4.0;May 15, 2012 +88;Rise of Nations: Thrones & Patriots;8.8;Apr 27, 2004 +88;Sid Meier's Pirates!;8.3;Nov 22, 2004 +88;EVE Online: Special Edition;7.8;Mar 10, 2009 +88;Guacamelee! Gold Edition;7.3;Aug 8, 2013 +88;Armadillo Run;8.2;Apr 22, 2006 +88;Dark Age of Camelot;8.9;Sep 1, 2001 +88;Baldur's Gate II: Throne of Bhaal;8.9;Jun 21, 2001 +88;Counter-Strike;9.3;Nov 8, 2000 +88;Tony Hawk's Pro Skater 4;8.4;Aug 27, 2003 +88;Ori and the Blind Forest;8.7;Mar 11, 2015 +88;Diablo II;8.8;Jun 29, 2000 +88;The Witcher 2: Assassins of Kings;8.5;May 17, 2011 +87;Plants vs. Zombies;8.9;Aug 18, 2009 +87;Doom 3;7.5;Aug 3, 2004 +87;Super Meat Boy;8.3;Apr 5, 2011 +87;Football Manager 2010;9.1;Nov 3, 2009 +87;Oddworld: Abe's Oddysee - New 'n' Tasty;7.8;Feb 25, 2015 +87;Tom Clancy's Splinter Cell: Pandora Tomorrow;8.0;Mar 23, 2004 +87;Europa Universalis II;8.8;Nov 12, 2001 +87;Burnout Paradise: The Ultimate Box;7.5;Feb 5, 2009 +87;Battlefield: Bad Company 2;8.3;Mar 2, 2010 +87;GRID;7.9;Jun 3, 2008 +87;Crypt of the NecroDancer;7.7;Apr 23, 2015 +87;Sins of a Solar Empire;8.2;Feb 4, 2008 +87;MechWarrior 4: Vengeance;8.2;Nov 23, 2000 +87;Thief II: The Metal Age;9.1;Feb 29, 2000 +87;Diablo II: Lord of Destruction;9.1;Jun 27, 2001 +87;Monkey Island 2 Special Edition: LeChuck's Revenge;9.0;Jul 7, 2010 +87;Half-Life 2: Episode One;8.6;Jun 1, 2006 +87;The Swapper;8.7;May 30, 2013 +87;Hitman 2: Silent Assassin;8.2;Oct 1, 2002 +87;Year Walk;7.0;Mar 6, 2014 +87;Max Payne 3;7.6;Jun 1, 2012 +87;TowerFall Ascension;6.6;Mar 11, 2014 +87;Battlefield 3: Armored Kill;7.0;Sep 11, 2012 +87;NHL 2002;8.7;Sep 17, 2001 +87;Icewind Dale;8.3;Jun 29, 2000 +87;The Witness;6.6;Jan 26, 2016 +87;Brothers in Arms: Road to Hill 30;7.1;Mar 15, 2005 +87;Kohan: Immortal Sovereigns;8.6;Mar 14, 2001 +87;Day of the Tentacle Remastered;7.9;Mar 21, 2016 +87;Dead Space 2;8.3;Jan 25, 2011 +87;Diablo III: Reaper of Souls;6.6;Mar 25, 2014 +87;Shogun: Total War Warlord Edition;8.7;Aug 13, 2001 +87;Serious Sam: The First Encounter;8.4;Mar 21, 2001 +87;Grand Prix 3;8.3;Aug 24, 2000 +87;Call of Duty: United Offensive;8.3;Sep 14, 2004 +87;Divinity: Original Sin;8.7;Jan 17, 2014 +87;Company of Heroes: Opposing Fronts;8.6;Sep 24, 2007 +87;Psychonauts;8.9;Apr 19, 2005 +87;Gears of War;7.8;Nov 6, 2007 +87;Out of the Park Baseball 4;7.8;Feb 28, 2002 +87;Europa Universalis IV;8.7;Aug 13, 2013 +87;NHL 2004;8.2;Sep 22, 2003 +87;Zeus: Master of Olympus;9.0;Oct 22, 2000 +87;World of Warcraft: Warlords of Draenor;6.0;Nov 13, 2014 +87;Warhammer 40,000: Dawn of War - Dark Crusade;8.9;Oct 9, 2006 +87;Commandos 2: Men of Courage;8.8;Sep 20, 2001 +86;Tales From The Borderlands: Episode 5 - The Vault of the Traveler;8.7;Oct 20, 2015 +86;Bastion;8.6;Aug 16, 2011 +86;Gone Home;5.4;Aug 15, 2013 +86;Pac-Man Championship Edition DX +;7.3;Sep 24, 2013 +86;Supreme Commander;8.3;Feb 20, 2007 +86;Total War: Shogun 2 - Fall of the Samurai;8.4;Mar 23, 2012 +86;Startopia;8.7;Jun 19, 2001 +86;Enemy Engaged: RAH-66 Comanche Versus Ka-52 Hokum;8.3;Jul 31, 2000 +86;Fallout 2;9.2;Sep 30, 1998 +86;Final Fantasy XIV: Heavensward;7.7;Jun 23, 2015 +86;Football Manager 2013;6.7;Nov 1, 2012 +86;Out of the Park Baseball 14;8.6;Apr 15, 2013 +86;The Witcher: Enhanced Edition;8.5;Sep 16, 2008 +86;Borderlands: The Secret Armory of General Knoxx;7.6;Feb 25, 2010 +86;Call of Duty 2;8.3;Oct 25, 2005 +86;Astebreed;7.3;May 30, 2014 +86;Ground Control;7.8;May 31, 2000 +86;Rise of the Tomb Raider;8.0;Jan 28, 2016 +86;Resident Evil 5;7.1;Sep 18, 2009 +86;Saints Row IV;7.4;Aug 20, 2013 +86;Black Mesa;9.0;Sep 14, 2012 +86;EverQuest: Omens of War;7.7;Sep 13, 2004 +86;Steel Beasts;8.4;Sep 24, 2000 +86;Total Annihilation;8.9;Sep 30, 1997 +86;Need for Speed: Hot Pursuit;6.7;Nov 16, 2010 +86;FIFA Soccer 13;6.6;Sep 25, 2012 +86;Sid Meier's Civilization IV: Beyond the Sword;8.6;Jul 23, 2007 +86;The Sims 3;7.6;Jun 2, 2009 +86;Freedom Force vs The 3rd Reich;7.7;Mar 8, 2005 +86;The Binding of Isaac: Rebirth;8.3;Nov 4, 2014 +86;Tribes: Ascend;7.7;Apr 12, 2012 +86;Titanfall;6.1;Mar 11, 2014 +86;Rayman Origins;8.4;Mar 29, 2012 +86;Her Story;5.7;Jun 24, 2015 +86;Starcraft II: Heart of the Swarm;7.9;Mar 12, 2013 +86;Mass Effect 2: Lair of the Shadow Broker;8.5;Sep 7, 2010 +86;LEGO Star Wars II: The Original Trilogy;8.3;Sep 12, 2006 +86;Dungeon Siege;7.9;Mar 31, 2002 +86;Crysis 2;6.7;Mar 22, 2011 +86;Call of Duty: Modern Warfare 2;4.1;Nov 10, 2009 +86;The Secret of Monkey Island: Special Edition;9.1;Jul 15, 2009 +86;Max Payne 2: The Fall of Max Payne;9.0;Oct 14, 2003 +86;Homeworld Remastered Collection;8.2;Feb 25, 2015 +86;Galactic Civilizations II: Dread Lords;8.0;Feb 21, 2006 +86;Tomb Raider;8.5;Mar 5, 2013 +86;Star Trek: Voyager Elite Force;8.2;Sep 20, 2000 +86;Worldwide Soccer Manager 2008;8.4;Oct 23, 2007 +86;IL-2 Sturmovik: Forgotten Battles;8.6;Mar 2, 2003 +86;Hyper Light Drifter;8.1;Mar 31, 2016 +86;DiRT 3;6.9;May 24, 2011 +86;Unreal Tournament 2003;8.1;Sep 30, 2002 +86;Age of Wonders II: The Wizard's Throne;8.4;Jun 12, 2002 +86;Links 2001;6.8;Oct 24, 2000 +86;EverQuest: The Ruins of Kunark;8.8;Mar 31, 2000 +86;Full Throttle;8.8;Apr 30, 1995 +86;The Lord of the Rings Online: Shadows of Angmar;8.1;Apr 24, 2007 +86;Pony Island;6.8;Jan 4, 2016 +86;Warhammer 40,000: Dawn of War;8.8;Sep 20, 2004 +86;Warhammer Online: Age of Reckoning;7.9;Sep 16, 2008 +86;Dead Space;8.0;Oct 20, 2008 +86;Bionic Commando Rearmed;7.0;Aug 13, 2008 +86;Command & Conquer: Red Alert 2 - Yuri's Revenge;9.0;Oct 10, 2001 +86;Europa Universalis;8.1;Feb 2, 2001 +86;Escape from Monkey Island;8.2;Nov 8, 2000 +86;IL-2 Sturmovik: 1946;8.8;Mar 13, 2007 +86;XCOM: Enemy Within;7.9;Nov 12, 2013 +86;Battlefield 3: Back to Karkand;7.2;Dec 13, 2011 +86;Heroes of the Storm;6.7;Jun 2, 2015 +86;Civilization III: Conquests;8.4;Nov 4, 2003 +86;Path of Exile;8.0;Jan 25, 2013 +86;Battlefield: Bad Company 2 Vietnam;8.1;Dec 18, 2010 +86;Assassin's Creed II;6.8;Mar 9, 2010 +86;The Elder Scrolls IV: Shivering Isles;8.4;Mar 26, 2007 +86;DiRT Rally;8.8;Dec 7, 2015 +86;Rocket League;8.1;Jul 7, 2015 +86;Allegiance;8.2;Mar 31, 2000 +85;The Talos Principle;8.5;Dec 11, 2014 +85;Cities: Skylines;8.9;Mar 10, 2015 +85;Falcon 4.0;8.0;Nov 30, 1998 +85;Tom Clancy's Rainbow Six;8.6;Jul 31, 1998 +85;Madden NFL 2005;6.4;Sep 14, 2004 +85;Legend of Grimrock II;8.0;Oct 15, 2014 +85;Sam & Max Episode 205: What's New, Beelzebub?;8.6;Apr 10, 2008 +85;Dragon Age: Inquisition;5.8;Nov 18, 2014 +85;Tales from the Borderlands: A Telltale Game Series;8.7;Apr 26, 2016 +85;Tom Clancy's Rainbow Six: Vegas;7.7;Dec 12, 2006 +85;City of Heroes;8.5;Apr 27, 2004 +85;SWAT 4;8.6;Apr 5, 2005 +85;Clive Barker's Undying;8.7;Feb 21, 2001 +85;EverQuest;8.2;Mar 16, 1999 +85;Warhammer 40,000: Dawn of War II;8.1;Feb 18, 2009 +85;Command & Conquer 3: Tiberium Wars;8.0;Mar 26, 2007 +85;Bit.Trip Presents...Runner2: Future Legend of Rhythm Alien;8.2;Feb 26, 2013 +85;Hotline Miami;8.5;Oct 23, 2012 +85;Out of the Park Baseball 13;8.2;Apr 9, 2012 +85;Wizardry 8;8.6;Nov 14, 2001 +85;Aliens Versus Predator 2;8.7;Oct 31, 2001 +85;Operation Flashpoint: Cold War Crisis;9.0;Aug 30, 2001 +85;Tropico;8.4;Apr 5, 2001 +85;Giants: Citizen Kabuto;8.9;Dec 6, 2000 +85;NASCAR SimRacing;4.9;Feb 15, 2005 +85;The Lord of the Rings Online: Mines of Moria;8.3;Nov 17, 2008 +85;The Binding of Isaac: Afterbirth;8.1;Oct 30, 2015 +85;Amnesia: The Dark Descent;8.6;Feb 17, 2011 +85;GTR FIA Racing;8.6;May 3, 2005 +85;Football Manager 2011;8.4;Nov 23, 2010 +85;Dust: An Elysian Tail;8.5;May 24, 2013 +85;South Park: The Stick of Truth;8.6;Mar 4, 2014 +85;Dark Souls: Prepare to Die Edition;7.4;Aug 24, 2012 +85;Medieval II: Total War Kingdoms;8.8;Aug 28, 2007 +85;Shovel Knight;7.9;Jun 26, 2014 +85;DmC: Devil May Cry;6.7;Jan 24, 2013 +85;Peggle Deluxe;8.1;Feb 19, 2008 +85;Monopoly Tycoon;8.0;Sep 24, 2001 +85;Indigo Prophecy;8.3;Oct 2, 2005 +85;Prince of Persia: The Two Thrones;8.0;Dec 1, 2005 +85;Sam & Max Episode 204: Chariots of the Dogs;8.1;Mar 13, 2008 +85;Assetto Corsa;8.4;Dec 19, 2014 +85;Machinarium;8.8;Oct 16, 2009 +85;Frozen Synapse;7.7;May 26, 2011 +85;Valkyria Chronicles;8.3;Nov 11, 2014 +85;Freelancer;8.9;Mar 3, 2003 +85;Zenzizenzic;5.9;Jul 23, 2015 +85;The Wolf Among Us: Episode 1 - Faith;9.0;Oct 11, 2013 +85;Mega Man Legacy Collection;7.3;Aug 25, 2015 +85;Warhammer 40,000: Dawn of War II - Chaos Rising;8.7;Mar 11, 2010 +85;Far Cry 2;5.8;Oct 21, 2008 +85;The Walking Dead: Episode 3 - Long Road Ahead;8.4;Aug 29, 2012 +85;AudioSurf;8.8;Feb 15, 2008 +85;BattleBlock Theater;8.0;May 15, 2014 +85;Star Wars: Knights of the Old Republic II - The Sith Lords;8.4;Feb 8, 2005 +85;MVP Baseball 2005;8.1;Feb 22, 2005 +85;The Elder Scrolls III: Bloodmoon;8.5;Jun 3, 2003 +85;Rogue Legacy;7.9;Jun 27, 2013 +85;Chaos Reborn;8.4;Oct 26, 2015 +85;Thief: Deadly Shadows;8.4;May 25, 2004 +85;Football Manager 2014;5.4;Oct 30, 2013 +85;System Shock: Enhanced Edition;7.9;Sep 22, 2015 +85;EverQuest: Gates of Discord;6.8;Feb 9, 2004 +85;FIFA 2001 Major League Soccer;7.3;Oct 30, 2000 +85;Sid Meier's Civilization V: Brave New World;8.6;Jul 9, 2013 +85;Final Fantasy XI;7.5;Oct 28, 2003 +85;Serious Sam: The Second Encounter;8.5;Feb 4, 2002 +85;The Sims: Hot Date;7.9;Nov 12, 2001 +85;American McGee's Alice;8.2;Dec 6, 2000 +85;Trials Evolution: Gold Edition;6.7;Mar 21, 2013 +85;Warhammer 40,000: Dawn of War - Winter Assault;8.3;Sep 21, 2005 +85;Tony Hawk's Underground 2;7.9;Oct 4, 2004 +85;Papers, Please;8.5;Aug 8, 2013 +85;Star Wars: The Old Republic;5.9;Dec 20, 2011 +85;Anarchy Online: Shadowlands;8.7;Sep 8, 2003 +85;Dark Age of Camelot: Shrouded Isles;8.8;Dec 2, 2002 +85;Obsidian;8.3;Dec 31, 1996 +84;The Walking Dead: Episode 2 - Starved for Help;8.6;Jun 29, 2012 +84;Saints Row: The Third;8.1;Nov 15, 2011 +84;Fallout: New Vegas;8.5;Oct 19, 2010 +84;The Movies;8.3;Nov 8, 2005 +84;Neverwinter Nights: Hordes of the Underdark;8.6;Dec 2, 2003 +84;Command & Conquer: Generals;8.3;Feb 10, 2003 +84;Sid Meier's SimGolf;8.2;Jan 23, 2002 +84;Middle-earth: Shadow of Mordor;8.0;Sep 30, 2014 +84;SpaceChem;8.4;Mar 2, 2011 +84;Downwell;6.2;Oct 15, 2015 +84;Pinball FX 2;8.0;Oct 27, 2012 +84;Devil Daggers;6.7;Feb 18, 2016 +84;PlanetSide 2;7.0;Nov 20, 2012 +84;Enter the Gungeon;7.4;Apr 5, 2016 +84;GT Legends;8.6;Jan 23, 2006 +84;Hearthstone: Goblins Vs. Gnomes;6.6;Dec 8, 2014 +84;Space Rangers 2: Rise of the Dominators;9.0;Mar 27, 2006 +84;Tales From The Borderlands: Episode 1 - Zer0 Sum;8.4;Nov 25, 2014 +84;Puzzle Quest: Challenge of the Warlords;8.3;Oct 10, 2007 +84;Heroes of Might and Magic IV;7.6;Mar 29, 2002 +84;Command & Conquer: Red Alert 2;8.9;Oct 21, 2000 +84;Shogun: Total War;8.7;Jun 13, 2000 +84;DiRT;7.2;Jun 19, 2007 +84;Darkest Dungeon;8.0;Jan 19, 2016 +84;Super Street Fighter IV: Arcade Edition;7.8;Jul 13, 2011 +84;Football Manager 2012;8.0;Oct 20, 2011 +84;Guild Wars Factions;8.5;Apr 28, 2006 +84;80 Days (2015);6.1;Sep 29, 2015 +84;Spore;5.2;Sep 7, 2008 +84;Unity of Command;7.2;Nov 15, 2011 +84;Hearthstone: The Grand Tournament;4.0;Aug 24, 2015 +84;Metro Redux;8.0;Aug 26, 2014 +84;Time Gentlemen, Please!;7.6;Jul 2, 2009 +84;Europa Universalis IV: Wealth of Nations;8.4;May 29, 2014 +84;Mass Effect 3: Citadel;7.8;Mar 5, 2013 +84;Disciples II: Dark Prophecy;8.6;Jan 22, 2002 +84;Just Cause 2;7.7;Mar 23, 2010 +84;Crysis Warhead;7.9;Sep 16, 2008 +84;Assassin's Creed IV: Black Flag;7.7;Nov 19, 2013 +84;Age of Mythology: The Titans;8.7;Sep 30, 2003 +84;SimCity 4;8.7;Jan 12, 2003 +84;Microsoft Train Simulator;8.4;May 31, 2001 +84;Rise of Nations: Rise of Legends;8.5;May 9, 2006 +84;TOCA Race Driver 3;7.8;Feb 24, 2006 +84;FTL: Faster Than Light;8.4;Sep 14, 2012 +84;SOMA;8.2;Sep 22, 2015 +84;DEFCON: Everybody Dies;8.3;Mar 26, 2007 +84;Tron 2.0;8.3;Aug 26, 2003 +84;Brothers in Arms: Earned in Blood;7.3;Oct 6, 2005 +84;Grim Fandango Remastered;8.0;Jan 27, 2015 +84;The Lord of the Rings: The Battle for Middle-Earth II;7.5;Mar 2, 2006 +84;Battlefield Vietnam;7.4;Mar 16, 2004 +84;Medieval: Total War - Viking Invasion;8.8;May 7, 2003 +84;Fallout 4;5.4;Nov 10, 2015 +84;Guild Wars Nightfall;8.7;Oct 26, 2006 +84;The Binding of Isaac;8.3;Sep 28, 2011 +84;Enemy Territory: Quake Wars;8.3;Oct 2, 2007 +84;Trine 2;8.4;Dec 7, 2011 +84;Rift;7.3;Mar 1, 2011 +84;The Wolf Among Us: Episode 5 - Cry Wolf;8.8;Jul 8, 2014 +84;Shift 2: Unleashed;6.1;Mar 29, 2011 +84;Sid Meier's Civilization IV: Warlords;8.2;Jul 24, 2006 +84;Battlefield 1942: The Road to Rome;7.9;Feb 2, 2003 +84;Poseidon;8.4;Jun 25, 2001 +84;F1 2010;6.6;Sep 22, 2010 +84;Shatter;7.4;Mar 15, 2010 +84;Darwinia;7.9;Jun 12, 2006 +84;Ultimate General: Gettysburg;8.0;Oct 16, 2014 +83;Final Fantasy XI: Treasures of Aht Urhgan;7.6;Apr 18, 2006 +83;MDK2;8.4;May 31, 2000 +83;Gunpoint;8.4;Jun 3, 2013 +83;Beyond Good & Evil;8.7;Nov 19, 2003 +83;Anno 2070;7.0;Nov 17, 2011 +83;SMITE;8.3;Mar 25, 2014 +83;Halo: Combat Evolved;7.4;Sep 30, 2003 +83;Grim Dawn;8.9;Feb 25, 2016 +83;Silent Storm;8.9;Jan 20, 2004 +83;Command & Conquer: Generals - Zero Hour;9.0;Sep 22, 2003 +83;Homeworld 2;8.3;Sep 16, 2003 +83;Galactic Civilizations;8.1;Mar 26, 2003 +83;EverQuest: The Shadows of Luclin;7.2;Dec 2, 2001 +83;Orcs Must Die!;8.1;Oct 11, 2011 +83;Life is Strange;8.6;Jan 19, 2016 +83;Fable: The Lost Chapters;8.7;Sep 20, 2005 +83;Unreal Tournament III;8.0;Nov 19, 2007 +83;The Blackwell Epiphany;7.6;Apr 24, 2014 +83;The Lord of the Rings Online: Siege of Mirkwood;7.1;Dec 1, 2009 +83;Out of the Park Baseball 10;8.3;Jun 2, 2009 +83;Tomb Raider: Anniversary;8.0;Jun 5, 2007 +83;Need for Speed: Shift;5.7;Sep 15, 2009 +83;Hearts of Iron II;8.6;Jan 4, 2005 +83;FIFA Soccer 11;7.6;Sep 28, 2010 +83;Project CARS;7.0;May 6, 2015 +83;FIFA Soccer 2003;6.8;Nov 2, 2002 +83;Icewind Dale II;8.3;Aug 26, 2002 +83;Age of Empires;8.8;Sep 30, 1997 +83;EverQuest II: Echoes of Faydwer;8.4;Nov 13, 2006 +83;EverQuest II;7.3;Nov 8, 2004 +83;Terraria;8.5;May 16, 2011 +83;Final Fantasy XIV Online: A Realm Reborn;6.7;Aug 27, 2013 +83;Card Hunter (2013);7.9;Sep 12, 2013 +83;Sam & Max: The Devil's Playhouse - Episode 2: The Tomb of Sammun-Mak;7.9;May 18, 2010 +83;This War of Mine;8.4;Nov 14, 2014 +83;Darksiders;7.7;Sep 23, 2010 +83;Tom Clancy's Rainbow Six 3: Raven Shield;8.9;Mar 19, 2003 +83;World of Outlaws: Sprint Cars;7.9;Feb 11, 2003 +83;Colin McRae Rally 2.0;8.4;Feb 14, 2001 +83;Combat Flight Simulator 2: WWII Pacific Theater;8.1;Oct 13, 2000 +83;Orcs Must Die! 2;7.9;Jul 30, 2012 +83;Prey;7.9;Jul 11, 2006 +83;Metal Gear Rising: Revengeance;7.9;Jan 9, 2014 +83;Starseed Pilgrim;6.3;Apr 16, 2013 +83;Age of Conan: Rise of the Godslayer;8.4;May 11, 2010 +83;Alan Wake;8.0;Feb 16, 2012 +83;Tiger Woods PGA Tour 2002;5.0;Feb 24, 2002 +83;Monaco: What's Yours Is Mine;7.7;Apr 24, 2013 +83;Transistor;8.3;May 20, 2014 +83;Helldivers;6.9;Dec 7, 2015 +83;Worldwide Soccer Manager 2009;8.1;Nov 18, 2008 +83;Call of Duty: World at War;7.5;Nov 10, 2008 +83;Torchlight;8.0;Jan 5, 2010 +83;Prison Architect;8.3;Oct 6, 2015 +83;Valdis Story: Abyssal City;8.1;Oct 30, 2013 +83;Crimson Skies;8.2;Sep 17, 2000 +83;RACE 07: Official WTCC Game;9.0;Oct 9, 2007 +83;SUPERHOT;7.6;Feb 25, 2016 +83;EverQuest II: Rise of Kunark;7.9;Nov 13, 2007 +83;Dark Age of Camelot: Catacombs;8.6;Dec 7, 2004 +83;Spore Creature Creator;8.1;Jun 17, 2008 +83;Colin McRae Rally 2005;7.0;Oct 28, 2004 +83;Tom Clancy's Splinter Cell: Conviction;5.2;Apr 27, 2010 +83;Tribes: Vengeance;7.6;Oct 12, 2004 +83;L.A. Noire: The Complete Edition;7.9;Nov 8, 2011 +83;GTR Evolution;8.2;Sep 2, 2008 +83;Life is Strange: Episode 5 - Polarized;8.4;Oct 20, 2015 +83;BROFORCE;8.0;Oct 15, 2015 +83;Independence War 2: Edge of Chaos;8.4;Aug 22, 2001 +83;Myst III: Exile;8.2;May 8, 2001 +83;Superbrothers: Sword & Sworcery EP;6.4;Apr 16, 2012 +83;Sid Meier's Civilization IV: Colonization;6.7;Sep 22, 2008 +83;Europa Universalis III;8.4;Jan 23, 2007 +83;F1 2011;7.2;Sep 20, 2011 +83;Prince of Persia: Warrior Within;8.4;Nov 30, 2004 +83;Danganronpa: Trigger Happy Havoc;7.6;Feb 18, 2016 +83;Counter-Strike: Global Offensive;7.8;Aug 21, 2012 +83;Outland;7.1;Sep 29, 2014 +83;MechWarrior 4: Mercenaries;8.6;Nov 7, 2002 +83;Metal Gear Solid;9.0;Sep 24, 2000 +82;Invisible, Inc.;8.0;May 12, 2015 +82;Dark Souls II: Crown of the Ivory King;7.8;Sep 29, 2014 +82;Red Faction: Guerrilla;7.5;Sep 15, 2009 +82;The Book of Unwritten Tales;8.2;Oct 28, 2011 +82;Capitalism II;9.0;Dec 16, 2001 +82;Rally Trophy;8.5;Nov 20, 2001 +82;Dawn of Discovery;8.8;Jun 17, 2009 +82;City of Villains;8.1;Oct 31, 2005 +82;Kentucky Route Zero - Act II;8.0;May 31, 2013 +82;Tom Clancy's Splinter Cell: Blacklist;7.4;Aug 20, 2013 +82;Act of War: Direct Action;8.5;Mar 15, 2005 +82;Sokobond;7.8;Aug 27, 2013 +82;Sam & Max Episode 105: Reality 2.0;8.4;Mar 29, 2007 +82;Bejeweled 3;8.0;Dec 7, 2010 +82;Dangerous Waters;8.8;Feb 22, 2005 +82;Tomb Raider: Legend;7.8;Apr 11, 2006 +82;Asheron's Call 2: Fallen Kings;8.8;Nov 20, 2002 +82;Gemini Rue;8.4;Feb 24, 2011 +82;Antichamber;8.2;Jan 31, 2013 +82;Neverwinter Nights 2;6.5;Oct 31, 2006 +82;Dragon Age: Origins - Awakening;7.7;Mar 16, 2010 +82;Door Kickers;8.2;Oct 20, 2014 +82;Hearthstone: Blackrock Mountain;6.4;Apr 2, 2015 +82;Rome: Total War Barbarian Invasion;8.4;Sep 27, 2005 +82;Hacknet;7.3;Aug 12, 2015 +82;Tales of Monkey Island Chapter 3: Lair of the Leviathan;7.8;Sep 29, 2009 +82;Neverwinter Nights 2: Mask of The Betrayer;8.8;Oct 9, 2007 +82;Sins of a Solar Empire: Rebellion;7.8;Jun 12, 2012 +82;Broken Sword: The Sleeping Dragon;7.6;Nov 17, 2003 +82;Age of Wonders: Shadow Magic;8.5;Jul 25, 2003 +82;Tom Clancy's Ghost Recon: Desert Siege;8.4;Mar 27, 2002 +82;Warlords Battlecry II;8.5;Mar 11, 2002 +82;Football Manager Live;2.9;Jan 23, 2009 +82;Marvel: Ultimate Alliance;8.3;Oct 24, 2006 +82;The Talos Principle: Road To Gehenna;7.6;Jul 23, 2015 +82;Lara Croft and the Guardian of Light;8.2;Sep 28, 2010 +82;Aquaria;8.3;Dec 7, 2007 +82;Need for Speed: Underground;8.3;Nov 17, 2003 +82;TrackMania Sunrise;8.5;May 6, 2005 +82;King's Quest Chapter 1: A Knight to Remember;7.2;Jul 28, 2015 +82;Dragon Age II;4.4;Mar 8, 2011 +82;Endless Legend;7.9;Apr 24, 2014 +82;Tom Clancy's Ghost Recon: Island Thunder;8.3;Sep 25, 2002 +82;S.T.A.L.K.E.R.: Shadow of Chernobyl;8.4;Mar 20, 2007 +82;Kero Blaster;6.9;May 11, 2014 +82;Monday Night Combat;7.3;Jan 24, 2011 +82;The Wolf Among Us: Episode 3 - A Crooked Mile;8.6;Apr 8, 2014 +82;Airborne Assault: Red Devils Over Arnhem;7.4;Jun 17, 2002 +82;Fallout Tactics: Brotherhood of Steel;7.9;Mar 14, 2001 +82;Need for Speed: Underground 2;8.5;Nov 9, 2004 +82;NHL Eastside Hockey Manager 2005;6.6;Oct 5, 2005 +82;Legend of Grimrock;8.1;Apr 11, 2012 +82;Dominions 3: The Awakening;8.1;Sep 29, 2006 +82;Bulletstorm;7.7;Feb 22, 2011 +82;Borderlands 2: Mr. Torgue's Campaign of Carnage;7.3;Nov 20, 2012 +82;Desktop Dungeons;8.2;Oct 17, 2010 +82;Fallout: New Vegas - Old World Blues;7.8;Jul 19, 2011 +82;Crusader Kings II;8.7;Feb 14, 2012 +82;MVP Baseball 2004;7.9;Mar 9, 2004 +82;Europa 1400: The Guild;8.6;Nov 18, 2002 +82;Battle Realms;8.6;Nov 7, 2001 +82;Warlords Battlecry;8.2;Jul 9, 2000 +82;Sam & Max Episode 201: Ice Station Santa;8.6;Nov 8, 2007 +82;Technobabylon;7.8;May 21, 2015 +82;World of Warcraft: Mists of Pandaria;4.8;Sep 25, 2012 +82;FIFA 15;4.2;Sep 23, 2014 +82;Recettear: An Item Shop's Tale;8.6;Sep 10, 2010 +82;ETHER One;6.9;Mar 25, 2014 +82;The Vanishing of Ethan Carter;8.1;Sep 25, 2014 +82;Flight Simulator X: Acceleration;7.3;Oct 23, 2007 +82;Blood;9.0;May 31, 1997 +82;Command & Conquer: Red Alert 3;6.8;Oct 28, 2008 +82;The Walking Dead: Episode 1 - A New Day;8.4;Apr 24, 2012 +82;Links 2003;6.8;Sep 16, 2002 +82;Earth & Beyond;7.1;Sep 2, 2002 +82;Syberia;8.5;Sep 1, 2002 +82;Virtual Pool 3;7.3;Nov 14, 2000 +82;The Sims: Livin' Large;6.6;Aug 27, 2000 +82;DCS: Black Shark;8.5;Apr 13, 2009 +82;King's Bounty: Armored Princess;8.7;Sep 10, 2010 +82;Age of Wonders III - Golden Realms;8.5;Sep 18, 2014 +82;Strong Bad's Cool Game for Attractive People Episode 5: 8-Bit Is Enough;7.5;Dec 15, 2008 +82;Prince of Persia;7.2;Dec 2, 2008 +82;Joint Operations: Typhoon Rising;8.7;Jun 15, 2004 +82;Xpand Rally;7.4;Apr 20, 2006 +82;Dark Souls II: Crown of the Sunken King;7.3;Jul 22, 2014 +82;Resident Evil HD Remaster;8.2;Jan 20, 2015 +82;Celtic Kings: Rage of War;8.5;Aug 21, 2002 +82;B-17 Flying Fortress: The Mighty 8th;7.3;Dec 13, 2000 +82;EverQuest: The Scars of Velious;7.8;Dec 4, 2000 +82;Metro: Last Light;8.6;May 14, 2013 +82;Rising Storm;8.5;May 30, 2013 +82;Lethal League;7.4;Aug 27, 2014 +82;Botanicula;8.3;Apr 19, 2012 +82;Pro Evolution Soccer 2015;5.8;Nov 13, 2014 +82;Bookworm Adventures Deluxe;7.9;Dec 20, 2006 +82;The Lord of the Rings: The Battle for Middle-Earth;8.6;Dec 6, 2004 +82;Hitman: Blood Money;8.8;May 30, 2006 +82;Need for Speed: Most Wanted;8.5;Nov 15, 2005 +82;OlliOlli2: Welcome to Olliwood;5.2;Aug 11, 2015 +82;WildStar;7.4;Jun 3, 2014 +82;Broken Age: Act 1;7.7;Jan 28, 2014 +82;Divinity II: The Dragon Knight Saga;8.2;Nov 5, 2010 +82;Out of the Park Baseball 9;7.4;Jun 1, 2008 +82;The Simpsons: Hit & Run;8.0;Nov 13, 2003 +82;America's Army;6.1;Aug 28, 2002 +82;Star Trek Bridge Commander;8.1;Feb 27, 2002 +82;The Last Express;8.9;Mar 31, 1997 +81;Quake 4;7.5;Oct 11, 2005 +81;Nidhogg;7.0;Jan 13, 2014 +81;Battlefield 4;6.0;Oct 29, 2013 +81;To the Moon;8.9;Sep 7, 2012 +81;The Sims 3: World Adventures;8.0;Nov 16, 2009 +81;Painkiller;8.0;Apr 12, 2004 +81;Airborne Assault: Highway to the Reich;6.1;Dec 10, 2003 +81;Nancy Drew: Danger on Deception Island;7.7;Oct 1, 2003 +81;Shadowrun: Hong Kong;7.7;Aug 20, 2015 +81;Supreme Commander: Forged Alliance;8.9;Nov 6, 2007 +81;Sunless Sea;7.4;Jul 1, 2014 +81;The Walking Dead: Season Two Episode 3 - In Harm's Way;8.3;May 13, 2014 +81;Marvel Heroes 2015;7.9;Jun 4, 2014 +81;Football Manager 2016;6.4;Nov 13, 2015 +81;VVVVVV;8.1;Jan 11, 2010 +81;Darksiders II;7.9;Aug 14, 2012 +81;Wolfenstein: The New Order;8.2;May 20, 2014 +81;Lone Survivor;7.2;Apr 23, 2012 +81;Alien: Isolation;8.4;Oct 6, 2014 +81;The Witcher;8.8;Oct 30, 2007 +81;Kentucky Route Zero - Act I;7.5;Jan 7, 2013 +81;Jade Empire: Special Edition;8.3;Feb 26, 2007 +81;SWAT 3: Elite Edition;8.4;Oct 6, 2000 +81;Asheron's Call;8.8;Oct 31, 1999 +81;Unravel;8.1;Feb 9, 2016 +81;Midnight Club II;8.0;Jun 30, 2003 +81;Chessmaster 10th Edition;7.4;Aug 12, 2004 +81;Age of Empires III;7.7;Oct 18, 2005 +81;Tales of Monkey Island Chapter 5: Rise of the Pirate God;8.4;Dec 8, 2009 +81;Castlevania: Lords of Shadow Ultimate Edition;7.3;Aug 27, 2013 +81;Strong Bad's Cool Game for Attractive People Episode 2: Strong Badia the Free;8.2;Sep 15, 2008 +81;The Cat Lady;8.7;Dec 4, 2013 +81;Vessel;7.9;Mar 1, 2012 +81;Metro 2033;8.1;Mar 16, 2010 +81;OutRun 2006: Coast 2 Coast;7.8;Jun 27, 2006 +81;Blur;7.3;May 25, 2010 +81;Empires: Dawn of the Modern World;8.2;Oct 21, 2003 +81;Chessmaster 9000;7.7;Aug 31, 2002 +81;Gothic;8.6;Nov 23, 2001 +81;Arcanum: Of Steamworks and Magick Obscura;8.9;Aug 22, 2001 +81;NASCAR Heat;8.6;Sep 27, 2000 +81;Company of Heroes 2: Ardennes Assault;6.1;Nov 17, 2014 +81;PlanetSide;7.3;May 20, 2003 +81;Tales From The Borderlands: Episode 3 - Catch A Ride;8.4;Jun 23, 2015 +81;The Walking Dead: Season Two Episode 2 - A House Divided;8.6;Mar 4, 2014 +81;Kingdoms of Amalur: Reckoning;6.6;Feb 7, 2012 +81;Sam & Max: The Devil's Playhouse - Episode 1: The Penal Zone;8.5;Apr 15, 2010 +81;Borderlands;7.8;Oct 26, 2009 +81;DG2: Defense Grid 2;6.7;Sep 23, 2014 +81;Napoleon: Total War;7.9;Feb 23, 2010 +81;Overlord;8.1;Jun 26, 2007 +81;Firewatch;7.2;Feb 9, 2016 +81;Victoria II: Heart of Darkness;8.7;Apr 16, 2013 +81;Waveform;7.6;Jan 25, 2013 +81;The Elder Scrolls IV: Knights of the Nine;7.5;Nov 21, 2006 +81;Red Orchestra: Ostfront 41-45;8.6;Mar 14, 2006 +81;Stronghold;8.9;Oct 21, 2001 +81;Strong Bad's Cool Game for Attractive People Episode 4: Dangeresque 3: The Criminal Projective;8.5;Nov 17, 2008 +81;Rochard;8.0;Nov 15, 2011 +81;Fallout 3: Broken Steel;7.3;May 5, 2009 +81;Tiger Woods PGA Tour 06;8.1;Sep 20, 2005 +81;RollerCoaster Tycoon 3;4.9;Oct 26, 2004 +81;Dragon's Dogma: Dark Arisen;8.3;Jan 15, 2016 +81;Guild Wars 2: Heart of Thorns;7.3;Oct 23, 2015 +81;AaaaaAAaaaAAAaaAAAAaAAAAA!!! - A Reckless Disregard for Gravity;7.2;Sep 3, 2009 +81;The Sims 2 University;7.8;Feb 28, 2005 +81;Far Cry 3: Blood Dragon;8.1;May 1, 2013 +81;Sid Meier's Civilization: Beyond Earth;5.5;Oct 24, 2014 +81;Disney's Toontown Online;8.7;Oct 6, 2005 +81;Combat Mission 3: Afrika Korps;8.4;Dec 3, 2003 +81;EverQuest: The Planes of Power;8.2;Oct 28, 2002 +81;Rails Across America;8.0;Sep 18, 2001 +81;Wasteland 2;7.3;Sep 19, 2014 +81;Jamestown: Legend of the Lost Colony;7.5;Jun 8, 2011 +81;Call of Duty: Black Ops;5.1;Nov 9, 2010 +81;Kohan II: Kings of War;7.9;Sep 20, 2004 +81;The Age of Decadence;7.9;Oct 15, 2015 +81;Samorost 3;8.3;Mar 24, 2016 +81;Order of Battle: Pacific;6.4;Apr 30, 2015 +81;Empire Earth;8.3;Nov 12, 2001 +81;Star Trek: Deep Space Nine: The Fallen;7.9;Nov 15, 2000 +81;Sam & Max Episode 101: Culture Shock;8.7;Oct 18, 2006 +81;Mirror's Edge (2008);8.1;Jan 12, 2009 +81;TrackMania 2 Canyon;7.7;Sep 14, 2011 +81;Sleeping Dogs;8.2;Aug 14, 2012 +81;Star Wars Jedi Knight: Jedi Academy;8.6;Sep 17, 2003 +81;Mortal Kombat Komplete Edition;8.7;Aug 6, 2013 +81;Shadowrun: Dragonfall;8.3;Feb 27, 2014 +81;Eets;6.4;Mar 29, 2006 +81;World of Warships;6.6;Sep 17, 2015 +81;TOCA Race Driver 2: The Ultimate Racing Simulator;8.0;Apr 15, 2004 +81;Wargame: European Escalation;8.2;Feb 22, 2012 +81;Dungeon Defenders;7.3;Oct 18, 2011 +81;Sam & Max: The Devil's Playhouse - Episode 5: The City That Dares Not Sleep;7.9;Aug 30, 2010 +81;Age of Empires III: The Asian Dynasties;8.5;Oct 23, 2007 +81;Defense Grid: The Awakening;8.8;Jul 29, 2009 +81;Codename: Panzers, Phase One;8.8;Sep 30, 2004 +81;FIFA 16;4.4;Sep 22, 2015 +81;Europa Universalis IV: Conquest of Paradise;7.7;Jan 14, 2014 +81;Ghost Master;8.0;Aug 26, 2003 +81;Divine Divinity;8.5;Sep 22, 2002 +80;The Book of Unwritten Tales 2;7.7;Feb 20, 2015 +80;Galactic Civilizations III;6.6;May 14, 2015 +80;Lovers in a Dangerous Spacetime;7.2;Sep 9, 2015 +80;Age of Conan: Hyborian Adventures;7.3;May 20, 2008 +80;Company of Heroes 2: The Western Front Armies;6.8;Jun 23, 2014 +80;Sid Meier's Civilization V: Gods & Kings;7.7;Jun 19, 2012 +80;Age of Empires III: The WarChiefs;8.1;Oct 17, 2006 +80;Metal Gear Solid V: Ground Zeroes;7.7;Dec 18, 2014 +80;Trials Fusion;6.8;Apr 16, 2014 +80;Syberia II;8.3;Mar 30, 2004 +80;Tom Clancy's Ghost Recon;8.4;Nov 13, 2001 +80;Conquest: Frontier Wars;8.3;Aug 14, 2001 +80;Gabriel Knight 3: Blood of the Sacred, Blood of the Damned;8.8;Oct 5, 1999 +80;Westerado: Double Barreled;7.4;Apr 16, 2015 +80;Anomaly: Warzone Earth;7.3;Apr 8, 2011 +80;Volume;7.2;Aug 18, 2015 +80;GRID 2;5.7;May 27, 2013 +80;The Banner Saga;7.9;Jan 14, 2014 +80;Sam & Max Episode 202: Moai Better Blues;7.7;Jan 10, 2008 +80;Age of Wonders III - Eternal Lords;8.4;Apr 14, 2015 +80;Pro Evolution Soccer 2013;6.8;Sep 25, 2012 +80;Osmos;7.5;Aug 18, 2009 +80;Dungeon Siege II;7.9;Aug 16, 2005 +80;Dead Island;6.8;Sep 6, 2011 +80;Sam & Max Episode 104: Abe Lincoln Must Die!;7.8;Feb 22, 2007 +80;Deus Ex: Invisible War;6.3;Dec 2, 2003 +80;The Sims: Makin' Magic;8.6;Oct 28, 2003 +80;Tom Clancy's Splinter Cell: Double Agent;5.7;Nov 7, 2006 +80;Medal of Honor: Pacific Assault;7.4;Nov 4, 2004 +80;Assassin's Creed: Revelations;7.4;Nov 29, 2011 +80;Grandia II Anniversary Edition;7.6;Aug 24, 2015 +80;Assassin's Creed III;6.2;Nov 20, 2012 +80;Madden NFL 07;7.3;Aug 22, 2006 +80;Outlast;8.4;Sep 4, 2013 +80;The Chronicles of Riddick: Assault on Dark Athena;8.0;Apr 7, 2009 +80;Hearts of Iron II: Doomsday;8.8;Apr 7, 2006 +80;Dishonored: The Brigmore Witches;8.5;Aug 13, 2013 +80;Codename: Panzers, Phase Two;8.0;Jul 25, 2005 +80;Full Spectrum Warrior;7.0;Sep 21, 2004 +80;AI War: Fleet Command;8.4;May 14, 2009 +80;Freedom Fighters;8.3;Oct 1, 2003 +80;NBA Live 2003;8.3;Nov 14, 2002 +80;The Elder Scrolls III: Tribunal;8.2;Nov 6, 2002 +80;Elite: Dangerous;6.4;Dec 16, 2014 +80;Pure;6.9;Sep 16, 2008 +80;Goodbye Deponia;8.1;Oct 17, 2013 +80;SWAT 4: The Stetchkov Syndicate;8.3;Feb 28, 2006 +80;Dropsy;7.3;Sep 10, 2015 +80;Company of Heroes 2: The British Forces;5.9;Sep 3, 2015 +80;Ground Control II: Operation Exodus;8.8;Jun 23, 2004 +80;NBA Live 2004;9.0;Nov 11, 2003 +80;Brutal Legend;7.8;Feb 26, 2013 +80;Tomb Raider: Underworld;7.6;Nov 18, 2008 +80;Oxenfree;7.7;Jan 15, 2016 +80;Titan Quest: Immortal Throne;8.7;Mar 5, 2007 +80;La-Mulana (Remake);7.1;Jul 13, 2012 +80;X-Men Legends II: Rise of Apocalypse;8.4;Sep 20, 2005 +80;SpellForce 2: Shadow Wars;7.6;May 5, 2006 +80;Fritz 8 Deluxe;7.8;Dec 1, 2004 +80;Trine;8.2;Sep 11, 2009 +80;Dishonored: The Knife of Dunwall;8.1;Apr 16, 2013 +80;Company of Heroes 2;2.0;Jun 25, 2013 +80;Natural Selection 2;8.4;Oct 30, 2012 +80;Read Only Memories;7.2;Oct 5, 2015 +80;The Sims 3: Into the Future;5.4;Oct 22, 2013 +80;Borderlands 2: Captain Scarlett and Her Pirate's Booty;7.4;Oct 16, 2012 +80;FATE;8.3;Sep 19, 2006 +80;2002 FIFA World Cup;7.9;Apr 30, 2002 +80;Asheron's Call Dark Majesty;8.1;Nov 4, 2001 +80;The Bug Butcher;8.2;Jan 19, 2016 +80;Dragonshard;7.4;Oct 2, 2005 +80;Icewind Dale: Enhanced Edition;7.6;Oct 30, 2014 +80;The Magic Circle;7.3;Jul 9, 2015 +80;Far Cry 4;6.6;Nov 18, 2014 +80;Super Time Force Ultra;6.6;Aug 25, 2014 +80;Day of Defeat: Source;9.1;Feb 7, 2006 +80;Battlefield 2142;6.8;Oct 17, 2006 +80;World of Tanks;3.8;Sep 6, 2011 +80;Vampire: The Masquerade - Bloodlines;9.0;Nov 16, 2004 +80;Dark Souls II: Scholar of the First Sin;7.4;Apr 1, 2015 +80;Warhammer 40,000: Dawn of War II - Retribution;7.8;Mar 1, 2011 +80;Panzer Corps;7.5;Jul 11, 2011 +80;Men of War;8.1;Mar 16, 2009 +80;Fallen Enchantress: Legendary Heroes;7.7;May 22, 2013 +80;The Walking Dead: Episode 4 - Around Every Corner;8.5;Oct 10, 2012 +80;Tales of Monkey Island Chapter 4: The Trial and Execution of Guybrush Threepwood;8.4;Oct 30, 2009 +80;Penny Arcade Adventures: Episode Two;7.7;Nov 7, 2008 +80;Time Commando;8.9;Jul 31, 1996 +80;Sins of a Solar Empire: Entrenchment;8.1;Feb 25, 2009 +80;F1 2012;6.9;Sep 18, 2012 +80;Luftrausers;6.8;Mar 18, 2014 +80;Naruto Shippuden: Ultimate Ninja Storm 3 Full Burst;7.9;Oct 24, 2013 +80;Stealth Bastard Deluxe;8.3;Nov 28, 2012 +80;Tom Clancy's Ghost Recon Advanced Warfighter;7.7;May 3, 2006 +80;LEGO Batman: The Videogame;7.9;Sep 23, 2008 +80;Stacking;7.9;Mar 6, 2012 +80;Age of Wonders III;7.8;Mar 31, 2014 +80;Life is Strange: Episode 3 - Chaos Theory;9.0;May 19, 2015 +80;The Legend of Heroes: Trails in the Sky SC;8.4;Oct 29, 2015 +80;Proteus;5.6;Jan 30, 2013 +80;Robin Hood: The Legend of Sherwood;8.3;Nov 14, 2002 +80;Soldier of Fortune II: Double Helix;7.3;May 20, 2002 +80;RollerCoaster Tycoon: Loopy Landscapes;9.0;Sep 30, 2000 +80;Toki Tori;7.9;Jan 28, 2010 +80;RoboBlitz;8.3;Nov 7, 2006 +80;Wargame: AirLand Battle;8.1;May 29, 2013 +80;Football Manager 2015;6.0;Nov 7, 2014 +80;The Suffering;8.2;Jun 8, 2004 +80;Gish;7.2;Sep 17, 2004 +80;Axiom Verge;8.2;May 14, 2015 +80;Driver: San Francisco;7.0;Sep 27, 2011 +80;The Corporate Machine;7.5;Jul 14, 2001 +80;Dungeons & Dragons: Chronicles of Mystara;6.7;Jun 18, 2013 +80;Disciples II: Rise of the Elves;8.1;Nov 25, 2003 +80;MechCommander 2;8.3;Jul 18, 2001 +80;Waterloo: Napoleon's Last Battle;7.5;Mar 25, 2001 +80;Chessmaster 8000;6.4;Nov 14, 2000 +80;Circle of Blood;8.6;Sep 30, 1996 +80;BioShock Infinite: Burial at Sea - Episode Two;8.5;Mar 25, 2014 +80;S.T.A.L.K.E.R.: Call of Pripyat;8.7;Feb 2, 2010 +80;The Walking Dead: Season Two - A Telltale Games Series;8.3;Dec 17, 2013 +80;FLY'N;8.2;Nov 9, 2012 +80;Total War: Attila;7.3;Feb 17, 2015 +80;The Wolf Among Us;8.8;Oct 11, 2013 +80;Nancy Drew: Secret of the Old Clock;8.1;Jul 26, 2005 +80;ArcheAge;3.6;Sep 16, 2014 +80;CAPSIZED;7.1;Apr 29, 2011 +80;Microsoft Flight Simulator X;7.6;Oct 17, 2006 +80;Myst V: End of Ages;7.8;Sep 19, 2005 +80;Railroad Tycoon 3;7.7;Oct 23, 2003 +80;Hostile Waters: Antaeus Rising;8.1;Jun 13, 2001 +79;Dustforce;7.9;Jan 17, 2012 +79;Empire Earth II;7.0;Apr 26, 2005 +79;Fallout 3: Point Lookout;7.8;Jun 23, 2009 +79;Test Drive Unlimited;8.1;Mar 20, 2007 +79;Dying Light: The Following;8.3;Feb 9, 2016 +79;The Path;7.0;Mar 18, 2009 +79;Dungeon of the Endless;8.0;Oct 27, 2014 +79;Revenge of the Titans;7.6;May 24, 2010 +79;Bookworm Adventures: Volume 2;7.6;Jul 30, 2009 +79;F1 2001;7.5;Oct 14, 2001 +79;Brothers in Arms: Hell's Highway;7.9;Oct 7, 2008 +79;Star Wars: Empire at War;8.4;Feb 15, 2006 +79;Dariusburst: Chronicle Saviours;8.3;Dec 3, 2015 +79;Europa Universalis: Rome - Vae Victis;8.6;Nov 19, 2008 +79;Silent Hunter: Wolves of the Pacific;6.5;Mar 20, 2007 +79;Pillars of Eternity: The White March - Part 2;6.7;Feb 16, 2016 +79;1701 A.D.;8.3;Nov 6, 2006 +79;Stasis;7.6;Aug 31, 2015 +79;Pro Evolution Soccer 2009;7.4;Nov 12, 2008 +79;Return to Mysterious Island;8.5;Nov 2, 2004 +79;Jotun;7.0;Sep 29, 2015 +79;Else Heart.Break();7.5;Sep 24, 2015 +79;Kohan: Ahriman's Gift;8.7;Nov 5, 2001 +79;Emperor: Battle for Dune;8.3;Jun 12, 2001 +79;Trackmania Turbo;6.9;Mar 24, 2016 +79;Cart Life;5.9;Jul 29, 2010 +79;Sword of the Stars: Born of Blood;8.1;Jun 5, 2007 +79;Worms Reloaded;6.7;Aug 26, 2010 +79;Warhammer: End Times - Vermintide;7.9;Oct 23, 2015 +79;Euro Truck Simulator 2;8.7;Jan 16, 2013 +79;Tropico 3;8.2;Oct 20, 2009 +79;Cities: Skylines - After Dark;7.9;Sep 24, 2015 +79;Runaway: A Twist of Fate;8.5;Apr 21, 2011 +79;Tales of Monkey Island Chapter 1: Launch of the Screaming Narwhal;8.2;Jul 7, 2009 +79;Bloodline Champions;8.0;Jan 13, 2011 +79;The Sims: Superstar;8.2;May 12, 2003 +79;NBA Live 2005;8.5;Oct 26, 2004 +79;Valiant Hearts: The Great War;8.6;Jun 25, 2014 +79;Payday 2;3.4;Aug 13, 2013 +79;Dungeons of Dredmor;7.8;Jul 13, 2011 +79;Geometry Wars 3: Dimensions;6.2;Nov 25, 2014 +79;Assassin's Creed: Director's Cut Edition;7.5;Apr 8, 2008 +79;Puzzle Dimension;7.6;Jun 21, 2010 +79;Split/Second;8.2;May 18, 2010 +79;Sang-Froid: Tales of Werewolves;7.9;Apr 5, 2013 +79;The Incredible Adventures of Van Helsing: Final Cut;7.2;Oct 7, 2015 +79;Hitman: Absolution;7.0;Nov 19, 2012 +79;Call of Juarez: Gunslinger;8.2;May 22, 2013 +79;Rome: Total War Alexander;7.6;Jun 19, 2006 +79;Strong Bad's Cool Game for Attractive People Episode 3: Baddest of the Bands;8.1;Oct 27, 2008 +79;Sam & Max Episode 102: Situation: Comedy;7.9;Dec 20, 2006 +79;Tropico 3: Absolute Power;7.7;May 17, 2010 +79;Sam & Max Episode 106: Bright Side of the Moon;7.3;Apr 26, 2007 +79;Day of Defeat;9.3;May 6, 2003 +79;Space Empires: IV;8.3;Nov 6, 2000 +79;Resident Evil 4: Ultimate HD Edition;7.7;Feb 27, 2014 +79;Sam & Max Episode 203: Night of the Raving Dead;8.2;Feb 12, 2008 +79;FlatOut: Ultimate Carnage;7.6;Sep 2, 2008 +79;Guitar Hero III: Legends of Rock;7.2;Nov 13, 2007 +79;Sid Meier's Civilization: Beyond Earth - Rising Tide;5.9;Oct 9, 2015 +79;Memoria;8.5;Aug 29, 2013 +79;The Last Door;7.8;May 20, 2014 +79;Shadowgrounds Survivor;7.8;Dec 6, 2007 +79;Gothic II;8.8;Oct 28, 2003 +79;Port Royale;8.2;Jun 4, 2003 +79;Deadly Dozen: Pacific Theater;7.9;Oct 31, 2002 +79;Shattered Galaxy;8.3;Aug 21, 2001 +79;Close Combat: Invasion: Normandy;8.2;Oct 10, 2000 +79;King's Bounty: The Legend;8.6;Sep 23, 2008 +79;Rage;5.1;Oct 4, 2011 +79;The Misadventures of P.B. Winterbottom;8.3;Apr 20, 2010 +79;Uru: Ages Beyond Myst;7.4;Nov 11, 2003 +79;Guild Wars: Eye of the North;8.6;Aug 28, 2007 +79;Tales From The Borderlands: Episode 4 - Escape Plan Bravo;8.4;Aug 18, 2015 +79;EverQuest: Lost Dungeons of Norrath;7.0;Sep 8, 2003 +79;Battlefield 1942: Secret Weapons of WWII;8.5;Sep 4, 2003 +79;The Sims: Unleashed;8.0;Sep 23, 2002 +79;Race the Sun;7.5;Aug 19, 2013 +79;The Sims 3: Pets;6.1;Oct 18, 2011 +79;Prototype;7.9;Jun 10, 2009 +79;Stick it to the Man!;7.2;Dec 13, 2013 +79;Street Fighter X Tekken;6.4;May 11, 2012 +79;Frozen Cortex;6.5;Feb 19, 2015 +79;Free Realms;6.4;Apr 29, 2009 +79;Homeworld: Deserts of Kharak;8.0;Jan 20, 2016 +79;Don't Starve;8.3;Apr 23, 2013 +79;Assault Android Cactus;7.0;Sep 23, 2015 +79;Trainz;7.2;Feb 10, 2002 +79;King Arthur: The Role-Playing Wargame;7.9;Nov 24, 2009 +79;Chivalry: Medieval Warfare;7.8;Oct 16, 2012 +79;Overlord II;8.1;Jun 23, 2009 +79;F.E.A.R. 2: Project Origin;7.8;Feb 10, 2009 +79;Tom Clancy's Rainbow Six Siege;6.9;Dec 1, 2015 +79;The Settlers 7: Paths to a Kingdom;5.2;Mar 23, 2010 +79;RollerCoaster Tycoon 3: Soaked!;2.9;Jun 23, 2005 +79;Dark Souls II: Crown of the Old Iron King;7.6;Aug 26, 2014 +79;TrackMania 2 Valley;8.3;Jul 4, 2013 +79;State of Decay;6.8;Nov 5, 2013 +79;LEGO Harry Potter: Years 1-4;7.8;Jun 29, 2010 +79;Rift: Storm Legion;7.8;Nov 13, 2012 +79;Crayon Physics Deluxe;7.6;Jan 7, 2009 +79;Nancy Drew: Legend of the Crystal Skull;8.5;Oct 8, 2007 +79;EverQuest II: Desert of Flames;7.8;Sep 12, 2005 +79;SimCity 4: Rush Hour;8.6;Sep 22, 2003 +79;Uncommon Valor: Campaign for the South Pacific;7.6;Dec 2, 2002 +79;Global Operations;8.3;Mar 25, 2002 +78;Apotheon;7.8;Feb 3, 2015 +78;Need for Speed: Most Wanted - A Criterion Game;4.4;Oct 30, 2012 +78;Star Wars: Battlefront II;8.8;Oct 31, 2005 +78;The Walking Dead: Season Two Episode 1 - All That Remains;8.5;Dec 17, 2013 +78;The Journey Down: Chapter Two;7.1;Aug 25, 2014 +78;Star Trek: Elite Force II;7.6;Jun 25, 2003 +78;Zuma's Revenge!;7.9;Sep 15, 2009 +78;Baldur's Gate: Enhanced Edition;7.0;Nov 28, 2012 +78;Doom 3: Resurrection of Evil;6.0;Apr 4, 2005 +78;LEGO Indiana Jones: The Original Adventures;7.7;Jun 3, 2008 +78;NASCAR Thunder 2004;7.5;Sep 16, 2003 +78;Transformers: Fall of Cybertron;7.8;Aug 21, 2012 +78;FIFA Soccer 06;6.7;Oct 4, 2005 +78;DeadCore;6.8;Oct 17, 2014 +78;The Walking Dead: Season Two Episode 5 - No Going Back;8.5;Aug 26, 2014 \ No newline at end of file diff --git a/Streams_005/readme.md b/Streams_005/readme.md new file mode 100644 index 0000000..a993ed6 --- /dev/null +++ b/Streams_005/readme.md @@ -0,0 +1,45 @@ +# Streams mit interner Iteration +## Lernziel + + + +Einen Stream mit einer internen Iteration verwenden. Die Iteration sowohl mit einem Lambda, als auch mit einer Methodenreferenz durchführen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.streams.interne_iteration](../sources/src/main/java/pr2/streams/interne_iteration/). + +In dieser (und den folgenden Aufgaben) werden Sie Daten aus der Spieldatenbank von [Metacritic](http://www.metacritic.com) analysieren. Hierbei wurden die 994 Spiele mit der besten Bewertung ausgewählt. Für jedes Spiel sind angegeben: + + * Name des Spiels + * Metacritic-Score (0-100) + * Benutzerbewertung (0-100). Normalerweise werden die Benutzerbewertungen bei Metacritic von 0-10 mit einer Nachkommastelle angegeben. Für die einfachere Bearbeitung ist dies für Sie aber bereits in den Bereich 0-100 umgerechnet worden. + * Erscheinungsjahr des Spieles. + +Die Verwaltung der Daten wurde Ihnen bereits abgenommen und wird von der Klasse `GameDatabase` durchgeführt. Ein einzelnes Spiel wird durch Objekte des Typs `ComputerGame` repräsentiert. + +Schauen Sie sich die Klassen `ComputerGame` und `GameDatabase` an und versuchen Sie deren Funktionsweise zu verstehen. + +Erweitern Sie nun die `main`-Methode von `ListGames` so, dass der Inhalt der Spieldatenbank ausgegeben wird, und zwar wie folgt: + + 1. Alle Spiele mithilfe einer internen Iteration und eines Lambda-Ausdrucks. + 2. Alle Spiele mithilfe einer internen Iteration und einer Methodenreferenz. + 3. Spiele aus dem Jahr 2012 mithilfe einer internen Iteration und eines Lambda-Ausdrucks. + +Lassen Sie Ihr Programm laufen und überprüfen Sie, ob die richtigen Informationen ausgegeben werden. + +Die Datei mit den Spielen finden Sie unter [games.txt](../sources/src/main/resources/pr2/streams/interne_iteration/games.txt). + + + \ No newline at end of file diff --git a/Streams_006/games.txt b/Streams_006/games.txt new file mode 100644 index 0000000..3390355 --- /dev/null +++ b/Streams_006/games.txt @@ -0,0 +1,994 @@ +96;Half-Life 2;9.2;Nov 16, 2004 +96;Grand Theft Auto V;7.8;Apr 14, 2015 +96;The Orange Box;9.3;Oct 10, 2007 +96;Half-Life;9.1;Oct 31, 1998 +96;BioShock;8.4;Aug 21, 2007 +95;Baldur's Gate II: Shadows of Amn;9.2;Sep 24, 2000 +95;Portal 2;8.8;Apr 19, 2011 +94;The Elder Scrolls V: Skyrim;8.1;Nov 11, 2011 +94;Mass Effect 2;8.7;Jan 26, 2010 +94;Grand Theft Auto: Vice City;8.8;May 12, 2003 +94;Civilization II;9.0;Feb 29, 1996 +94;Quake;8.8;Jun 22, 1996 +94;BioShock Infinite;8.5;Mar 26, 2013 +94;The Elder Scrolls IV: Oblivion;8.0;Mar 20, 2006 +94;Grim Fandango;9.1;Sep 30, 1998 +94;Diablo;8.7;Nov 30, 1996 +94;Sid Meier's Civilization IV;8.2;Oct 25, 2005 +93;The Witcher 3: Wild Hunt;9.1;May 19, 2015 +93;Company of Heroes;8.8;Sep 13, 2006 +93;Unreal Tournament 2004;8.9;Mar 16, 2004 +93;Starcraft II: Wings of Liberty;8.2;Jul 27, 2010 +93;Minecraft;7.4;May 10, 2009 +93;Grand Theft Auto III;8.4;May 20, 2002 +93;Homeworld;8.9;Aug 31, 1999 +93;Star Wars: Knights of the Old Republic;9.0;Nov 18, 2003 +93;World of Warcraft;7.2;Nov 23, 2004 +93;Grand Theft Auto: San Andreas;8.8;Jun 7, 2005 +92;Call of Duty 4: Modern Warfare;8.5;Nov 5, 2007 +92;Warcraft III: Reign of Chaos;9.1;Jul 3, 2002 +92;The Sims;7.9;Jan 31, 2000 +92;Sid Meier's Gettysburg!;7.7;Sep 30, 1997 +92;World Soccer Winning Eleven 7 International;7.9;Apr 9, 2004 +92;Team Fortress 2;9.2;Apr 8, 2008 +92;System Shock 2;9.1;Aug 11, 1999 +92;Tom Clancy's Splinter Cell: Chaos Theory;8.8;Mar 28, 2005 +92;Undertale;8.2;Sep 15, 2015 +92;Rome: Total War;9.1;Sep 22, 2004 +92;Thief: The Dark Project;9.1;Nov 30, 1998 +92;Age of Empires II: The Age of Kings;9.0;Sep 30, 1999 +92;Unreal Tournament (1999);9.1;Nov 30, 1999 +92;Sid Meier's Alpha Centauri;9.1;Feb 12, 1999 +92;Galactic Civilizations II: Twilight of the Arnor;8.4;Apr 30, 2008 +92;Tiger Woods PGA Tour 2003;6.0;Oct 31, 2002 +91;Dishonored;8.4;Oct 9, 2012 +91;Medal of Honor: Allied Assault;8.6;Jan 20, 2002 +91;Myth: The Fallen Lords;8.8;Oct 31, 1997 +91;World of Warcraft: Wrath of the Lich King;7.4;Nov 13, 2008 +91;F1 Challenge '99-'02;8.3;Jun 24, 2003 +91;Baldur's Gate;9.0;Nov 30, 1998 +91;IL-2 Sturmovik;8.7;Nov 18, 2001 +91;FreeSpace 2;8.8;Sep 30, 1999 +91;Metal Gear Solid V: The Phantom Pain;7.7;Sep 1, 2015 +91;Tom Clancy's Splinter Cell;8.6;Feb 19, 2003 +91;Crysis;8.0;Nov 13, 2007 +91;World of Warcraft: The Burning Crusade;7.9;Jan 16, 2007 +91;Tiger Woods PGA Tour 2005;4.6;Sep 20, 2004 +91;The Longest Journey;8.9;Nov 16, 2000 +91;Tony Hawk's Pro Skater 2;8.5;Oct 31, 2000 +91;Star Wars Jedi Knight: Dark Forces II;8.5;Sep 30, 1997 +91;Batman: Arkham Asylum;8.7;Sep 15, 2009 +91;Galactic Civilizations II: Dark Avatar;8.2;Feb 14, 2007 +91;The Operative: No One Lives Forever;8.9;Nov 9, 2000 +91;Battlefield 2;8.4;Jun 21, 2005 +91;Street Fighter IV;8.0;Jul 1, 2009 +91;Fallout 3;7.9;Oct 28, 2008 +91;Batman: Arkham City;8.6;Nov 22, 2011 +91;Fez;6.5;May 1, 2013 +91;Planescape: Torment;9.3;Nov 30, 1999 +91;Neverwinter Nights;8.1;Jun 16, 2002 +91;No One Lives Forever 2: A Spy in H.A.R.M.'s Way;8.7;Sep 30, 2002 +91;Dragon Age: Origins;8.6;Nov 3, 2009 +91;Mark of the Ninja;8.0;Oct 16, 2012 +91;Dark Souls II;7.1;Apr 25, 2014 +91;Call of Duty;8.5;Oct 29, 2003 +91;Madden NFL 2004;8.2;Aug 12, 2003 +90;The Sims 2;8.8;Sep 14, 2004 +90;World of Warcraft: Cataclysm;5.5;Dec 7, 2010 +90;World of Goo;8.5;Oct 21, 2008 +90;Spelunky;7.2;Aug 8, 2013 +90;Black & White;7.6;Mar 26, 2001 +90;Portal;9.3;Apr 8, 2008 +90;NHL 2001;6.9;Sep 28, 2000 +90;Tony Hawk's Pro Skater 3;8.6;Mar 28, 2002 +90;Deus Ex;9.3;Jun 26, 2000 +90;Half-Life 2: Episode Two;9.2;Oct 10, 2007 +90;Braid;8.6;Jan 26, 2010 +90;The Chronicles of Riddick: Escape From Butcher Bay - Developer's Cut;8.7;Dec 8, 2004 +90;Sid Meier's Civilization III;8.4;Oct 30, 2001 +90;Silent Hunter III;7.8;Mar 15, 2005 +90;Sid Meier's Civilization V;7.8;Sep 21, 2010 +90;Falcon 4.0: Allied Force;8.6;Jun 28, 2005 +90;Deus Ex: Human Revolution;8.5;Aug 23, 2011 +90;Dark Souls III;8.2;Apr 12, 2016 +90;Flight Simulator 2002;8.4;Oct 19, 2001 +90;Brothers: A Tale of Two Sons;8.5;Sep 3, 2013 +90;Dota 2;6.2;Jul 9, 2013 +90;Guild Wars 2;7.9;Aug 28, 2012 +90;Freedom Force;8.0;Mar 24, 2002 +90;GTR 2;8.7;Sep 29, 2006 +90;Grand Theft Auto IV;6.5;Dec 2, 2008 +90;Total War: Shogun 2;8.3;Mar 15, 2011 +90;Empire: Total War;6.9;Mar 3, 2009 +90;Command & Conquer: Red Alert;8.9;Oct 31, 1996 +89;Star Wars Jedi Knight II: Jedi Outcast;8.6;Mar 26, 2002 +89;The Walking Dead: A Telltale Games Series;8.7;Dec 11, 2012 +89;Age of Mythology;8.9;Nov 1, 2002 +89;Sacrifice;8.8;Nov 5, 2000 +89;The Witcher 3: Wild Hunt - Hearts of Stone;8.4;Oct 13, 2015 +89;Pillars of Eternity;8.3;Mar 26, 2015 +89;The Elder Scrolls III: Morrowind;9.0;May 1, 2002 +89;Rocksmith 2014 Edition;7.9;Oct 22, 2013 +89;Fallout;8.9;Sep 30, 1997 +89;World Soccer Winning Eleven 9;8.4;Apr 28, 2006 +89;Worldwide Soccer Manager 2005;8.7;Dec 7, 2004 +89;Left 4 Dead;9.2;Nov 18, 2008 +89;Left 4 Dead 2;8.5;Nov 17, 2009 +89;NASCAR Racing 2002 Season;5.8;Feb 14, 2002 +89;Mass Effect;8.6;May 28, 2008 +89;Combat Mission: Barbarossa to Berlin;8.3;Oct 29, 2002 +89;Homeworld: Cataclysm;8.9;Sep 7, 2000 +89;The Walking Dead: Episode 5 - No Time Left;8.9;Nov 21, 2012 +89;Guild Wars;8.4;Apr 26, 2005 +89;Borderlands 2;8.2;Sep 18, 2012 +89;Max Payne;9.1;Jul 23, 2001 +89;Out of the Park Baseball 15;7.2;Apr 21, 2014 +89;World in Conflict;8.1;Sep 18, 2007 +89;NASCAR Racing 4;8.2;Feb 6, 2001 +89;Duke Nukem 3D;8.8;Jan 31, 1996 +89;Far Cry;8.0;Mar 23, 2004 +89;FIFA Soccer 12;7.1;Sep 27, 2011 +89;XCOM: Enemy Unknown;8.2;Oct 9, 2012 +89;Mass Effect 3;5.4;Mar 6, 2012 +89;Rise of Nations;9.0;May 20, 2003 +89;NASCAR Racing 2003 Season;8.6;Feb 14, 2003 +89;Descent 3;8.3;Jun 14, 2000 +89;The Curse of Monkey Island;9.1;Oct 31, 1997 +89;Battlefield 3;7.5;Oct 25, 2011 +89;Battlefield 1942;8.6;Sep 10, 2002 +89;Madden NFL 2003;8.4;Aug 12, 2002 +89;DiRT 2;8.3;Dec 10, 2009 +89;Stardew Valley;8.5;Feb 26, 2016 +89;Prince of Persia: The Sands of Time;8.6;Nov 30, 2003 +89;Railroad Tycoon II;8.4;Oct 31, 1998 +88;Microsoft Flight Simulator 2004: A Century of Flight;8.2;Jul 29, 2003 +88;Medieval: Total War;8.8;Aug 19, 2002 +88;Mafia;9.1;Aug 27, 2002 +88;LIMBO;8.1;Aug 2, 2011 +88;Nuclear Throne;7.4;Dec 5, 2015 +88;Crusader Kings II: The Old Gods;8.8;May 28, 2013 +88;Assassin's Creed: Brotherhood;8.2;Mar 22, 2011 +88;Superbike 2001;6.5;Oct 9, 2000 +88;F.E.A.R.;8.3;Oct 17, 2005 +88;Kerbal Space Program;8.1;Apr 27, 2015 +88;Tribes 2;8.5;Mar 28, 2001 +88;Age of Empires II: The Conquerors Expansion;9.0;Aug 24, 2000 +88;Tiger Woods PGA Tour 2004;8.8;Sep 22, 2003 +88;Warcraft III: The Frozen Throne;9.0;Jul 1, 2003 +88;Starcraft;9.1;Apr 1, 1998 +88;Far Cry 3;8.2;Dec 4, 2012 +88;XCOM 2;7.0;Feb 5, 2016 +88;World Soccer Winning Eleven 8 International;8.5;Feb 16, 2005 +88;Torchlight II;8.6;Sep 20, 2012 +88;Myth II: Soulblighter;9.0;Nov 30, 1998 +88;Return to Castle Wolfenstein;8.7;Nov 19, 2001 +88;Shogo: Mobile Armor Division;8.9;Sep 30, 1998 +88;Thirty Flights of Loving;5.0;Aug 20, 2012 +88;Hearthstone: Heroes of Warcraft;6.3;Mar 11, 2014 +88;Medieval II: Total War;8.9;Nov 13, 2006 +88;F1 2002;7.6;Jun 13, 2002 +88;The Stanley Parable;8.0;Oct 17, 2013 +88;BioShock 2;8.0;Feb 9, 2010 +88;Counter-Strike: Source;8.9;Sep 26, 2005 +88;Starcraft II: Legacy of the Void;8.3;Nov 10, 2015 +88;Diablo III;4.0;May 15, 2012 +88;Rise of Nations: Thrones & Patriots;8.8;Apr 27, 2004 +88;Sid Meier's Pirates!;8.3;Nov 22, 2004 +88;EVE Online: Special Edition;7.8;Mar 10, 2009 +88;Guacamelee! Gold Edition;7.3;Aug 8, 2013 +88;Armadillo Run;8.2;Apr 22, 2006 +88;Dark Age of Camelot;8.9;Sep 1, 2001 +88;Baldur's Gate II: Throne of Bhaal;8.9;Jun 21, 2001 +88;Counter-Strike;9.3;Nov 8, 2000 +88;Tony Hawk's Pro Skater 4;8.4;Aug 27, 2003 +88;Ori and the Blind Forest;8.7;Mar 11, 2015 +88;Diablo II;8.8;Jun 29, 2000 +88;The Witcher 2: Assassins of Kings;8.5;May 17, 2011 +87;Plants vs. Zombies;8.9;Aug 18, 2009 +87;Doom 3;7.5;Aug 3, 2004 +87;Super Meat Boy;8.3;Apr 5, 2011 +87;Football Manager 2010;9.1;Nov 3, 2009 +87;Oddworld: Abe's Oddysee - New 'n' Tasty;7.8;Feb 25, 2015 +87;Tom Clancy's Splinter Cell: Pandora Tomorrow;8.0;Mar 23, 2004 +87;Europa Universalis II;8.8;Nov 12, 2001 +87;Burnout Paradise: The Ultimate Box;7.5;Feb 5, 2009 +87;Battlefield: Bad Company 2;8.3;Mar 2, 2010 +87;GRID;7.9;Jun 3, 2008 +87;Crypt of the NecroDancer;7.7;Apr 23, 2015 +87;Sins of a Solar Empire;8.2;Feb 4, 2008 +87;MechWarrior 4: Vengeance;8.2;Nov 23, 2000 +87;Thief II: The Metal Age;9.1;Feb 29, 2000 +87;Diablo II: Lord of Destruction;9.1;Jun 27, 2001 +87;Monkey Island 2 Special Edition: LeChuck's Revenge;9.0;Jul 7, 2010 +87;Half-Life 2: Episode One;8.6;Jun 1, 2006 +87;The Swapper;8.7;May 30, 2013 +87;Hitman 2: Silent Assassin;8.2;Oct 1, 2002 +87;Year Walk;7.0;Mar 6, 2014 +87;Max Payne 3;7.6;Jun 1, 2012 +87;TowerFall Ascension;6.6;Mar 11, 2014 +87;Battlefield 3: Armored Kill;7.0;Sep 11, 2012 +87;NHL 2002;8.7;Sep 17, 2001 +87;Icewind Dale;8.3;Jun 29, 2000 +87;The Witness;6.6;Jan 26, 2016 +87;Brothers in Arms: Road to Hill 30;7.1;Mar 15, 2005 +87;Kohan: Immortal Sovereigns;8.6;Mar 14, 2001 +87;Day of the Tentacle Remastered;7.9;Mar 21, 2016 +87;Dead Space 2;8.3;Jan 25, 2011 +87;Diablo III: Reaper of Souls;6.6;Mar 25, 2014 +87;Shogun: Total War Warlord Edition;8.7;Aug 13, 2001 +87;Serious Sam: The First Encounter;8.4;Mar 21, 2001 +87;Grand Prix 3;8.3;Aug 24, 2000 +87;Call of Duty: United Offensive;8.3;Sep 14, 2004 +87;Divinity: Original Sin;8.7;Jan 17, 2014 +87;Company of Heroes: Opposing Fronts;8.6;Sep 24, 2007 +87;Psychonauts;8.9;Apr 19, 2005 +87;Gears of War;7.8;Nov 6, 2007 +87;Out of the Park Baseball 4;7.8;Feb 28, 2002 +87;Europa Universalis IV;8.7;Aug 13, 2013 +87;NHL 2004;8.2;Sep 22, 2003 +87;Zeus: Master of Olympus;9.0;Oct 22, 2000 +87;World of Warcraft: Warlords of Draenor;6.0;Nov 13, 2014 +87;Warhammer 40,000: Dawn of War - Dark Crusade;8.9;Oct 9, 2006 +87;Commandos 2: Men of Courage;8.8;Sep 20, 2001 +86;Tales From The Borderlands: Episode 5 - The Vault of the Traveler;8.7;Oct 20, 2015 +86;Bastion;8.6;Aug 16, 2011 +86;Gone Home;5.4;Aug 15, 2013 +86;Pac-Man Championship Edition DX +;7.3;Sep 24, 2013 +86;Supreme Commander;8.3;Feb 20, 2007 +86;Total War: Shogun 2 - Fall of the Samurai;8.4;Mar 23, 2012 +86;Startopia;8.7;Jun 19, 2001 +86;Enemy Engaged: RAH-66 Comanche Versus Ka-52 Hokum;8.3;Jul 31, 2000 +86;Fallout 2;9.2;Sep 30, 1998 +86;Final Fantasy XIV: Heavensward;7.7;Jun 23, 2015 +86;Football Manager 2013;6.7;Nov 1, 2012 +86;Out of the Park Baseball 14;8.6;Apr 15, 2013 +86;The Witcher: Enhanced Edition;8.5;Sep 16, 2008 +86;Borderlands: The Secret Armory of General Knoxx;7.6;Feb 25, 2010 +86;Call of Duty 2;8.3;Oct 25, 2005 +86;Astebreed;7.3;May 30, 2014 +86;Ground Control;7.8;May 31, 2000 +86;Rise of the Tomb Raider;8.0;Jan 28, 2016 +86;Resident Evil 5;7.1;Sep 18, 2009 +86;Saints Row IV;7.4;Aug 20, 2013 +86;Black Mesa;9.0;Sep 14, 2012 +86;EverQuest: Omens of War;7.7;Sep 13, 2004 +86;Steel Beasts;8.4;Sep 24, 2000 +86;Total Annihilation;8.9;Sep 30, 1997 +86;Need for Speed: Hot Pursuit;6.7;Nov 16, 2010 +86;FIFA Soccer 13;6.6;Sep 25, 2012 +86;Sid Meier's Civilization IV: Beyond the Sword;8.6;Jul 23, 2007 +86;The Sims 3;7.6;Jun 2, 2009 +86;Freedom Force vs The 3rd Reich;7.7;Mar 8, 2005 +86;The Binding of Isaac: Rebirth;8.3;Nov 4, 2014 +86;Tribes: Ascend;7.7;Apr 12, 2012 +86;Titanfall;6.1;Mar 11, 2014 +86;Rayman Origins;8.4;Mar 29, 2012 +86;Her Story;5.7;Jun 24, 2015 +86;Starcraft II: Heart of the Swarm;7.9;Mar 12, 2013 +86;Mass Effect 2: Lair of the Shadow Broker;8.5;Sep 7, 2010 +86;LEGO Star Wars II: The Original Trilogy;8.3;Sep 12, 2006 +86;Dungeon Siege;7.9;Mar 31, 2002 +86;Crysis 2;6.7;Mar 22, 2011 +86;Call of Duty: Modern Warfare 2;4.1;Nov 10, 2009 +86;The Secret of Monkey Island: Special Edition;9.1;Jul 15, 2009 +86;Max Payne 2: The Fall of Max Payne;9.0;Oct 14, 2003 +86;Homeworld Remastered Collection;8.2;Feb 25, 2015 +86;Galactic Civilizations II: Dread Lords;8.0;Feb 21, 2006 +86;Tomb Raider;8.5;Mar 5, 2013 +86;Star Trek: Voyager Elite Force;8.2;Sep 20, 2000 +86;Worldwide Soccer Manager 2008;8.4;Oct 23, 2007 +86;IL-2 Sturmovik: Forgotten Battles;8.6;Mar 2, 2003 +86;Hyper Light Drifter;8.1;Mar 31, 2016 +86;DiRT 3;6.9;May 24, 2011 +86;Unreal Tournament 2003;8.1;Sep 30, 2002 +86;Age of Wonders II: The Wizard's Throne;8.4;Jun 12, 2002 +86;Links 2001;6.8;Oct 24, 2000 +86;EverQuest: The Ruins of Kunark;8.8;Mar 31, 2000 +86;Full Throttle;8.8;Apr 30, 1995 +86;The Lord of the Rings Online: Shadows of Angmar;8.1;Apr 24, 2007 +86;Pony Island;6.8;Jan 4, 2016 +86;Warhammer 40,000: Dawn of War;8.8;Sep 20, 2004 +86;Warhammer Online: Age of Reckoning;7.9;Sep 16, 2008 +86;Dead Space;8.0;Oct 20, 2008 +86;Bionic Commando Rearmed;7.0;Aug 13, 2008 +86;Command & Conquer: Red Alert 2 - Yuri's Revenge;9.0;Oct 10, 2001 +86;Europa Universalis;8.1;Feb 2, 2001 +86;Escape from Monkey Island;8.2;Nov 8, 2000 +86;IL-2 Sturmovik: 1946;8.8;Mar 13, 2007 +86;XCOM: Enemy Within;7.9;Nov 12, 2013 +86;Battlefield 3: Back to Karkand;7.2;Dec 13, 2011 +86;Heroes of the Storm;6.7;Jun 2, 2015 +86;Civilization III: Conquests;8.4;Nov 4, 2003 +86;Path of Exile;8.0;Jan 25, 2013 +86;Battlefield: Bad Company 2 Vietnam;8.1;Dec 18, 2010 +86;Assassin's Creed II;6.8;Mar 9, 2010 +86;The Elder Scrolls IV: Shivering Isles;8.4;Mar 26, 2007 +86;DiRT Rally;8.8;Dec 7, 2015 +86;Rocket League;8.1;Jul 7, 2015 +86;Allegiance;8.2;Mar 31, 2000 +85;The Talos Principle;8.5;Dec 11, 2014 +85;Cities: Skylines;8.9;Mar 10, 2015 +85;Falcon 4.0;8.0;Nov 30, 1998 +85;Tom Clancy's Rainbow Six;8.6;Jul 31, 1998 +85;Madden NFL 2005;6.4;Sep 14, 2004 +85;Legend of Grimrock II;8.0;Oct 15, 2014 +85;Sam & Max Episode 205: What's New, Beelzebub?;8.6;Apr 10, 2008 +85;Dragon Age: Inquisition;5.8;Nov 18, 2014 +85;Tales from the Borderlands: A Telltale Game Series;8.7;Apr 26, 2016 +85;Tom Clancy's Rainbow Six: Vegas;7.7;Dec 12, 2006 +85;City of Heroes;8.5;Apr 27, 2004 +85;SWAT 4;8.6;Apr 5, 2005 +85;Clive Barker's Undying;8.7;Feb 21, 2001 +85;EverQuest;8.2;Mar 16, 1999 +85;Warhammer 40,000: Dawn of War II;8.1;Feb 18, 2009 +85;Command & Conquer 3: Tiberium Wars;8.0;Mar 26, 2007 +85;Bit.Trip Presents...Runner2: Future Legend of Rhythm Alien;8.2;Feb 26, 2013 +85;Hotline Miami;8.5;Oct 23, 2012 +85;Out of the Park Baseball 13;8.2;Apr 9, 2012 +85;Wizardry 8;8.6;Nov 14, 2001 +85;Aliens Versus Predator 2;8.7;Oct 31, 2001 +85;Operation Flashpoint: Cold War Crisis;9.0;Aug 30, 2001 +85;Tropico;8.4;Apr 5, 2001 +85;Giants: Citizen Kabuto;8.9;Dec 6, 2000 +85;NASCAR SimRacing;4.9;Feb 15, 2005 +85;The Lord of the Rings Online: Mines of Moria;8.3;Nov 17, 2008 +85;The Binding of Isaac: Afterbirth;8.1;Oct 30, 2015 +85;Amnesia: The Dark Descent;8.6;Feb 17, 2011 +85;GTR FIA Racing;8.6;May 3, 2005 +85;Football Manager 2011;8.4;Nov 23, 2010 +85;Dust: An Elysian Tail;8.5;May 24, 2013 +85;South Park: The Stick of Truth;8.6;Mar 4, 2014 +85;Dark Souls: Prepare to Die Edition;7.4;Aug 24, 2012 +85;Medieval II: Total War Kingdoms;8.8;Aug 28, 2007 +85;Shovel Knight;7.9;Jun 26, 2014 +85;DmC: Devil May Cry;6.7;Jan 24, 2013 +85;Peggle Deluxe;8.1;Feb 19, 2008 +85;Monopoly Tycoon;8.0;Sep 24, 2001 +85;Indigo Prophecy;8.3;Oct 2, 2005 +85;Prince of Persia: The Two Thrones;8.0;Dec 1, 2005 +85;Sam & Max Episode 204: Chariots of the Dogs;8.1;Mar 13, 2008 +85;Assetto Corsa;8.4;Dec 19, 2014 +85;Machinarium;8.8;Oct 16, 2009 +85;Frozen Synapse;7.7;May 26, 2011 +85;Valkyria Chronicles;8.3;Nov 11, 2014 +85;Freelancer;8.9;Mar 3, 2003 +85;Zenzizenzic;5.9;Jul 23, 2015 +85;The Wolf Among Us: Episode 1 - Faith;9.0;Oct 11, 2013 +85;Mega Man Legacy Collection;7.3;Aug 25, 2015 +85;Warhammer 40,000: Dawn of War II - Chaos Rising;8.7;Mar 11, 2010 +85;Far Cry 2;5.8;Oct 21, 2008 +85;The Walking Dead: Episode 3 - Long Road Ahead;8.4;Aug 29, 2012 +85;AudioSurf;8.8;Feb 15, 2008 +85;BattleBlock Theater;8.0;May 15, 2014 +85;Star Wars: Knights of the Old Republic II - The Sith Lords;8.4;Feb 8, 2005 +85;MVP Baseball 2005;8.1;Feb 22, 2005 +85;The Elder Scrolls III: Bloodmoon;8.5;Jun 3, 2003 +85;Rogue Legacy;7.9;Jun 27, 2013 +85;Chaos Reborn;8.4;Oct 26, 2015 +85;Thief: Deadly Shadows;8.4;May 25, 2004 +85;Football Manager 2014;5.4;Oct 30, 2013 +85;System Shock: Enhanced Edition;7.9;Sep 22, 2015 +85;EverQuest: Gates of Discord;6.8;Feb 9, 2004 +85;FIFA 2001 Major League Soccer;7.3;Oct 30, 2000 +85;Sid Meier's Civilization V: Brave New World;8.6;Jul 9, 2013 +85;Final Fantasy XI;7.5;Oct 28, 2003 +85;Serious Sam: The Second Encounter;8.5;Feb 4, 2002 +85;The Sims: Hot Date;7.9;Nov 12, 2001 +85;American McGee's Alice;8.2;Dec 6, 2000 +85;Trials Evolution: Gold Edition;6.7;Mar 21, 2013 +85;Warhammer 40,000: Dawn of War - Winter Assault;8.3;Sep 21, 2005 +85;Tony Hawk's Underground 2;7.9;Oct 4, 2004 +85;Papers, Please;8.5;Aug 8, 2013 +85;Star Wars: The Old Republic;5.9;Dec 20, 2011 +85;Anarchy Online: Shadowlands;8.7;Sep 8, 2003 +85;Dark Age of Camelot: Shrouded Isles;8.8;Dec 2, 2002 +85;Obsidian;8.3;Dec 31, 1996 +84;The Walking Dead: Episode 2 - Starved for Help;8.6;Jun 29, 2012 +84;Saints Row: The Third;8.1;Nov 15, 2011 +84;Fallout: New Vegas;8.5;Oct 19, 2010 +84;The Movies;8.3;Nov 8, 2005 +84;Neverwinter Nights: Hordes of the Underdark;8.6;Dec 2, 2003 +84;Command & Conquer: Generals;8.3;Feb 10, 2003 +84;Sid Meier's SimGolf;8.2;Jan 23, 2002 +84;Middle-earth: Shadow of Mordor;8.0;Sep 30, 2014 +84;SpaceChem;8.4;Mar 2, 2011 +84;Downwell;6.2;Oct 15, 2015 +84;Pinball FX 2;8.0;Oct 27, 2012 +84;Devil Daggers;6.7;Feb 18, 2016 +84;PlanetSide 2;7.0;Nov 20, 2012 +84;Enter the Gungeon;7.4;Apr 5, 2016 +84;GT Legends;8.6;Jan 23, 2006 +84;Hearthstone: Goblins Vs. Gnomes;6.6;Dec 8, 2014 +84;Space Rangers 2: Rise of the Dominators;9.0;Mar 27, 2006 +84;Tales From The Borderlands: Episode 1 - Zer0 Sum;8.4;Nov 25, 2014 +84;Puzzle Quest: Challenge of the Warlords;8.3;Oct 10, 2007 +84;Heroes of Might and Magic IV;7.6;Mar 29, 2002 +84;Command & Conquer: Red Alert 2;8.9;Oct 21, 2000 +84;Shogun: Total War;8.7;Jun 13, 2000 +84;DiRT;7.2;Jun 19, 2007 +84;Darkest Dungeon;8.0;Jan 19, 2016 +84;Super Street Fighter IV: Arcade Edition;7.8;Jul 13, 2011 +84;Football Manager 2012;8.0;Oct 20, 2011 +84;Guild Wars Factions;8.5;Apr 28, 2006 +84;80 Days (2015);6.1;Sep 29, 2015 +84;Spore;5.2;Sep 7, 2008 +84;Unity of Command;7.2;Nov 15, 2011 +84;Hearthstone: The Grand Tournament;4.0;Aug 24, 2015 +84;Metro Redux;8.0;Aug 26, 2014 +84;Time Gentlemen, Please!;7.6;Jul 2, 2009 +84;Europa Universalis IV: Wealth of Nations;8.4;May 29, 2014 +84;Mass Effect 3: Citadel;7.8;Mar 5, 2013 +84;Disciples II: Dark Prophecy;8.6;Jan 22, 2002 +84;Just Cause 2;7.7;Mar 23, 2010 +84;Crysis Warhead;7.9;Sep 16, 2008 +84;Assassin's Creed IV: Black Flag;7.7;Nov 19, 2013 +84;Age of Mythology: The Titans;8.7;Sep 30, 2003 +84;SimCity 4;8.7;Jan 12, 2003 +84;Microsoft Train Simulator;8.4;May 31, 2001 +84;Rise of Nations: Rise of Legends;8.5;May 9, 2006 +84;TOCA Race Driver 3;7.8;Feb 24, 2006 +84;FTL: Faster Than Light;8.4;Sep 14, 2012 +84;SOMA;8.2;Sep 22, 2015 +84;DEFCON: Everybody Dies;8.3;Mar 26, 2007 +84;Tron 2.0;8.3;Aug 26, 2003 +84;Brothers in Arms: Earned in Blood;7.3;Oct 6, 2005 +84;Grim Fandango Remastered;8.0;Jan 27, 2015 +84;The Lord of the Rings: The Battle for Middle-Earth II;7.5;Mar 2, 2006 +84;Battlefield Vietnam;7.4;Mar 16, 2004 +84;Medieval: Total War - Viking Invasion;8.8;May 7, 2003 +84;Fallout 4;5.4;Nov 10, 2015 +84;Guild Wars Nightfall;8.7;Oct 26, 2006 +84;The Binding of Isaac;8.3;Sep 28, 2011 +84;Enemy Territory: Quake Wars;8.3;Oct 2, 2007 +84;Trine 2;8.4;Dec 7, 2011 +84;Rift;7.3;Mar 1, 2011 +84;The Wolf Among Us: Episode 5 - Cry Wolf;8.8;Jul 8, 2014 +84;Shift 2: Unleashed;6.1;Mar 29, 2011 +84;Sid Meier's Civilization IV: Warlords;8.2;Jul 24, 2006 +84;Battlefield 1942: The Road to Rome;7.9;Feb 2, 2003 +84;Poseidon;8.4;Jun 25, 2001 +84;F1 2010;6.6;Sep 22, 2010 +84;Shatter;7.4;Mar 15, 2010 +84;Darwinia;7.9;Jun 12, 2006 +84;Ultimate General: Gettysburg;8.0;Oct 16, 2014 +83;Final Fantasy XI: Treasures of Aht Urhgan;7.6;Apr 18, 2006 +83;MDK2;8.4;May 31, 2000 +83;Gunpoint;8.4;Jun 3, 2013 +83;Beyond Good & Evil;8.7;Nov 19, 2003 +83;Anno 2070;7.0;Nov 17, 2011 +83;SMITE;8.3;Mar 25, 2014 +83;Halo: Combat Evolved;7.4;Sep 30, 2003 +83;Grim Dawn;8.9;Feb 25, 2016 +83;Silent Storm;8.9;Jan 20, 2004 +83;Command & Conquer: Generals - Zero Hour;9.0;Sep 22, 2003 +83;Homeworld 2;8.3;Sep 16, 2003 +83;Galactic Civilizations;8.1;Mar 26, 2003 +83;EverQuest: The Shadows of Luclin;7.2;Dec 2, 2001 +83;Orcs Must Die!;8.1;Oct 11, 2011 +83;Life is Strange;8.6;Jan 19, 2016 +83;Fable: The Lost Chapters;8.7;Sep 20, 2005 +83;Unreal Tournament III;8.0;Nov 19, 2007 +83;The Blackwell Epiphany;7.6;Apr 24, 2014 +83;The Lord of the Rings Online: Siege of Mirkwood;7.1;Dec 1, 2009 +83;Out of the Park Baseball 10;8.3;Jun 2, 2009 +83;Tomb Raider: Anniversary;8.0;Jun 5, 2007 +83;Need for Speed: Shift;5.7;Sep 15, 2009 +83;Hearts of Iron II;8.6;Jan 4, 2005 +83;FIFA Soccer 11;7.6;Sep 28, 2010 +83;Project CARS;7.0;May 6, 2015 +83;FIFA Soccer 2003;6.8;Nov 2, 2002 +83;Icewind Dale II;8.3;Aug 26, 2002 +83;Age of Empires;8.8;Sep 30, 1997 +83;EverQuest II: Echoes of Faydwer;8.4;Nov 13, 2006 +83;EverQuest II;7.3;Nov 8, 2004 +83;Terraria;8.5;May 16, 2011 +83;Final Fantasy XIV Online: A Realm Reborn;6.7;Aug 27, 2013 +83;Card Hunter (2013);7.9;Sep 12, 2013 +83;Sam & Max: The Devil's Playhouse - Episode 2: The Tomb of Sammun-Mak;7.9;May 18, 2010 +83;This War of Mine;8.4;Nov 14, 2014 +83;Darksiders;7.7;Sep 23, 2010 +83;Tom Clancy's Rainbow Six 3: Raven Shield;8.9;Mar 19, 2003 +83;World of Outlaws: Sprint Cars;7.9;Feb 11, 2003 +83;Colin McRae Rally 2.0;8.4;Feb 14, 2001 +83;Combat Flight Simulator 2: WWII Pacific Theater;8.1;Oct 13, 2000 +83;Orcs Must Die! 2;7.9;Jul 30, 2012 +83;Prey;7.9;Jul 11, 2006 +83;Metal Gear Rising: Revengeance;7.9;Jan 9, 2014 +83;Starseed Pilgrim;6.3;Apr 16, 2013 +83;Age of Conan: Rise of the Godslayer;8.4;May 11, 2010 +83;Alan Wake;8.0;Feb 16, 2012 +83;Tiger Woods PGA Tour 2002;5.0;Feb 24, 2002 +83;Monaco: What's Yours Is Mine;7.7;Apr 24, 2013 +83;Transistor;8.3;May 20, 2014 +83;Helldivers;6.9;Dec 7, 2015 +83;Worldwide Soccer Manager 2009;8.1;Nov 18, 2008 +83;Call of Duty: World at War;7.5;Nov 10, 2008 +83;Torchlight;8.0;Jan 5, 2010 +83;Prison Architect;8.3;Oct 6, 2015 +83;Valdis Story: Abyssal City;8.1;Oct 30, 2013 +83;Crimson Skies;8.2;Sep 17, 2000 +83;RACE 07: Official WTCC Game;9.0;Oct 9, 2007 +83;SUPERHOT;7.6;Feb 25, 2016 +83;EverQuest II: Rise of Kunark;7.9;Nov 13, 2007 +83;Dark Age of Camelot: Catacombs;8.6;Dec 7, 2004 +83;Spore Creature Creator;8.1;Jun 17, 2008 +83;Colin McRae Rally 2005;7.0;Oct 28, 2004 +83;Tom Clancy's Splinter Cell: Conviction;5.2;Apr 27, 2010 +83;Tribes: Vengeance;7.6;Oct 12, 2004 +83;L.A. Noire: The Complete Edition;7.9;Nov 8, 2011 +83;GTR Evolution;8.2;Sep 2, 2008 +83;Life is Strange: Episode 5 - Polarized;8.4;Oct 20, 2015 +83;BROFORCE;8.0;Oct 15, 2015 +83;Independence War 2: Edge of Chaos;8.4;Aug 22, 2001 +83;Myst III: Exile;8.2;May 8, 2001 +83;Superbrothers: Sword & Sworcery EP;6.4;Apr 16, 2012 +83;Sid Meier's Civilization IV: Colonization;6.7;Sep 22, 2008 +83;Europa Universalis III;8.4;Jan 23, 2007 +83;F1 2011;7.2;Sep 20, 2011 +83;Prince of Persia: Warrior Within;8.4;Nov 30, 2004 +83;Danganronpa: Trigger Happy Havoc;7.6;Feb 18, 2016 +83;Counter-Strike: Global Offensive;7.8;Aug 21, 2012 +83;Outland;7.1;Sep 29, 2014 +83;MechWarrior 4: Mercenaries;8.6;Nov 7, 2002 +83;Metal Gear Solid;9.0;Sep 24, 2000 +82;Invisible, Inc.;8.0;May 12, 2015 +82;Dark Souls II: Crown of the Ivory King;7.8;Sep 29, 2014 +82;Red Faction: Guerrilla;7.5;Sep 15, 2009 +82;The Book of Unwritten Tales;8.2;Oct 28, 2011 +82;Capitalism II;9.0;Dec 16, 2001 +82;Rally Trophy;8.5;Nov 20, 2001 +82;Dawn of Discovery;8.8;Jun 17, 2009 +82;City of Villains;8.1;Oct 31, 2005 +82;Kentucky Route Zero - Act II;8.0;May 31, 2013 +82;Tom Clancy's Splinter Cell: Blacklist;7.4;Aug 20, 2013 +82;Act of War: Direct Action;8.5;Mar 15, 2005 +82;Sokobond;7.8;Aug 27, 2013 +82;Sam & Max Episode 105: Reality 2.0;8.4;Mar 29, 2007 +82;Bejeweled 3;8.0;Dec 7, 2010 +82;Dangerous Waters;8.8;Feb 22, 2005 +82;Tomb Raider: Legend;7.8;Apr 11, 2006 +82;Asheron's Call 2: Fallen Kings;8.8;Nov 20, 2002 +82;Gemini Rue;8.4;Feb 24, 2011 +82;Antichamber;8.2;Jan 31, 2013 +82;Neverwinter Nights 2;6.5;Oct 31, 2006 +82;Dragon Age: Origins - Awakening;7.7;Mar 16, 2010 +82;Door Kickers;8.2;Oct 20, 2014 +82;Hearthstone: Blackrock Mountain;6.4;Apr 2, 2015 +82;Rome: Total War Barbarian Invasion;8.4;Sep 27, 2005 +82;Hacknet;7.3;Aug 12, 2015 +82;Tales of Monkey Island Chapter 3: Lair of the Leviathan;7.8;Sep 29, 2009 +82;Neverwinter Nights 2: Mask of The Betrayer;8.8;Oct 9, 2007 +82;Sins of a Solar Empire: Rebellion;7.8;Jun 12, 2012 +82;Broken Sword: The Sleeping Dragon;7.6;Nov 17, 2003 +82;Age of Wonders: Shadow Magic;8.5;Jul 25, 2003 +82;Tom Clancy's Ghost Recon: Desert Siege;8.4;Mar 27, 2002 +82;Warlords Battlecry II;8.5;Mar 11, 2002 +82;Football Manager Live;2.9;Jan 23, 2009 +82;Marvel: Ultimate Alliance;8.3;Oct 24, 2006 +82;The Talos Principle: Road To Gehenna;7.6;Jul 23, 2015 +82;Lara Croft and the Guardian of Light;8.2;Sep 28, 2010 +82;Aquaria;8.3;Dec 7, 2007 +82;Need for Speed: Underground;8.3;Nov 17, 2003 +82;TrackMania Sunrise;8.5;May 6, 2005 +82;King's Quest Chapter 1: A Knight to Remember;7.2;Jul 28, 2015 +82;Dragon Age II;4.4;Mar 8, 2011 +82;Endless Legend;7.9;Apr 24, 2014 +82;Tom Clancy's Ghost Recon: Island Thunder;8.3;Sep 25, 2002 +82;S.T.A.L.K.E.R.: Shadow of Chernobyl;8.4;Mar 20, 2007 +82;Kero Blaster;6.9;May 11, 2014 +82;Monday Night Combat;7.3;Jan 24, 2011 +82;The Wolf Among Us: Episode 3 - A Crooked Mile;8.6;Apr 8, 2014 +82;Airborne Assault: Red Devils Over Arnhem;7.4;Jun 17, 2002 +82;Fallout Tactics: Brotherhood of Steel;7.9;Mar 14, 2001 +82;Need for Speed: Underground 2;8.5;Nov 9, 2004 +82;NHL Eastside Hockey Manager 2005;6.6;Oct 5, 2005 +82;Legend of Grimrock;8.1;Apr 11, 2012 +82;Dominions 3: The Awakening;8.1;Sep 29, 2006 +82;Bulletstorm;7.7;Feb 22, 2011 +82;Borderlands 2: Mr. Torgue's Campaign of Carnage;7.3;Nov 20, 2012 +82;Desktop Dungeons;8.2;Oct 17, 2010 +82;Fallout: New Vegas - Old World Blues;7.8;Jul 19, 2011 +82;Crusader Kings II;8.7;Feb 14, 2012 +82;MVP Baseball 2004;7.9;Mar 9, 2004 +82;Europa 1400: The Guild;8.6;Nov 18, 2002 +82;Battle Realms;8.6;Nov 7, 2001 +82;Warlords Battlecry;8.2;Jul 9, 2000 +82;Sam & Max Episode 201: Ice Station Santa;8.6;Nov 8, 2007 +82;Technobabylon;7.8;May 21, 2015 +82;World of Warcraft: Mists of Pandaria;4.8;Sep 25, 2012 +82;FIFA 15;4.2;Sep 23, 2014 +82;Recettear: An Item Shop's Tale;8.6;Sep 10, 2010 +82;ETHER One;6.9;Mar 25, 2014 +82;The Vanishing of Ethan Carter;8.1;Sep 25, 2014 +82;Flight Simulator X: Acceleration;7.3;Oct 23, 2007 +82;Blood;9.0;May 31, 1997 +82;Command & Conquer: Red Alert 3;6.8;Oct 28, 2008 +82;The Walking Dead: Episode 1 - A New Day;8.4;Apr 24, 2012 +82;Links 2003;6.8;Sep 16, 2002 +82;Earth & Beyond;7.1;Sep 2, 2002 +82;Syberia;8.5;Sep 1, 2002 +82;Virtual Pool 3;7.3;Nov 14, 2000 +82;The Sims: Livin' Large;6.6;Aug 27, 2000 +82;DCS: Black Shark;8.5;Apr 13, 2009 +82;King's Bounty: Armored Princess;8.7;Sep 10, 2010 +82;Age of Wonders III - Golden Realms;8.5;Sep 18, 2014 +82;Strong Bad's Cool Game for Attractive People Episode 5: 8-Bit Is Enough;7.5;Dec 15, 2008 +82;Prince of Persia;7.2;Dec 2, 2008 +82;Joint Operations: Typhoon Rising;8.7;Jun 15, 2004 +82;Xpand Rally;7.4;Apr 20, 2006 +82;Dark Souls II: Crown of the Sunken King;7.3;Jul 22, 2014 +82;Resident Evil HD Remaster;8.2;Jan 20, 2015 +82;Celtic Kings: Rage of War;8.5;Aug 21, 2002 +82;B-17 Flying Fortress: The Mighty 8th;7.3;Dec 13, 2000 +82;EverQuest: The Scars of Velious;7.8;Dec 4, 2000 +82;Metro: Last Light;8.6;May 14, 2013 +82;Rising Storm;8.5;May 30, 2013 +82;Lethal League;7.4;Aug 27, 2014 +82;Botanicula;8.3;Apr 19, 2012 +82;Pro Evolution Soccer 2015;5.8;Nov 13, 2014 +82;Bookworm Adventures Deluxe;7.9;Dec 20, 2006 +82;The Lord of the Rings: The Battle for Middle-Earth;8.6;Dec 6, 2004 +82;Hitman: Blood Money;8.8;May 30, 2006 +82;Need for Speed: Most Wanted;8.5;Nov 15, 2005 +82;OlliOlli2: Welcome to Olliwood;5.2;Aug 11, 2015 +82;WildStar;7.4;Jun 3, 2014 +82;Broken Age: Act 1;7.7;Jan 28, 2014 +82;Divinity II: The Dragon Knight Saga;8.2;Nov 5, 2010 +82;Out of the Park Baseball 9;7.4;Jun 1, 2008 +82;The Simpsons: Hit & Run;8.0;Nov 13, 2003 +82;America's Army;6.1;Aug 28, 2002 +82;Star Trek Bridge Commander;8.1;Feb 27, 2002 +82;The Last Express;8.9;Mar 31, 1997 +81;Quake 4;7.5;Oct 11, 2005 +81;Nidhogg;7.0;Jan 13, 2014 +81;Battlefield 4;6.0;Oct 29, 2013 +81;To the Moon;8.9;Sep 7, 2012 +81;The Sims 3: World Adventures;8.0;Nov 16, 2009 +81;Painkiller;8.0;Apr 12, 2004 +81;Airborne Assault: Highway to the Reich;6.1;Dec 10, 2003 +81;Nancy Drew: Danger on Deception Island;7.7;Oct 1, 2003 +81;Shadowrun: Hong Kong;7.7;Aug 20, 2015 +81;Supreme Commander: Forged Alliance;8.9;Nov 6, 2007 +81;Sunless Sea;7.4;Jul 1, 2014 +81;The Walking Dead: Season Two Episode 3 - In Harm's Way;8.3;May 13, 2014 +81;Marvel Heroes 2015;7.9;Jun 4, 2014 +81;Football Manager 2016;6.4;Nov 13, 2015 +81;VVVVVV;8.1;Jan 11, 2010 +81;Darksiders II;7.9;Aug 14, 2012 +81;Wolfenstein: The New Order;8.2;May 20, 2014 +81;Lone Survivor;7.2;Apr 23, 2012 +81;Alien: Isolation;8.4;Oct 6, 2014 +81;The Witcher;8.8;Oct 30, 2007 +81;Kentucky Route Zero - Act I;7.5;Jan 7, 2013 +81;Jade Empire: Special Edition;8.3;Feb 26, 2007 +81;SWAT 3: Elite Edition;8.4;Oct 6, 2000 +81;Asheron's Call;8.8;Oct 31, 1999 +81;Unravel;8.1;Feb 9, 2016 +81;Midnight Club II;8.0;Jun 30, 2003 +81;Chessmaster 10th Edition;7.4;Aug 12, 2004 +81;Age of Empires III;7.7;Oct 18, 2005 +81;Tales of Monkey Island Chapter 5: Rise of the Pirate God;8.4;Dec 8, 2009 +81;Castlevania: Lords of Shadow Ultimate Edition;7.3;Aug 27, 2013 +81;Strong Bad's Cool Game for Attractive People Episode 2: Strong Badia the Free;8.2;Sep 15, 2008 +81;The Cat Lady;8.7;Dec 4, 2013 +81;Vessel;7.9;Mar 1, 2012 +81;Metro 2033;8.1;Mar 16, 2010 +81;OutRun 2006: Coast 2 Coast;7.8;Jun 27, 2006 +81;Blur;7.3;May 25, 2010 +81;Empires: Dawn of the Modern World;8.2;Oct 21, 2003 +81;Chessmaster 9000;7.7;Aug 31, 2002 +81;Gothic;8.6;Nov 23, 2001 +81;Arcanum: Of Steamworks and Magick Obscura;8.9;Aug 22, 2001 +81;NASCAR Heat;8.6;Sep 27, 2000 +81;Company of Heroes 2: Ardennes Assault;6.1;Nov 17, 2014 +81;PlanetSide;7.3;May 20, 2003 +81;Tales From The Borderlands: Episode 3 - Catch A Ride;8.4;Jun 23, 2015 +81;The Walking Dead: Season Two Episode 2 - A House Divided;8.6;Mar 4, 2014 +81;Kingdoms of Amalur: Reckoning;6.6;Feb 7, 2012 +81;Sam & Max: The Devil's Playhouse - Episode 1: The Penal Zone;8.5;Apr 15, 2010 +81;Borderlands;7.8;Oct 26, 2009 +81;DG2: Defense Grid 2;6.7;Sep 23, 2014 +81;Napoleon: Total War;7.9;Feb 23, 2010 +81;Overlord;8.1;Jun 26, 2007 +81;Firewatch;7.2;Feb 9, 2016 +81;Victoria II: Heart of Darkness;8.7;Apr 16, 2013 +81;Waveform;7.6;Jan 25, 2013 +81;The Elder Scrolls IV: Knights of the Nine;7.5;Nov 21, 2006 +81;Red Orchestra: Ostfront 41-45;8.6;Mar 14, 2006 +81;Stronghold;8.9;Oct 21, 2001 +81;Strong Bad's Cool Game for Attractive People Episode 4: Dangeresque 3: The Criminal Projective;8.5;Nov 17, 2008 +81;Rochard;8.0;Nov 15, 2011 +81;Fallout 3: Broken Steel;7.3;May 5, 2009 +81;Tiger Woods PGA Tour 06;8.1;Sep 20, 2005 +81;RollerCoaster Tycoon 3;4.9;Oct 26, 2004 +81;Dragon's Dogma: Dark Arisen;8.3;Jan 15, 2016 +81;Guild Wars 2: Heart of Thorns;7.3;Oct 23, 2015 +81;AaaaaAAaaaAAAaaAAAAaAAAAA!!! - A Reckless Disregard for Gravity;7.2;Sep 3, 2009 +81;The Sims 2 University;7.8;Feb 28, 2005 +81;Far Cry 3: Blood Dragon;8.1;May 1, 2013 +81;Sid Meier's Civilization: Beyond Earth;5.5;Oct 24, 2014 +81;Disney's Toontown Online;8.7;Oct 6, 2005 +81;Combat Mission 3: Afrika Korps;8.4;Dec 3, 2003 +81;EverQuest: The Planes of Power;8.2;Oct 28, 2002 +81;Rails Across America;8.0;Sep 18, 2001 +81;Wasteland 2;7.3;Sep 19, 2014 +81;Jamestown: Legend of the Lost Colony;7.5;Jun 8, 2011 +81;Call of Duty: Black Ops;5.1;Nov 9, 2010 +81;Kohan II: Kings of War;7.9;Sep 20, 2004 +81;The Age of Decadence;7.9;Oct 15, 2015 +81;Samorost 3;8.3;Mar 24, 2016 +81;Order of Battle: Pacific;6.4;Apr 30, 2015 +81;Empire Earth;8.3;Nov 12, 2001 +81;Star Trek: Deep Space Nine: The Fallen;7.9;Nov 15, 2000 +81;Sam & Max Episode 101: Culture Shock;8.7;Oct 18, 2006 +81;Mirror's Edge (2008);8.1;Jan 12, 2009 +81;TrackMania 2 Canyon;7.7;Sep 14, 2011 +81;Sleeping Dogs;8.2;Aug 14, 2012 +81;Star Wars Jedi Knight: Jedi Academy;8.6;Sep 17, 2003 +81;Mortal Kombat Komplete Edition;8.7;Aug 6, 2013 +81;Shadowrun: Dragonfall;8.3;Feb 27, 2014 +81;Eets;6.4;Mar 29, 2006 +81;World of Warships;6.6;Sep 17, 2015 +81;TOCA Race Driver 2: The Ultimate Racing Simulator;8.0;Apr 15, 2004 +81;Wargame: European Escalation;8.2;Feb 22, 2012 +81;Dungeon Defenders;7.3;Oct 18, 2011 +81;Sam & Max: The Devil's Playhouse - Episode 5: The City That Dares Not Sleep;7.9;Aug 30, 2010 +81;Age of Empires III: The Asian Dynasties;8.5;Oct 23, 2007 +81;Defense Grid: The Awakening;8.8;Jul 29, 2009 +81;Codename: Panzers, Phase One;8.8;Sep 30, 2004 +81;FIFA 16;4.4;Sep 22, 2015 +81;Europa Universalis IV: Conquest of Paradise;7.7;Jan 14, 2014 +81;Ghost Master;8.0;Aug 26, 2003 +81;Divine Divinity;8.5;Sep 22, 2002 +80;The Book of Unwritten Tales 2;7.7;Feb 20, 2015 +80;Galactic Civilizations III;6.6;May 14, 2015 +80;Lovers in a Dangerous Spacetime;7.2;Sep 9, 2015 +80;Age of Conan: Hyborian Adventures;7.3;May 20, 2008 +80;Company of Heroes 2: The Western Front Armies;6.8;Jun 23, 2014 +80;Sid Meier's Civilization V: Gods & Kings;7.7;Jun 19, 2012 +80;Age of Empires III: The WarChiefs;8.1;Oct 17, 2006 +80;Metal Gear Solid V: Ground Zeroes;7.7;Dec 18, 2014 +80;Trials Fusion;6.8;Apr 16, 2014 +80;Syberia II;8.3;Mar 30, 2004 +80;Tom Clancy's Ghost Recon;8.4;Nov 13, 2001 +80;Conquest: Frontier Wars;8.3;Aug 14, 2001 +80;Gabriel Knight 3: Blood of the Sacred, Blood of the Damned;8.8;Oct 5, 1999 +80;Westerado: Double Barreled;7.4;Apr 16, 2015 +80;Anomaly: Warzone Earth;7.3;Apr 8, 2011 +80;Volume;7.2;Aug 18, 2015 +80;GRID 2;5.7;May 27, 2013 +80;The Banner Saga;7.9;Jan 14, 2014 +80;Sam & Max Episode 202: Moai Better Blues;7.7;Jan 10, 2008 +80;Age of Wonders III - Eternal Lords;8.4;Apr 14, 2015 +80;Pro Evolution Soccer 2013;6.8;Sep 25, 2012 +80;Osmos;7.5;Aug 18, 2009 +80;Dungeon Siege II;7.9;Aug 16, 2005 +80;Dead Island;6.8;Sep 6, 2011 +80;Sam & Max Episode 104: Abe Lincoln Must Die!;7.8;Feb 22, 2007 +80;Deus Ex: Invisible War;6.3;Dec 2, 2003 +80;The Sims: Makin' Magic;8.6;Oct 28, 2003 +80;Tom Clancy's Splinter Cell: Double Agent;5.7;Nov 7, 2006 +80;Medal of Honor: Pacific Assault;7.4;Nov 4, 2004 +80;Assassin's Creed: Revelations;7.4;Nov 29, 2011 +80;Grandia II Anniversary Edition;7.6;Aug 24, 2015 +80;Assassin's Creed III;6.2;Nov 20, 2012 +80;Madden NFL 07;7.3;Aug 22, 2006 +80;Outlast;8.4;Sep 4, 2013 +80;The Chronicles of Riddick: Assault on Dark Athena;8.0;Apr 7, 2009 +80;Hearts of Iron II: Doomsday;8.8;Apr 7, 2006 +80;Dishonored: The Brigmore Witches;8.5;Aug 13, 2013 +80;Codename: Panzers, Phase Two;8.0;Jul 25, 2005 +80;Full Spectrum Warrior;7.0;Sep 21, 2004 +80;AI War: Fleet Command;8.4;May 14, 2009 +80;Freedom Fighters;8.3;Oct 1, 2003 +80;NBA Live 2003;8.3;Nov 14, 2002 +80;The Elder Scrolls III: Tribunal;8.2;Nov 6, 2002 +80;Elite: Dangerous;6.4;Dec 16, 2014 +80;Pure;6.9;Sep 16, 2008 +80;Goodbye Deponia;8.1;Oct 17, 2013 +80;SWAT 4: The Stetchkov Syndicate;8.3;Feb 28, 2006 +80;Dropsy;7.3;Sep 10, 2015 +80;Company of Heroes 2: The British Forces;5.9;Sep 3, 2015 +80;Ground Control II: Operation Exodus;8.8;Jun 23, 2004 +80;NBA Live 2004;9.0;Nov 11, 2003 +80;Brutal Legend;7.8;Feb 26, 2013 +80;Tomb Raider: Underworld;7.6;Nov 18, 2008 +80;Oxenfree;7.7;Jan 15, 2016 +80;Titan Quest: Immortal Throne;8.7;Mar 5, 2007 +80;La-Mulana (Remake);7.1;Jul 13, 2012 +80;X-Men Legends II: Rise of Apocalypse;8.4;Sep 20, 2005 +80;SpellForce 2: Shadow Wars;7.6;May 5, 2006 +80;Fritz 8 Deluxe;7.8;Dec 1, 2004 +80;Trine;8.2;Sep 11, 2009 +80;Dishonored: The Knife of Dunwall;8.1;Apr 16, 2013 +80;Company of Heroes 2;2.0;Jun 25, 2013 +80;Natural Selection 2;8.4;Oct 30, 2012 +80;Read Only Memories;7.2;Oct 5, 2015 +80;The Sims 3: Into the Future;5.4;Oct 22, 2013 +80;Borderlands 2: Captain Scarlett and Her Pirate's Booty;7.4;Oct 16, 2012 +80;FATE;8.3;Sep 19, 2006 +80;2002 FIFA World Cup;7.9;Apr 30, 2002 +80;Asheron's Call Dark Majesty;8.1;Nov 4, 2001 +80;The Bug Butcher;8.2;Jan 19, 2016 +80;Dragonshard;7.4;Oct 2, 2005 +80;Icewind Dale: Enhanced Edition;7.6;Oct 30, 2014 +80;The Magic Circle;7.3;Jul 9, 2015 +80;Far Cry 4;6.6;Nov 18, 2014 +80;Super Time Force Ultra;6.6;Aug 25, 2014 +80;Day of Defeat: Source;9.1;Feb 7, 2006 +80;Battlefield 2142;6.8;Oct 17, 2006 +80;World of Tanks;3.8;Sep 6, 2011 +80;Vampire: The Masquerade - Bloodlines;9.0;Nov 16, 2004 +80;Dark Souls II: Scholar of the First Sin;7.4;Apr 1, 2015 +80;Warhammer 40,000: Dawn of War II - Retribution;7.8;Mar 1, 2011 +80;Panzer Corps;7.5;Jul 11, 2011 +80;Men of War;8.1;Mar 16, 2009 +80;Fallen Enchantress: Legendary Heroes;7.7;May 22, 2013 +80;The Walking Dead: Episode 4 - Around Every Corner;8.5;Oct 10, 2012 +80;Tales of Monkey Island Chapter 4: The Trial and Execution of Guybrush Threepwood;8.4;Oct 30, 2009 +80;Penny Arcade Adventures: Episode Two;7.7;Nov 7, 2008 +80;Time Commando;8.9;Jul 31, 1996 +80;Sins of a Solar Empire: Entrenchment;8.1;Feb 25, 2009 +80;F1 2012;6.9;Sep 18, 2012 +80;Luftrausers;6.8;Mar 18, 2014 +80;Naruto Shippuden: Ultimate Ninja Storm 3 Full Burst;7.9;Oct 24, 2013 +80;Stealth Bastard Deluxe;8.3;Nov 28, 2012 +80;Tom Clancy's Ghost Recon Advanced Warfighter;7.7;May 3, 2006 +80;LEGO Batman: The Videogame;7.9;Sep 23, 2008 +80;Stacking;7.9;Mar 6, 2012 +80;Age of Wonders III;7.8;Mar 31, 2014 +80;Life is Strange: Episode 3 - Chaos Theory;9.0;May 19, 2015 +80;The Legend of Heroes: Trails in the Sky SC;8.4;Oct 29, 2015 +80;Proteus;5.6;Jan 30, 2013 +80;Robin Hood: The Legend of Sherwood;8.3;Nov 14, 2002 +80;Soldier of Fortune II: Double Helix;7.3;May 20, 2002 +80;RollerCoaster Tycoon: Loopy Landscapes;9.0;Sep 30, 2000 +80;Toki Tori;7.9;Jan 28, 2010 +80;RoboBlitz;8.3;Nov 7, 2006 +80;Wargame: AirLand Battle;8.1;May 29, 2013 +80;Football Manager 2015;6.0;Nov 7, 2014 +80;The Suffering;8.2;Jun 8, 2004 +80;Gish;7.2;Sep 17, 2004 +80;Axiom Verge;8.2;May 14, 2015 +80;Driver: San Francisco;7.0;Sep 27, 2011 +80;The Corporate Machine;7.5;Jul 14, 2001 +80;Dungeons & Dragons: Chronicles of Mystara;6.7;Jun 18, 2013 +80;Disciples II: Rise of the Elves;8.1;Nov 25, 2003 +80;MechCommander 2;8.3;Jul 18, 2001 +80;Waterloo: Napoleon's Last Battle;7.5;Mar 25, 2001 +80;Chessmaster 8000;6.4;Nov 14, 2000 +80;Circle of Blood;8.6;Sep 30, 1996 +80;BioShock Infinite: Burial at Sea - Episode Two;8.5;Mar 25, 2014 +80;S.T.A.L.K.E.R.: Call of Pripyat;8.7;Feb 2, 2010 +80;The Walking Dead: Season Two - A Telltale Games Series;8.3;Dec 17, 2013 +80;FLY'N;8.2;Nov 9, 2012 +80;Total War: Attila;7.3;Feb 17, 2015 +80;The Wolf Among Us;8.8;Oct 11, 2013 +80;Nancy Drew: Secret of the Old Clock;8.1;Jul 26, 2005 +80;ArcheAge;3.6;Sep 16, 2014 +80;CAPSIZED;7.1;Apr 29, 2011 +80;Microsoft Flight Simulator X;7.6;Oct 17, 2006 +80;Myst V: End of Ages;7.8;Sep 19, 2005 +80;Railroad Tycoon 3;7.7;Oct 23, 2003 +80;Hostile Waters: Antaeus Rising;8.1;Jun 13, 2001 +79;Dustforce;7.9;Jan 17, 2012 +79;Empire Earth II;7.0;Apr 26, 2005 +79;Fallout 3: Point Lookout;7.8;Jun 23, 2009 +79;Test Drive Unlimited;8.1;Mar 20, 2007 +79;Dying Light: The Following;8.3;Feb 9, 2016 +79;The Path;7.0;Mar 18, 2009 +79;Dungeon of the Endless;8.0;Oct 27, 2014 +79;Revenge of the Titans;7.6;May 24, 2010 +79;Bookworm Adventures: Volume 2;7.6;Jul 30, 2009 +79;F1 2001;7.5;Oct 14, 2001 +79;Brothers in Arms: Hell's Highway;7.9;Oct 7, 2008 +79;Star Wars: Empire at War;8.4;Feb 15, 2006 +79;Dariusburst: Chronicle Saviours;8.3;Dec 3, 2015 +79;Europa Universalis: Rome - Vae Victis;8.6;Nov 19, 2008 +79;Silent Hunter: Wolves of the Pacific;6.5;Mar 20, 2007 +79;Pillars of Eternity: The White March - Part 2;6.7;Feb 16, 2016 +79;1701 A.D.;8.3;Nov 6, 2006 +79;Stasis;7.6;Aug 31, 2015 +79;Pro Evolution Soccer 2009;7.4;Nov 12, 2008 +79;Return to Mysterious Island;8.5;Nov 2, 2004 +79;Jotun;7.0;Sep 29, 2015 +79;Else Heart.Break();7.5;Sep 24, 2015 +79;Kohan: Ahriman's Gift;8.7;Nov 5, 2001 +79;Emperor: Battle for Dune;8.3;Jun 12, 2001 +79;Trackmania Turbo;6.9;Mar 24, 2016 +79;Cart Life;5.9;Jul 29, 2010 +79;Sword of the Stars: Born of Blood;8.1;Jun 5, 2007 +79;Worms Reloaded;6.7;Aug 26, 2010 +79;Warhammer: End Times - Vermintide;7.9;Oct 23, 2015 +79;Euro Truck Simulator 2;8.7;Jan 16, 2013 +79;Tropico 3;8.2;Oct 20, 2009 +79;Cities: Skylines - After Dark;7.9;Sep 24, 2015 +79;Runaway: A Twist of Fate;8.5;Apr 21, 2011 +79;Tales of Monkey Island Chapter 1: Launch of the Screaming Narwhal;8.2;Jul 7, 2009 +79;Bloodline Champions;8.0;Jan 13, 2011 +79;The Sims: Superstar;8.2;May 12, 2003 +79;NBA Live 2005;8.5;Oct 26, 2004 +79;Valiant Hearts: The Great War;8.6;Jun 25, 2014 +79;Payday 2;3.4;Aug 13, 2013 +79;Dungeons of Dredmor;7.8;Jul 13, 2011 +79;Geometry Wars 3: Dimensions;6.2;Nov 25, 2014 +79;Assassin's Creed: Director's Cut Edition;7.5;Apr 8, 2008 +79;Puzzle Dimension;7.6;Jun 21, 2010 +79;Split/Second;8.2;May 18, 2010 +79;Sang-Froid: Tales of Werewolves;7.9;Apr 5, 2013 +79;The Incredible Adventures of Van Helsing: Final Cut;7.2;Oct 7, 2015 +79;Hitman: Absolution;7.0;Nov 19, 2012 +79;Call of Juarez: Gunslinger;8.2;May 22, 2013 +79;Rome: Total War Alexander;7.6;Jun 19, 2006 +79;Strong Bad's Cool Game for Attractive People Episode 3: Baddest of the Bands;8.1;Oct 27, 2008 +79;Sam & Max Episode 102: Situation: Comedy;7.9;Dec 20, 2006 +79;Tropico 3: Absolute Power;7.7;May 17, 2010 +79;Sam & Max Episode 106: Bright Side of the Moon;7.3;Apr 26, 2007 +79;Day of Defeat;9.3;May 6, 2003 +79;Space Empires: IV;8.3;Nov 6, 2000 +79;Resident Evil 4: Ultimate HD Edition;7.7;Feb 27, 2014 +79;Sam & Max Episode 203: Night of the Raving Dead;8.2;Feb 12, 2008 +79;FlatOut: Ultimate Carnage;7.6;Sep 2, 2008 +79;Guitar Hero III: Legends of Rock;7.2;Nov 13, 2007 +79;Sid Meier's Civilization: Beyond Earth - Rising Tide;5.9;Oct 9, 2015 +79;Memoria;8.5;Aug 29, 2013 +79;The Last Door;7.8;May 20, 2014 +79;Shadowgrounds Survivor;7.8;Dec 6, 2007 +79;Gothic II;8.8;Oct 28, 2003 +79;Port Royale;8.2;Jun 4, 2003 +79;Deadly Dozen: Pacific Theater;7.9;Oct 31, 2002 +79;Shattered Galaxy;8.3;Aug 21, 2001 +79;Close Combat: Invasion: Normandy;8.2;Oct 10, 2000 +79;King's Bounty: The Legend;8.6;Sep 23, 2008 +79;Rage;5.1;Oct 4, 2011 +79;The Misadventures of P.B. Winterbottom;8.3;Apr 20, 2010 +79;Uru: Ages Beyond Myst;7.4;Nov 11, 2003 +79;Guild Wars: Eye of the North;8.6;Aug 28, 2007 +79;Tales From The Borderlands: Episode 4 - Escape Plan Bravo;8.4;Aug 18, 2015 +79;EverQuest: Lost Dungeons of Norrath;7.0;Sep 8, 2003 +79;Battlefield 1942: Secret Weapons of WWII;8.5;Sep 4, 2003 +79;The Sims: Unleashed;8.0;Sep 23, 2002 +79;Race the Sun;7.5;Aug 19, 2013 +79;The Sims 3: Pets;6.1;Oct 18, 2011 +79;Prototype;7.9;Jun 10, 2009 +79;Stick it to the Man!;7.2;Dec 13, 2013 +79;Street Fighter X Tekken;6.4;May 11, 2012 +79;Frozen Cortex;6.5;Feb 19, 2015 +79;Free Realms;6.4;Apr 29, 2009 +79;Homeworld: Deserts of Kharak;8.0;Jan 20, 2016 +79;Don't Starve;8.3;Apr 23, 2013 +79;Assault Android Cactus;7.0;Sep 23, 2015 +79;Trainz;7.2;Feb 10, 2002 +79;King Arthur: The Role-Playing Wargame;7.9;Nov 24, 2009 +79;Chivalry: Medieval Warfare;7.8;Oct 16, 2012 +79;Overlord II;8.1;Jun 23, 2009 +79;F.E.A.R. 2: Project Origin;7.8;Feb 10, 2009 +79;Tom Clancy's Rainbow Six Siege;6.9;Dec 1, 2015 +79;The Settlers 7: Paths to a Kingdom;5.2;Mar 23, 2010 +79;RollerCoaster Tycoon 3: Soaked!;2.9;Jun 23, 2005 +79;Dark Souls II: Crown of the Old Iron King;7.6;Aug 26, 2014 +79;TrackMania 2 Valley;8.3;Jul 4, 2013 +79;State of Decay;6.8;Nov 5, 2013 +79;LEGO Harry Potter: Years 1-4;7.8;Jun 29, 2010 +79;Rift: Storm Legion;7.8;Nov 13, 2012 +79;Crayon Physics Deluxe;7.6;Jan 7, 2009 +79;Nancy Drew: Legend of the Crystal Skull;8.5;Oct 8, 2007 +79;EverQuest II: Desert of Flames;7.8;Sep 12, 2005 +79;SimCity 4: Rush Hour;8.6;Sep 22, 2003 +79;Uncommon Valor: Campaign for the South Pacific;7.6;Dec 2, 2002 +79;Global Operations;8.3;Mar 25, 2002 +78;Apotheon;7.8;Feb 3, 2015 +78;Need for Speed: Most Wanted - A Criterion Game;4.4;Oct 30, 2012 +78;Star Wars: Battlefront II;8.8;Oct 31, 2005 +78;The Walking Dead: Season Two Episode 1 - All That Remains;8.5;Dec 17, 2013 +78;The Journey Down: Chapter Two;7.1;Aug 25, 2014 +78;Star Trek: Elite Force II;7.6;Jun 25, 2003 +78;Zuma's Revenge!;7.9;Sep 15, 2009 +78;Baldur's Gate: Enhanced Edition;7.0;Nov 28, 2012 +78;Doom 3: Resurrection of Evil;6.0;Apr 4, 2005 +78;LEGO Indiana Jones: The Original Adventures;7.7;Jun 3, 2008 +78;NASCAR Thunder 2004;7.5;Sep 16, 2003 +78;Transformers: Fall of Cybertron;7.8;Aug 21, 2012 +78;FIFA Soccer 06;6.7;Oct 4, 2005 +78;DeadCore;6.8;Oct 17, 2014 +78;The Walking Dead: Season Two Episode 5 - No Going Back;8.5;Aug 26, 2014 \ No newline at end of file diff --git a/Streams_006/readme.md b/Streams_006/readme.md new file mode 100644 index 0000000..96615d4 --- /dev/null +++ b/Streams_006/readme.md @@ -0,0 +1,45 @@ +# Map und Filter auf Streams +## Lernziel + + + +Einen Stream durch Map- und Filter-Operationen analysieren und gewünschte Daten extrahieren. + +## Aufgabe + +Gehen Sie in das Paket [pr2.streams.map_filter](../sources/src/main/java/pr2/streams/map_filter/). + +In dieser (und den folgenden Aufgaben) werden Sie Daten aus der Spieledatenbank von [Metacritic](http://www.metacritic.com) analysieren. Hierbei wurden die 994 Spiele mit der besten Bewertung ausgewählt. Für jedes Spiel sind angegeben: + + * Name des Spiels + * Metacritic-Score (0-100) + * Benutzerbewertung (0-100). Normalerweise werden die Benutzerbewertungen bei Metacritic on 0-10 mit einer Nachkommastelle angegeben. Für die einfachere Bearbeitung ist dies für Sie aber bereits in den Bereich 0-100 umgerechnet worden. + * Erscheinungsjahr des Spiels + +Die Verwaltung der Daten wurde Ihnen bereits abgenommen und wird von der Klasse `GameDatabase` durchgeführt. Ein einzelnes Spiel wird durch Objekte des Typs `ComputerGame` repräsentiert. + +Schauen Sie sich die Klassen `ComputerGame` und `GameDatabase` an und versuchen Sie deren Funktionsweise zu verstehen. + +Erweitern Sie nun die `main`-Methode von `MapFilterGames` so, dass Sie bestimmte Auswertungen auf den Spielen durchführen können. Folgende Informationen sollen Sie auswerten: + + 1. Alle Spiele im Jahre 2010 mit einem Metascore >= 80 und einem Userscore >= 80. + 2. Das Spiel mit dem größten Unterschied zwischen Metascore und Userscore. + 3. Das Spiel mit dem kleinsten Unterschied zwischen Metascore und Userscore. + +Lassen Sie Ihr Programm laufen und überprüfen Sie, ob die richtigen Informationen ausgegeben werden. + +Die Datei mit den Spielen finden Sie unter [games.txt](../sources/src/main/resources/pr2/streams/map_filter/games.txt). + + + \ No newline at end of file diff --git a/Streams_007/games.txt b/Streams_007/games.txt new file mode 100644 index 0000000..3390355 --- /dev/null +++ b/Streams_007/games.txt @@ -0,0 +1,994 @@ +96;Half-Life 2;9.2;Nov 16, 2004 +96;Grand Theft Auto V;7.8;Apr 14, 2015 +96;The Orange Box;9.3;Oct 10, 2007 +96;Half-Life;9.1;Oct 31, 1998 +96;BioShock;8.4;Aug 21, 2007 +95;Baldur's Gate II: Shadows of Amn;9.2;Sep 24, 2000 +95;Portal 2;8.8;Apr 19, 2011 +94;The Elder Scrolls V: Skyrim;8.1;Nov 11, 2011 +94;Mass Effect 2;8.7;Jan 26, 2010 +94;Grand Theft Auto: Vice City;8.8;May 12, 2003 +94;Civilization II;9.0;Feb 29, 1996 +94;Quake;8.8;Jun 22, 1996 +94;BioShock Infinite;8.5;Mar 26, 2013 +94;The Elder Scrolls IV: Oblivion;8.0;Mar 20, 2006 +94;Grim Fandango;9.1;Sep 30, 1998 +94;Diablo;8.7;Nov 30, 1996 +94;Sid Meier's Civilization IV;8.2;Oct 25, 2005 +93;The Witcher 3: Wild Hunt;9.1;May 19, 2015 +93;Company of Heroes;8.8;Sep 13, 2006 +93;Unreal Tournament 2004;8.9;Mar 16, 2004 +93;Starcraft II: Wings of Liberty;8.2;Jul 27, 2010 +93;Minecraft;7.4;May 10, 2009 +93;Grand Theft Auto III;8.4;May 20, 2002 +93;Homeworld;8.9;Aug 31, 1999 +93;Star Wars: Knights of the Old Republic;9.0;Nov 18, 2003 +93;World of Warcraft;7.2;Nov 23, 2004 +93;Grand Theft Auto: San Andreas;8.8;Jun 7, 2005 +92;Call of Duty 4: Modern Warfare;8.5;Nov 5, 2007 +92;Warcraft III: Reign of Chaos;9.1;Jul 3, 2002 +92;The Sims;7.9;Jan 31, 2000 +92;Sid Meier's Gettysburg!;7.7;Sep 30, 1997 +92;World Soccer Winning Eleven 7 International;7.9;Apr 9, 2004 +92;Team Fortress 2;9.2;Apr 8, 2008 +92;System Shock 2;9.1;Aug 11, 1999 +92;Tom Clancy's Splinter Cell: Chaos Theory;8.8;Mar 28, 2005 +92;Undertale;8.2;Sep 15, 2015 +92;Rome: Total War;9.1;Sep 22, 2004 +92;Thief: The Dark Project;9.1;Nov 30, 1998 +92;Age of Empires II: The Age of Kings;9.0;Sep 30, 1999 +92;Unreal Tournament (1999);9.1;Nov 30, 1999 +92;Sid Meier's Alpha Centauri;9.1;Feb 12, 1999 +92;Galactic Civilizations II: Twilight of the Arnor;8.4;Apr 30, 2008 +92;Tiger Woods PGA Tour 2003;6.0;Oct 31, 2002 +91;Dishonored;8.4;Oct 9, 2012 +91;Medal of Honor: Allied Assault;8.6;Jan 20, 2002 +91;Myth: The Fallen Lords;8.8;Oct 31, 1997 +91;World of Warcraft: Wrath of the Lich King;7.4;Nov 13, 2008 +91;F1 Challenge '99-'02;8.3;Jun 24, 2003 +91;Baldur's Gate;9.0;Nov 30, 1998 +91;IL-2 Sturmovik;8.7;Nov 18, 2001 +91;FreeSpace 2;8.8;Sep 30, 1999 +91;Metal Gear Solid V: The Phantom Pain;7.7;Sep 1, 2015 +91;Tom Clancy's Splinter Cell;8.6;Feb 19, 2003 +91;Crysis;8.0;Nov 13, 2007 +91;World of Warcraft: The Burning Crusade;7.9;Jan 16, 2007 +91;Tiger Woods PGA Tour 2005;4.6;Sep 20, 2004 +91;The Longest Journey;8.9;Nov 16, 2000 +91;Tony Hawk's Pro Skater 2;8.5;Oct 31, 2000 +91;Star Wars Jedi Knight: Dark Forces II;8.5;Sep 30, 1997 +91;Batman: Arkham Asylum;8.7;Sep 15, 2009 +91;Galactic Civilizations II: Dark Avatar;8.2;Feb 14, 2007 +91;The Operative: No One Lives Forever;8.9;Nov 9, 2000 +91;Battlefield 2;8.4;Jun 21, 2005 +91;Street Fighter IV;8.0;Jul 1, 2009 +91;Fallout 3;7.9;Oct 28, 2008 +91;Batman: Arkham City;8.6;Nov 22, 2011 +91;Fez;6.5;May 1, 2013 +91;Planescape: Torment;9.3;Nov 30, 1999 +91;Neverwinter Nights;8.1;Jun 16, 2002 +91;No One Lives Forever 2: A Spy in H.A.R.M.'s Way;8.7;Sep 30, 2002 +91;Dragon Age: Origins;8.6;Nov 3, 2009 +91;Mark of the Ninja;8.0;Oct 16, 2012 +91;Dark Souls II;7.1;Apr 25, 2014 +91;Call of Duty;8.5;Oct 29, 2003 +91;Madden NFL 2004;8.2;Aug 12, 2003 +90;The Sims 2;8.8;Sep 14, 2004 +90;World of Warcraft: Cataclysm;5.5;Dec 7, 2010 +90;World of Goo;8.5;Oct 21, 2008 +90;Spelunky;7.2;Aug 8, 2013 +90;Black & White;7.6;Mar 26, 2001 +90;Portal;9.3;Apr 8, 2008 +90;NHL 2001;6.9;Sep 28, 2000 +90;Tony Hawk's Pro Skater 3;8.6;Mar 28, 2002 +90;Deus Ex;9.3;Jun 26, 2000 +90;Half-Life 2: Episode Two;9.2;Oct 10, 2007 +90;Braid;8.6;Jan 26, 2010 +90;The Chronicles of Riddick: Escape From Butcher Bay - Developer's Cut;8.7;Dec 8, 2004 +90;Sid Meier's Civilization III;8.4;Oct 30, 2001 +90;Silent Hunter III;7.8;Mar 15, 2005 +90;Sid Meier's Civilization V;7.8;Sep 21, 2010 +90;Falcon 4.0: Allied Force;8.6;Jun 28, 2005 +90;Deus Ex: Human Revolution;8.5;Aug 23, 2011 +90;Dark Souls III;8.2;Apr 12, 2016 +90;Flight Simulator 2002;8.4;Oct 19, 2001 +90;Brothers: A Tale of Two Sons;8.5;Sep 3, 2013 +90;Dota 2;6.2;Jul 9, 2013 +90;Guild Wars 2;7.9;Aug 28, 2012 +90;Freedom Force;8.0;Mar 24, 2002 +90;GTR 2;8.7;Sep 29, 2006 +90;Grand Theft Auto IV;6.5;Dec 2, 2008 +90;Total War: Shogun 2;8.3;Mar 15, 2011 +90;Empire: Total War;6.9;Mar 3, 2009 +90;Command & Conquer: Red Alert;8.9;Oct 31, 1996 +89;Star Wars Jedi Knight II: Jedi Outcast;8.6;Mar 26, 2002 +89;The Walking Dead: A Telltale Games Series;8.7;Dec 11, 2012 +89;Age of Mythology;8.9;Nov 1, 2002 +89;Sacrifice;8.8;Nov 5, 2000 +89;The Witcher 3: Wild Hunt - Hearts of Stone;8.4;Oct 13, 2015 +89;Pillars of Eternity;8.3;Mar 26, 2015 +89;The Elder Scrolls III: Morrowind;9.0;May 1, 2002 +89;Rocksmith 2014 Edition;7.9;Oct 22, 2013 +89;Fallout;8.9;Sep 30, 1997 +89;World Soccer Winning Eleven 9;8.4;Apr 28, 2006 +89;Worldwide Soccer Manager 2005;8.7;Dec 7, 2004 +89;Left 4 Dead;9.2;Nov 18, 2008 +89;Left 4 Dead 2;8.5;Nov 17, 2009 +89;NASCAR Racing 2002 Season;5.8;Feb 14, 2002 +89;Mass Effect;8.6;May 28, 2008 +89;Combat Mission: Barbarossa to Berlin;8.3;Oct 29, 2002 +89;Homeworld: Cataclysm;8.9;Sep 7, 2000 +89;The Walking Dead: Episode 5 - No Time Left;8.9;Nov 21, 2012 +89;Guild Wars;8.4;Apr 26, 2005 +89;Borderlands 2;8.2;Sep 18, 2012 +89;Max Payne;9.1;Jul 23, 2001 +89;Out of the Park Baseball 15;7.2;Apr 21, 2014 +89;World in Conflict;8.1;Sep 18, 2007 +89;NASCAR Racing 4;8.2;Feb 6, 2001 +89;Duke Nukem 3D;8.8;Jan 31, 1996 +89;Far Cry;8.0;Mar 23, 2004 +89;FIFA Soccer 12;7.1;Sep 27, 2011 +89;XCOM: Enemy Unknown;8.2;Oct 9, 2012 +89;Mass Effect 3;5.4;Mar 6, 2012 +89;Rise of Nations;9.0;May 20, 2003 +89;NASCAR Racing 2003 Season;8.6;Feb 14, 2003 +89;Descent 3;8.3;Jun 14, 2000 +89;The Curse of Monkey Island;9.1;Oct 31, 1997 +89;Battlefield 3;7.5;Oct 25, 2011 +89;Battlefield 1942;8.6;Sep 10, 2002 +89;Madden NFL 2003;8.4;Aug 12, 2002 +89;DiRT 2;8.3;Dec 10, 2009 +89;Stardew Valley;8.5;Feb 26, 2016 +89;Prince of Persia: The Sands of Time;8.6;Nov 30, 2003 +89;Railroad Tycoon II;8.4;Oct 31, 1998 +88;Microsoft Flight Simulator 2004: A Century of Flight;8.2;Jul 29, 2003 +88;Medieval: Total War;8.8;Aug 19, 2002 +88;Mafia;9.1;Aug 27, 2002 +88;LIMBO;8.1;Aug 2, 2011 +88;Nuclear Throne;7.4;Dec 5, 2015 +88;Crusader Kings II: The Old Gods;8.8;May 28, 2013 +88;Assassin's Creed: Brotherhood;8.2;Mar 22, 2011 +88;Superbike 2001;6.5;Oct 9, 2000 +88;F.E.A.R.;8.3;Oct 17, 2005 +88;Kerbal Space Program;8.1;Apr 27, 2015 +88;Tribes 2;8.5;Mar 28, 2001 +88;Age of Empires II: The Conquerors Expansion;9.0;Aug 24, 2000 +88;Tiger Woods PGA Tour 2004;8.8;Sep 22, 2003 +88;Warcraft III: The Frozen Throne;9.0;Jul 1, 2003 +88;Starcraft;9.1;Apr 1, 1998 +88;Far Cry 3;8.2;Dec 4, 2012 +88;XCOM 2;7.0;Feb 5, 2016 +88;World Soccer Winning Eleven 8 International;8.5;Feb 16, 2005 +88;Torchlight II;8.6;Sep 20, 2012 +88;Myth II: Soulblighter;9.0;Nov 30, 1998 +88;Return to Castle Wolfenstein;8.7;Nov 19, 2001 +88;Shogo: Mobile Armor Division;8.9;Sep 30, 1998 +88;Thirty Flights of Loving;5.0;Aug 20, 2012 +88;Hearthstone: Heroes of Warcraft;6.3;Mar 11, 2014 +88;Medieval II: Total War;8.9;Nov 13, 2006 +88;F1 2002;7.6;Jun 13, 2002 +88;The Stanley Parable;8.0;Oct 17, 2013 +88;BioShock 2;8.0;Feb 9, 2010 +88;Counter-Strike: Source;8.9;Sep 26, 2005 +88;Starcraft II: Legacy of the Void;8.3;Nov 10, 2015 +88;Diablo III;4.0;May 15, 2012 +88;Rise of Nations: Thrones & Patriots;8.8;Apr 27, 2004 +88;Sid Meier's Pirates!;8.3;Nov 22, 2004 +88;EVE Online: Special Edition;7.8;Mar 10, 2009 +88;Guacamelee! Gold Edition;7.3;Aug 8, 2013 +88;Armadillo Run;8.2;Apr 22, 2006 +88;Dark Age of Camelot;8.9;Sep 1, 2001 +88;Baldur's Gate II: Throne of Bhaal;8.9;Jun 21, 2001 +88;Counter-Strike;9.3;Nov 8, 2000 +88;Tony Hawk's Pro Skater 4;8.4;Aug 27, 2003 +88;Ori and the Blind Forest;8.7;Mar 11, 2015 +88;Diablo II;8.8;Jun 29, 2000 +88;The Witcher 2: Assassins of Kings;8.5;May 17, 2011 +87;Plants vs. Zombies;8.9;Aug 18, 2009 +87;Doom 3;7.5;Aug 3, 2004 +87;Super Meat Boy;8.3;Apr 5, 2011 +87;Football Manager 2010;9.1;Nov 3, 2009 +87;Oddworld: Abe's Oddysee - New 'n' Tasty;7.8;Feb 25, 2015 +87;Tom Clancy's Splinter Cell: Pandora Tomorrow;8.0;Mar 23, 2004 +87;Europa Universalis II;8.8;Nov 12, 2001 +87;Burnout Paradise: The Ultimate Box;7.5;Feb 5, 2009 +87;Battlefield: Bad Company 2;8.3;Mar 2, 2010 +87;GRID;7.9;Jun 3, 2008 +87;Crypt of the NecroDancer;7.7;Apr 23, 2015 +87;Sins of a Solar Empire;8.2;Feb 4, 2008 +87;MechWarrior 4: Vengeance;8.2;Nov 23, 2000 +87;Thief II: The Metal Age;9.1;Feb 29, 2000 +87;Diablo II: Lord of Destruction;9.1;Jun 27, 2001 +87;Monkey Island 2 Special Edition: LeChuck's Revenge;9.0;Jul 7, 2010 +87;Half-Life 2: Episode One;8.6;Jun 1, 2006 +87;The Swapper;8.7;May 30, 2013 +87;Hitman 2: Silent Assassin;8.2;Oct 1, 2002 +87;Year Walk;7.0;Mar 6, 2014 +87;Max Payne 3;7.6;Jun 1, 2012 +87;TowerFall Ascension;6.6;Mar 11, 2014 +87;Battlefield 3: Armored Kill;7.0;Sep 11, 2012 +87;NHL 2002;8.7;Sep 17, 2001 +87;Icewind Dale;8.3;Jun 29, 2000 +87;The Witness;6.6;Jan 26, 2016 +87;Brothers in Arms: Road to Hill 30;7.1;Mar 15, 2005 +87;Kohan: Immortal Sovereigns;8.6;Mar 14, 2001 +87;Day of the Tentacle Remastered;7.9;Mar 21, 2016 +87;Dead Space 2;8.3;Jan 25, 2011 +87;Diablo III: Reaper of Souls;6.6;Mar 25, 2014 +87;Shogun: Total War Warlord Edition;8.7;Aug 13, 2001 +87;Serious Sam: The First Encounter;8.4;Mar 21, 2001 +87;Grand Prix 3;8.3;Aug 24, 2000 +87;Call of Duty: United Offensive;8.3;Sep 14, 2004 +87;Divinity: Original Sin;8.7;Jan 17, 2014 +87;Company of Heroes: Opposing Fronts;8.6;Sep 24, 2007 +87;Psychonauts;8.9;Apr 19, 2005 +87;Gears of War;7.8;Nov 6, 2007 +87;Out of the Park Baseball 4;7.8;Feb 28, 2002 +87;Europa Universalis IV;8.7;Aug 13, 2013 +87;NHL 2004;8.2;Sep 22, 2003 +87;Zeus: Master of Olympus;9.0;Oct 22, 2000 +87;World of Warcraft: Warlords of Draenor;6.0;Nov 13, 2014 +87;Warhammer 40,000: Dawn of War - Dark Crusade;8.9;Oct 9, 2006 +87;Commandos 2: Men of Courage;8.8;Sep 20, 2001 +86;Tales From The Borderlands: Episode 5 - The Vault of the Traveler;8.7;Oct 20, 2015 +86;Bastion;8.6;Aug 16, 2011 +86;Gone Home;5.4;Aug 15, 2013 +86;Pac-Man Championship Edition DX +;7.3;Sep 24, 2013 +86;Supreme Commander;8.3;Feb 20, 2007 +86;Total War: Shogun 2 - Fall of the Samurai;8.4;Mar 23, 2012 +86;Startopia;8.7;Jun 19, 2001 +86;Enemy Engaged: RAH-66 Comanche Versus Ka-52 Hokum;8.3;Jul 31, 2000 +86;Fallout 2;9.2;Sep 30, 1998 +86;Final Fantasy XIV: Heavensward;7.7;Jun 23, 2015 +86;Football Manager 2013;6.7;Nov 1, 2012 +86;Out of the Park Baseball 14;8.6;Apr 15, 2013 +86;The Witcher: Enhanced Edition;8.5;Sep 16, 2008 +86;Borderlands: The Secret Armory of General Knoxx;7.6;Feb 25, 2010 +86;Call of Duty 2;8.3;Oct 25, 2005 +86;Astebreed;7.3;May 30, 2014 +86;Ground Control;7.8;May 31, 2000 +86;Rise of the Tomb Raider;8.0;Jan 28, 2016 +86;Resident Evil 5;7.1;Sep 18, 2009 +86;Saints Row IV;7.4;Aug 20, 2013 +86;Black Mesa;9.0;Sep 14, 2012 +86;EverQuest: Omens of War;7.7;Sep 13, 2004 +86;Steel Beasts;8.4;Sep 24, 2000 +86;Total Annihilation;8.9;Sep 30, 1997 +86;Need for Speed: Hot Pursuit;6.7;Nov 16, 2010 +86;FIFA Soccer 13;6.6;Sep 25, 2012 +86;Sid Meier's Civilization IV: Beyond the Sword;8.6;Jul 23, 2007 +86;The Sims 3;7.6;Jun 2, 2009 +86;Freedom Force vs The 3rd Reich;7.7;Mar 8, 2005 +86;The Binding of Isaac: Rebirth;8.3;Nov 4, 2014 +86;Tribes: Ascend;7.7;Apr 12, 2012 +86;Titanfall;6.1;Mar 11, 2014 +86;Rayman Origins;8.4;Mar 29, 2012 +86;Her Story;5.7;Jun 24, 2015 +86;Starcraft II: Heart of the Swarm;7.9;Mar 12, 2013 +86;Mass Effect 2: Lair of the Shadow Broker;8.5;Sep 7, 2010 +86;LEGO Star Wars II: The Original Trilogy;8.3;Sep 12, 2006 +86;Dungeon Siege;7.9;Mar 31, 2002 +86;Crysis 2;6.7;Mar 22, 2011 +86;Call of Duty: Modern Warfare 2;4.1;Nov 10, 2009 +86;The Secret of Monkey Island: Special Edition;9.1;Jul 15, 2009 +86;Max Payne 2: The Fall of Max Payne;9.0;Oct 14, 2003 +86;Homeworld Remastered Collection;8.2;Feb 25, 2015 +86;Galactic Civilizations II: Dread Lords;8.0;Feb 21, 2006 +86;Tomb Raider;8.5;Mar 5, 2013 +86;Star Trek: Voyager Elite Force;8.2;Sep 20, 2000 +86;Worldwide Soccer Manager 2008;8.4;Oct 23, 2007 +86;IL-2 Sturmovik: Forgotten Battles;8.6;Mar 2, 2003 +86;Hyper Light Drifter;8.1;Mar 31, 2016 +86;DiRT 3;6.9;May 24, 2011 +86;Unreal Tournament 2003;8.1;Sep 30, 2002 +86;Age of Wonders II: The Wizard's Throne;8.4;Jun 12, 2002 +86;Links 2001;6.8;Oct 24, 2000 +86;EverQuest: The Ruins of Kunark;8.8;Mar 31, 2000 +86;Full Throttle;8.8;Apr 30, 1995 +86;The Lord of the Rings Online: Shadows of Angmar;8.1;Apr 24, 2007 +86;Pony Island;6.8;Jan 4, 2016 +86;Warhammer 40,000: Dawn of War;8.8;Sep 20, 2004 +86;Warhammer Online: Age of Reckoning;7.9;Sep 16, 2008 +86;Dead Space;8.0;Oct 20, 2008 +86;Bionic Commando Rearmed;7.0;Aug 13, 2008 +86;Command & Conquer: Red Alert 2 - Yuri's Revenge;9.0;Oct 10, 2001 +86;Europa Universalis;8.1;Feb 2, 2001 +86;Escape from Monkey Island;8.2;Nov 8, 2000 +86;IL-2 Sturmovik: 1946;8.8;Mar 13, 2007 +86;XCOM: Enemy Within;7.9;Nov 12, 2013 +86;Battlefield 3: Back to Karkand;7.2;Dec 13, 2011 +86;Heroes of the Storm;6.7;Jun 2, 2015 +86;Civilization III: Conquests;8.4;Nov 4, 2003 +86;Path of Exile;8.0;Jan 25, 2013 +86;Battlefield: Bad Company 2 Vietnam;8.1;Dec 18, 2010 +86;Assassin's Creed II;6.8;Mar 9, 2010 +86;The Elder Scrolls IV: Shivering Isles;8.4;Mar 26, 2007 +86;DiRT Rally;8.8;Dec 7, 2015 +86;Rocket League;8.1;Jul 7, 2015 +86;Allegiance;8.2;Mar 31, 2000 +85;The Talos Principle;8.5;Dec 11, 2014 +85;Cities: Skylines;8.9;Mar 10, 2015 +85;Falcon 4.0;8.0;Nov 30, 1998 +85;Tom Clancy's Rainbow Six;8.6;Jul 31, 1998 +85;Madden NFL 2005;6.4;Sep 14, 2004 +85;Legend of Grimrock II;8.0;Oct 15, 2014 +85;Sam & Max Episode 205: What's New, Beelzebub?;8.6;Apr 10, 2008 +85;Dragon Age: Inquisition;5.8;Nov 18, 2014 +85;Tales from the Borderlands: A Telltale Game Series;8.7;Apr 26, 2016 +85;Tom Clancy's Rainbow Six: Vegas;7.7;Dec 12, 2006 +85;City of Heroes;8.5;Apr 27, 2004 +85;SWAT 4;8.6;Apr 5, 2005 +85;Clive Barker's Undying;8.7;Feb 21, 2001 +85;EverQuest;8.2;Mar 16, 1999 +85;Warhammer 40,000: Dawn of War II;8.1;Feb 18, 2009 +85;Command & Conquer 3: Tiberium Wars;8.0;Mar 26, 2007 +85;Bit.Trip Presents...Runner2: Future Legend of Rhythm Alien;8.2;Feb 26, 2013 +85;Hotline Miami;8.5;Oct 23, 2012 +85;Out of the Park Baseball 13;8.2;Apr 9, 2012 +85;Wizardry 8;8.6;Nov 14, 2001 +85;Aliens Versus Predator 2;8.7;Oct 31, 2001 +85;Operation Flashpoint: Cold War Crisis;9.0;Aug 30, 2001 +85;Tropico;8.4;Apr 5, 2001 +85;Giants: Citizen Kabuto;8.9;Dec 6, 2000 +85;NASCAR SimRacing;4.9;Feb 15, 2005 +85;The Lord of the Rings Online: Mines of Moria;8.3;Nov 17, 2008 +85;The Binding of Isaac: Afterbirth;8.1;Oct 30, 2015 +85;Amnesia: The Dark Descent;8.6;Feb 17, 2011 +85;GTR FIA Racing;8.6;May 3, 2005 +85;Football Manager 2011;8.4;Nov 23, 2010 +85;Dust: An Elysian Tail;8.5;May 24, 2013 +85;South Park: The Stick of Truth;8.6;Mar 4, 2014 +85;Dark Souls: Prepare to Die Edition;7.4;Aug 24, 2012 +85;Medieval II: Total War Kingdoms;8.8;Aug 28, 2007 +85;Shovel Knight;7.9;Jun 26, 2014 +85;DmC: Devil May Cry;6.7;Jan 24, 2013 +85;Peggle Deluxe;8.1;Feb 19, 2008 +85;Monopoly Tycoon;8.0;Sep 24, 2001 +85;Indigo Prophecy;8.3;Oct 2, 2005 +85;Prince of Persia: The Two Thrones;8.0;Dec 1, 2005 +85;Sam & Max Episode 204: Chariots of the Dogs;8.1;Mar 13, 2008 +85;Assetto Corsa;8.4;Dec 19, 2014 +85;Machinarium;8.8;Oct 16, 2009 +85;Frozen Synapse;7.7;May 26, 2011 +85;Valkyria Chronicles;8.3;Nov 11, 2014 +85;Freelancer;8.9;Mar 3, 2003 +85;Zenzizenzic;5.9;Jul 23, 2015 +85;The Wolf Among Us: Episode 1 - Faith;9.0;Oct 11, 2013 +85;Mega Man Legacy Collection;7.3;Aug 25, 2015 +85;Warhammer 40,000: Dawn of War II - Chaos Rising;8.7;Mar 11, 2010 +85;Far Cry 2;5.8;Oct 21, 2008 +85;The Walking Dead: Episode 3 - Long Road Ahead;8.4;Aug 29, 2012 +85;AudioSurf;8.8;Feb 15, 2008 +85;BattleBlock Theater;8.0;May 15, 2014 +85;Star Wars: Knights of the Old Republic II - The Sith Lords;8.4;Feb 8, 2005 +85;MVP Baseball 2005;8.1;Feb 22, 2005 +85;The Elder Scrolls III: Bloodmoon;8.5;Jun 3, 2003 +85;Rogue Legacy;7.9;Jun 27, 2013 +85;Chaos Reborn;8.4;Oct 26, 2015 +85;Thief: Deadly Shadows;8.4;May 25, 2004 +85;Football Manager 2014;5.4;Oct 30, 2013 +85;System Shock: Enhanced Edition;7.9;Sep 22, 2015 +85;EverQuest: Gates of Discord;6.8;Feb 9, 2004 +85;FIFA 2001 Major League Soccer;7.3;Oct 30, 2000 +85;Sid Meier's Civilization V: Brave New World;8.6;Jul 9, 2013 +85;Final Fantasy XI;7.5;Oct 28, 2003 +85;Serious Sam: The Second Encounter;8.5;Feb 4, 2002 +85;The Sims: Hot Date;7.9;Nov 12, 2001 +85;American McGee's Alice;8.2;Dec 6, 2000 +85;Trials Evolution: Gold Edition;6.7;Mar 21, 2013 +85;Warhammer 40,000: Dawn of War - Winter Assault;8.3;Sep 21, 2005 +85;Tony Hawk's Underground 2;7.9;Oct 4, 2004 +85;Papers, Please;8.5;Aug 8, 2013 +85;Star Wars: The Old Republic;5.9;Dec 20, 2011 +85;Anarchy Online: Shadowlands;8.7;Sep 8, 2003 +85;Dark Age of Camelot: Shrouded Isles;8.8;Dec 2, 2002 +85;Obsidian;8.3;Dec 31, 1996 +84;The Walking Dead: Episode 2 - Starved for Help;8.6;Jun 29, 2012 +84;Saints Row: The Third;8.1;Nov 15, 2011 +84;Fallout: New Vegas;8.5;Oct 19, 2010 +84;The Movies;8.3;Nov 8, 2005 +84;Neverwinter Nights: Hordes of the Underdark;8.6;Dec 2, 2003 +84;Command & Conquer: Generals;8.3;Feb 10, 2003 +84;Sid Meier's SimGolf;8.2;Jan 23, 2002 +84;Middle-earth: Shadow of Mordor;8.0;Sep 30, 2014 +84;SpaceChem;8.4;Mar 2, 2011 +84;Downwell;6.2;Oct 15, 2015 +84;Pinball FX 2;8.0;Oct 27, 2012 +84;Devil Daggers;6.7;Feb 18, 2016 +84;PlanetSide 2;7.0;Nov 20, 2012 +84;Enter the Gungeon;7.4;Apr 5, 2016 +84;GT Legends;8.6;Jan 23, 2006 +84;Hearthstone: Goblins Vs. Gnomes;6.6;Dec 8, 2014 +84;Space Rangers 2: Rise of the Dominators;9.0;Mar 27, 2006 +84;Tales From The Borderlands: Episode 1 - Zer0 Sum;8.4;Nov 25, 2014 +84;Puzzle Quest: Challenge of the Warlords;8.3;Oct 10, 2007 +84;Heroes of Might and Magic IV;7.6;Mar 29, 2002 +84;Command & Conquer: Red Alert 2;8.9;Oct 21, 2000 +84;Shogun: Total War;8.7;Jun 13, 2000 +84;DiRT;7.2;Jun 19, 2007 +84;Darkest Dungeon;8.0;Jan 19, 2016 +84;Super Street Fighter IV: Arcade Edition;7.8;Jul 13, 2011 +84;Football Manager 2012;8.0;Oct 20, 2011 +84;Guild Wars Factions;8.5;Apr 28, 2006 +84;80 Days (2015);6.1;Sep 29, 2015 +84;Spore;5.2;Sep 7, 2008 +84;Unity of Command;7.2;Nov 15, 2011 +84;Hearthstone: The Grand Tournament;4.0;Aug 24, 2015 +84;Metro Redux;8.0;Aug 26, 2014 +84;Time Gentlemen, Please!;7.6;Jul 2, 2009 +84;Europa Universalis IV: Wealth of Nations;8.4;May 29, 2014 +84;Mass Effect 3: Citadel;7.8;Mar 5, 2013 +84;Disciples II: Dark Prophecy;8.6;Jan 22, 2002 +84;Just Cause 2;7.7;Mar 23, 2010 +84;Crysis Warhead;7.9;Sep 16, 2008 +84;Assassin's Creed IV: Black Flag;7.7;Nov 19, 2013 +84;Age of Mythology: The Titans;8.7;Sep 30, 2003 +84;SimCity 4;8.7;Jan 12, 2003 +84;Microsoft Train Simulator;8.4;May 31, 2001 +84;Rise of Nations: Rise of Legends;8.5;May 9, 2006 +84;TOCA Race Driver 3;7.8;Feb 24, 2006 +84;FTL: Faster Than Light;8.4;Sep 14, 2012 +84;SOMA;8.2;Sep 22, 2015 +84;DEFCON: Everybody Dies;8.3;Mar 26, 2007 +84;Tron 2.0;8.3;Aug 26, 2003 +84;Brothers in Arms: Earned in Blood;7.3;Oct 6, 2005 +84;Grim Fandango Remastered;8.0;Jan 27, 2015 +84;The Lord of the Rings: The Battle for Middle-Earth II;7.5;Mar 2, 2006 +84;Battlefield Vietnam;7.4;Mar 16, 2004 +84;Medieval: Total War - Viking Invasion;8.8;May 7, 2003 +84;Fallout 4;5.4;Nov 10, 2015 +84;Guild Wars Nightfall;8.7;Oct 26, 2006 +84;The Binding of Isaac;8.3;Sep 28, 2011 +84;Enemy Territory: Quake Wars;8.3;Oct 2, 2007 +84;Trine 2;8.4;Dec 7, 2011 +84;Rift;7.3;Mar 1, 2011 +84;The Wolf Among Us: Episode 5 - Cry Wolf;8.8;Jul 8, 2014 +84;Shift 2: Unleashed;6.1;Mar 29, 2011 +84;Sid Meier's Civilization IV: Warlords;8.2;Jul 24, 2006 +84;Battlefield 1942: The Road to Rome;7.9;Feb 2, 2003 +84;Poseidon;8.4;Jun 25, 2001 +84;F1 2010;6.6;Sep 22, 2010 +84;Shatter;7.4;Mar 15, 2010 +84;Darwinia;7.9;Jun 12, 2006 +84;Ultimate General: Gettysburg;8.0;Oct 16, 2014 +83;Final Fantasy XI: Treasures of Aht Urhgan;7.6;Apr 18, 2006 +83;MDK2;8.4;May 31, 2000 +83;Gunpoint;8.4;Jun 3, 2013 +83;Beyond Good & Evil;8.7;Nov 19, 2003 +83;Anno 2070;7.0;Nov 17, 2011 +83;SMITE;8.3;Mar 25, 2014 +83;Halo: Combat Evolved;7.4;Sep 30, 2003 +83;Grim Dawn;8.9;Feb 25, 2016 +83;Silent Storm;8.9;Jan 20, 2004 +83;Command & Conquer: Generals - Zero Hour;9.0;Sep 22, 2003 +83;Homeworld 2;8.3;Sep 16, 2003 +83;Galactic Civilizations;8.1;Mar 26, 2003 +83;EverQuest: The Shadows of Luclin;7.2;Dec 2, 2001 +83;Orcs Must Die!;8.1;Oct 11, 2011 +83;Life is Strange;8.6;Jan 19, 2016 +83;Fable: The Lost Chapters;8.7;Sep 20, 2005 +83;Unreal Tournament III;8.0;Nov 19, 2007 +83;The Blackwell Epiphany;7.6;Apr 24, 2014 +83;The Lord of the Rings Online: Siege of Mirkwood;7.1;Dec 1, 2009 +83;Out of the Park Baseball 10;8.3;Jun 2, 2009 +83;Tomb Raider: Anniversary;8.0;Jun 5, 2007 +83;Need for Speed: Shift;5.7;Sep 15, 2009 +83;Hearts of Iron II;8.6;Jan 4, 2005 +83;FIFA Soccer 11;7.6;Sep 28, 2010 +83;Project CARS;7.0;May 6, 2015 +83;FIFA Soccer 2003;6.8;Nov 2, 2002 +83;Icewind Dale II;8.3;Aug 26, 2002 +83;Age of Empires;8.8;Sep 30, 1997 +83;EverQuest II: Echoes of Faydwer;8.4;Nov 13, 2006 +83;EverQuest II;7.3;Nov 8, 2004 +83;Terraria;8.5;May 16, 2011 +83;Final Fantasy XIV Online: A Realm Reborn;6.7;Aug 27, 2013 +83;Card Hunter (2013);7.9;Sep 12, 2013 +83;Sam & Max: The Devil's Playhouse - Episode 2: The Tomb of Sammun-Mak;7.9;May 18, 2010 +83;This War of Mine;8.4;Nov 14, 2014 +83;Darksiders;7.7;Sep 23, 2010 +83;Tom Clancy's Rainbow Six 3: Raven Shield;8.9;Mar 19, 2003 +83;World of Outlaws: Sprint Cars;7.9;Feb 11, 2003 +83;Colin McRae Rally 2.0;8.4;Feb 14, 2001 +83;Combat Flight Simulator 2: WWII Pacific Theater;8.1;Oct 13, 2000 +83;Orcs Must Die! 2;7.9;Jul 30, 2012 +83;Prey;7.9;Jul 11, 2006 +83;Metal Gear Rising: Revengeance;7.9;Jan 9, 2014 +83;Starseed Pilgrim;6.3;Apr 16, 2013 +83;Age of Conan: Rise of the Godslayer;8.4;May 11, 2010 +83;Alan Wake;8.0;Feb 16, 2012 +83;Tiger Woods PGA Tour 2002;5.0;Feb 24, 2002 +83;Monaco: What's Yours Is Mine;7.7;Apr 24, 2013 +83;Transistor;8.3;May 20, 2014 +83;Helldivers;6.9;Dec 7, 2015 +83;Worldwide Soccer Manager 2009;8.1;Nov 18, 2008 +83;Call of Duty: World at War;7.5;Nov 10, 2008 +83;Torchlight;8.0;Jan 5, 2010 +83;Prison Architect;8.3;Oct 6, 2015 +83;Valdis Story: Abyssal City;8.1;Oct 30, 2013 +83;Crimson Skies;8.2;Sep 17, 2000 +83;RACE 07: Official WTCC Game;9.0;Oct 9, 2007 +83;SUPERHOT;7.6;Feb 25, 2016 +83;EverQuest II: Rise of Kunark;7.9;Nov 13, 2007 +83;Dark Age of Camelot: Catacombs;8.6;Dec 7, 2004 +83;Spore Creature Creator;8.1;Jun 17, 2008 +83;Colin McRae Rally 2005;7.0;Oct 28, 2004 +83;Tom Clancy's Splinter Cell: Conviction;5.2;Apr 27, 2010 +83;Tribes: Vengeance;7.6;Oct 12, 2004 +83;L.A. Noire: The Complete Edition;7.9;Nov 8, 2011 +83;GTR Evolution;8.2;Sep 2, 2008 +83;Life is Strange: Episode 5 - Polarized;8.4;Oct 20, 2015 +83;BROFORCE;8.0;Oct 15, 2015 +83;Independence War 2: Edge of Chaos;8.4;Aug 22, 2001 +83;Myst III: Exile;8.2;May 8, 2001 +83;Superbrothers: Sword & Sworcery EP;6.4;Apr 16, 2012 +83;Sid Meier's Civilization IV: Colonization;6.7;Sep 22, 2008 +83;Europa Universalis III;8.4;Jan 23, 2007 +83;F1 2011;7.2;Sep 20, 2011 +83;Prince of Persia: Warrior Within;8.4;Nov 30, 2004 +83;Danganronpa: Trigger Happy Havoc;7.6;Feb 18, 2016 +83;Counter-Strike: Global Offensive;7.8;Aug 21, 2012 +83;Outland;7.1;Sep 29, 2014 +83;MechWarrior 4: Mercenaries;8.6;Nov 7, 2002 +83;Metal Gear Solid;9.0;Sep 24, 2000 +82;Invisible, Inc.;8.0;May 12, 2015 +82;Dark Souls II: Crown of the Ivory King;7.8;Sep 29, 2014 +82;Red Faction: Guerrilla;7.5;Sep 15, 2009 +82;The Book of Unwritten Tales;8.2;Oct 28, 2011 +82;Capitalism II;9.0;Dec 16, 2001 +82;Rally Trophy;8.5;Nov 20, 2001 +82;Dawn of Discovery;8.8;Jun 17, 2009 +82;City of Villains;8.1;Oct 31, 2005 +82;Kentucky Route Zero - Act II;8.0;May 31, 2013 +82;Tom Clancy's Splinter Cell: Blacklist;7.4;Aug 20, 2013 +82;Act of War: Direct Action;8.5;Mar 15, 2005 +82;Sokobond;7.8;Aug 27, 2013 +82;Sam & Max Episode 105: Reality 2.0;8.4;Mar 29, 2007 +82;Bejeweled 3;8.0;Dec 7, 2010 +82;Dangerous Waters;8.8;Feb 22, 2005 +82;Tomb Raider: Legend;7.8;Apr 11, 2006 +82;Asheron's Call 2: Fallen Kings;8.8;Nov 20, 2002 +82;Gemini Rue;8.4;Feb 24, 2011 +82;Antichamber;8.2;Jan 31, 2013 +82;Neverwinter Nights 2;6.5;Oct 31, 2006 +82;Dragon Age: Origins - Awakening;7.7;Mar 16, 2010 +82;Door Kickers;8.2;Oct 20, 2014 +82;Hearthstone: Blackrock Mountain;6.4;Apr 2, 2015 +82;Rome: Total War Barbarian Invasion;8.4;Sep 27, 2005 +82;Hacknet;7.3;Aug 12, 2015 +82;Tales of Monkey Island Chapter 3: Lair of the Leviathan;7.8;Sep 29, 2009 +82;Neverwinter Nights 2: Mask of The Betrayer;8.8;Oct 9, 2007 +82;Sins of a Solar Empire: Rebellion;7.8;Jun 12, 2012 +82;Broken Sword: The Sleeping Dragon;7.6;Nov 17, 2003 +82;Age of Wonders: Shadow Magic;8.5;Jul 25, 2003 +82;Tom Clancy's Ghost Recon: Desert Siege;8.4;Mar 27, 2002 +82;Warlords Battlecry II;8.5;Mar 11, 2002 +82;Football Manager Live;2.9;Jan 23, 2009 +82;Marvel: Ultimate Alliance;8.3;Oct 24, 2006 +82;The Talos Principle: Road To Gehenna;7.6;Jul 23, 2015 +82;Lara Croft and the Guardian of Light;8.2;Sep 28, 2010 +82;Aquaria;8.3;Dec 7, 2007 +82;Need for Speed: Underground;8.3;Nov 17, 2003 +82;TrackMania Sunrise;8.5;May 6, 2005 +82;King's Quest Chapter 1: A Knight to Remember;7.2;Jul 28, 2015 +82;Dragon Age II;4.4;Mar 8, 2011 +82;Endless Legend;7.9;Apr 24, 2014 +82;Tom Clancy's Ghost Recon: Island Thunder;8.3;Sep 25, 2002 +82;S.T.A.L.K.E.R.: Shadow of Chernobyl;8.4;Mar 20, 2007 +82;Kero Blaster;6.9;May 11, 2014 +82;Monday Night Combat;7.3;Jan 24, 2011 +82;The Wolf Among Us: Episode 3 - A Crooked Mile;8.6;Apr 8, 2014 +82;Airborne Assault: Red Devils Over Arnhem;7.4;Jun 17, 2002 +82;Fallout Tactics: Brotherhood of Steel;7.9;Mar 14, 2001 +82;Need for Speed: Underground 2;8.5;Nov 9, 2004 +82;NHL Eastside Hockey Manager 2005;6.6;Oct 5, 2005 +82;Legend of Grimrock;8.1;Apr 11, 2012 +82;Dominions 3: The Awakening;8.1;Sep 29, 2006 +82;Bulletstorm;7.7;Feb 22, 2011 +82;Borderlands 2: Mr. Torgue's Campaign of Carnage;7.3;Nov 20, 2012 +82;Desktop Dungeons;8.2;Oct 17, 2010 +82;Fallout: New Vegas - Old World Blues;7.8;Jul 19, 2011 +82;Crusader Kings II;8.7;Feb 14, 2012 +82;MVP Baseball 2004;7.9;Mar 9, 2004 +82;Europa 1400: The Guild;8.6;Nov 18, 2002 +82;Battle Realms;8.6;Nov 7, 2001 +82;Warlords Battlecry;8.2;Jul 9, 2000 +82;Sam & Max Episode 201: Ice Station Santa;8.6;Nov 8, 2007 +82;Technobabylon;7.8;May 21, 2015 +82;World of Warcraft: Mists of Pandaria;4.8;Sep 25, 2012 +82;FIFA 15;4.2;Sep 23, 2014 +82;Recettear: An Item Shop's Tale;8.6;Sep 10, 2010 +82;ETHER One;6.9;Mar 25, 2014 +82;The Vanishing of Ethan Carter;8.1;Sep 25, 2014 +82;Flight Simulator X: Acceleration;7.3;Oct 23, 2007 +82;Blood;9.0;May 31, 1997 +82;Command & Conquer: Red Alert 3;6.8;Oct 28, 2008 +82;The Walking Dead: Episode 1 - A New Day;8.4;Apr 24, 2012 +82;Links 2003;6.8;Sep 16, 2002 +82;Earth & Beyond;7.1;Sep 2, 2002 +82;Syberia;8.5;Sep 1, 2002 +82;Virtual Pool 3;7.3;Nov 14, 2000 +82;The Sims: Livin' Large;6.6;Aug 27, 2000 +82;DCS: Black Shark;8.5;Apr 13, 2009 +82;King's Bounty: Armored Princess;8.7;Sep 10, 2010 +82;Age of Wonders III - Golden Realms;8.5;Sep 18, 2014 +82;Strong Bad's Cool Game for Attractive People Episode 5: 8-Bit Is Enough;7.5;Dec 15, 2008 +82;Prince of Persia;7.2;Dec 2, 2008 +82;Joint Operations: Typhoon Rising;8.7;Jun 15, 2004 +82;Xpand Rally;7.4;Apr 20, 2006 +82;Dark Souls II: Crown of the Sunken King;7.3;Jul 22, 2014 +82;Resident Evil HD Remaster;8.2;Jan 20, 2015 +82;Celtic Kings: Rage of War;8.5;Aug 21, 2002 +82;B-17 Flying Fortress: The Mighty 8th;7.3;Dec 13, 2000 +82;EverQuest: The Scars of Velious;7.8;Dec 4, 2000 +82;Metro: Last Light;8.6;May 14, 2013 +82;Rising Storm;8.5;May 30, 2013 +82;Lethal League;7.4;Aug 27, 2014 +82;Botanicula;8.3;Apr 19, 2012 +82;Pro Evolution Soccer 2015;5.8;Nov 13, 2014 +82;Bookworm Adventures Deluxe;7.9;Dec 20, 2006 +82;The Lord of the Rings: The Battle for Middle-Earth;8.6;Dec 6, 2004 +82;Hitman: Blood Money;8.8;May 30, 2006 +82;Need for Speed: Most Wanted;8.5;Nov 15, 2005 +82;OlliOlli2: Welcome to Olliwood;5.2;Aug 11, 2015 +82;WildStar;7.4;Jun 3, 2014 +82;Broken Age: Act 1;7.7;Jan 28, 2014 +82;Divinity II: The Dragon Knight Saga;8.2;Nov 5, 2010 +82;Out of the Park Baseball 9;7.4;Jun 1, 2008 +82;The Simpsons: Hit & Run;8.0;Nov 13, 2003 +82;America's Army;6.1;Aug 28, 2002 +82;Star Trek Bridge Commander;8.1;Feb 27, 2002 +82;The Last Express;8.9;Mar 31, 1997 +81;Quake 4;7.5;Oct 11, 2005 +81;Nidhogg;7.0;Jan 13, 2014 +81;Battlefield 4;6.0;Oct 29, 2013 +81;To the Moon;8.9;Sep 7, 2012 +81;The Sims 3: World Adventures;8.0;Nov 16, 2009 +81;Painkiller;8.0;Apr 12, 2004 +81;Airborne Assault: Highway to the Reich;6.1;Dec 10, 2003 +81;Nancy Drew: Danger on Deception Island;7.7;Oct 1, 2003 +81;Shadowrun: Hong Kong;7.7;Aug 20, 2015 +81;Supreme Commander: Forged Alliance;8.9;Nov 6, 2007 +81;Sunless Sea;7.4;Jul 1, 2014 +81;The Walking Dead: Season Two Episode 3 - In Harm's Way;8.3;May 13, 2014 +81;Marvel Heroes 2015;7.9;Jun 4, 2014 +81;Football Manager 2016;6.4;Nov 13, 2015 +81;VVVVVV;8.1;Jan 11, 2010 +81;Darksiders II;7.9;Aug 14, 2012 +81;Wolfenstein: The New Order;8.2;May 20, 2014 +81;Lone Survivor;7.2;Apr 23, 2012 +81;Alien: Isolation;8.4;Oct 6, 2014 +81;The Witcher;8.8;Oct 30, 2007 +81;Kentucky Route Zero - Act I;7.5;Jan 7, 2013 +81;Jade Empire: Special Edition;8.3;Feb 26, 2007 +81;SWAT 3: Elite Edition;8.4;Oct 6, 2000 +81;Asheron's Call;8.8;Oct 31, 1999 +81;Unravel;8.1;Feb 9, 2016 +81;Midnight Club II;8.0;Jun 30, 2003 +81;Chessmaster 10th Edition;7.4;Aug 12, 2004 +81;Age of Empires III;7.7;Oct 18, 2005 +81;Tales of Monkey Island Chapter 5: Rise of the Pirate God;8.4;Dec 8, 2009 +81;Castlevania: Lords of Shadow Ultimate Edition;7.3;Aug 27, 2013 +81;Strong Bad's Cool Game for Attractive People Episode 2: Strong Badia the Free;8.2;Sep 15, 2008 +81;The Cat Lady;8.7;Dec 4, 2013 +81;Vessel;7.9;Mar 1, 2012 +81;Metro 2033;8.1;Mar 16, 2010 +81;OutRun 2006: Coast 2 Coast;7.8;Jun 27, 2006 +81;Blur;7.3;May 25, 2010 +81;Empires: Dawn of the Modern World;8.2;Oct 21, 2003 +81;Chessmaster 9000;7.7;Aug 31, 2002 +81;Gothic;8.6;Nov 23, 2001 +81;Arcanum: Of Steamworks and Magick Obscura;8.9;Aug 22, 2001 +81;NASCAR Heat;8.6;Sep 27, 2000 +81;Company of Heroes 2: Ardennes Assault;6.1;Nov 17, 2014 +81;PlanetSide;7.3;May 20, 2003 +81;Tales From The Borderlands: Episode 3 - Catch A Ride;8.4;Jun 23, 2015 +81;The Walking Dead: Season Two Episode 2 - A House Divided;8.6;Mar 4, 2014 +81;Kingdoms of Amalur: Reckoning;6.6;Feb 7, 2012 +81;Sam & Max: The Devil's Playhouse - Episode 1: The Penal Zone;8.5;Apr 15, 2010 +81;Borderlands;7.8;Oct 26, 2009 +81;DG2: Defense Grid 2;6.7;Sep 23, 2014 +81;Napoleon: Total War;7.9;Feb 23, 2010 +81;Overlord;8.1;Jun 26, 2007 +81;Firewatch;7.2;Feb 9, 2016 +81;Victoria II: Heart of Darkness;8.7;Apr 16, 2013 +81;Waveform;7.6;Jan 25, 2013 +81;The Elder Scrolls IV: Knights of the Nine;7.5;Nov 21, 2006 +81;Red Orchestra: Ostfront 41-45;8.6;Mar 14, 2006 +81;Stronghold;8.9;Oct 21, 2001 +81;Strong Bad's Cool Game for Attractive People Episode 4: Dangeresque 3: The Criminal Projective;8.5;Nov 17, 2008 +81;Rochard;8.0;Nov 15, 2011 +81;Fallout 3: Broken Steel;7.3;May 5, 2009 +81;Tiger Woods PGA Tour 06;8.1;Sep 20, 2005 +81;RollerCoaster Tycoon 3;4.9;Oct 26, 2004 +81;Dragon's Dogma: Dark Arisen;8.3;Jan 15, 2016 +81;Guild Wars 2: Heart of Thorns;7.3;Oct 23, 2015 +81;AaaaaAAaaaAAAaaAAAAaAAAAA!!! - A Reckless Disregard for Gravity;7.2;Sep 3, 2009 +81;The Sims 2 University;7.8;Feb 28, 2005 +81;Far Cry 3: Blood Dragon;8.1;May 1, 2013 +81;Sid Meier's Civilization: Beyond Earth;5.5;Oct 24, 2014 +81;Disney's Toontown Online;8.7;Oct 6, 2005 +81;Combat Mission 3: Afrika Korps;8.4;Dec 3, 2003 +81;EverQuest: The Planes of Power;8.2;Oct 28, 2002 +81;Rails Across America;8.0;Sep 18, 2001 +81;Wasteland 2;7.3;Sep 19, 2014 +81;Jamestown: Legend of the Lost Colony;7.5;Jun 8, 2011 +81;Call of Duty: Black Ops;5.1;Nov 9, 2010 +81;Kohan II: Kings of War;7.9;Sep 20, 2004 +81;The Age of Decadence;7.9;Oct 15, 2015 +81;Samorost 3;8.3;Mar 24, 2016 +81;Order of Battle: Pacific;6.4;Apr 30, 2015 +81;Empire Earth;8.3;Nov 12, 2001 +81;Star Trek: Deep Space Nine: The Fallen;7.9;Nov 15, 2000 +81;Sam & Max Episode 101: Culture Shock;8.7;Oct 18, 2006 +81;Mirror's Edge (2008);8.1;Jan 12, 2009 +81;TrackMania 2 Canyon;7.7;Sep 14, 2011 +81;Sleeping Dogs;8.2;Aug 14, 2012 +81;Star Wars Jedi Knight: Jedi Academy;8.6;Sep 17, 2003 +81;Mortal Kombat Komplete Edition;8.7;Aug 6, 2013 +81;Shadowrun: Dragonfall;8.3;Feb 27, 2014 +81;Eets;6.4;Mar 29, 2006 +81;World of Warships;6.6;Sep 17, 2015 +81;TOCA Race Driver 2: The Ultimate Racing Simulator;8.0;Apr 15, 2004 +81;Wargame: European Escalation;8.2;Feb 22, 2012 +81;Dungeon Defenders;7.3;Oct 18, 2011 +81;Sam & Max: The Devil's Playhouse - Episode 5: The City That Dares Not Sleep;7.9;Aug 30, 2010 +81;Age of Empires III: The Asian Dynasties;8.5;Oct 23, 2007 +81;Defense Grid: The Awakening;8.8;Jul 29, 2009 +81;Codename: Panzers, Phase One;8.8;Sep 30, 2004 +81;FIFA 16;4.4;Sep 22, 2015 +81;Europa Universalis IV: Conquest of Paradise;7.7;Jan 14, 2014 +81;Ghost Master;8.0;Aug 26, 2003 +81;Divine Divinity;8.5;Sep 22, 2002 +80;The Book of Unwritten Tales 2;7.7;Feb 20, 2015 +80;Galactic Civilizations III;6.6;May 14, 2015 +80;Lovers in a Dangerous Spacetime;7.2;Sep 9, 2015 +80;Age of Conan: Hyborian Adventures;7.3;May 20, 2008 +80;Company of Heroes 2: The Western Front Armies;6.8;Jun 23, 2014 +80;Sid Meier's Civilization V: Gods & Kings;7.7;Jun 19, 2012 +80;Age of Empires III: The WarChiefs;8.1;Oct 17, 2006 +80;Metal Gear Solid V: Ground Zeroes;7.7;Dec 18, 2014 +80;Trials Fusion;6.8;Apr 16, 2014 +80;Syberia II;8.3;Mar 30, 2004 +80;Tom Clancy's Ghost Recon;8.4;Nov 13, 2001 +80;Conquest: Frontier Wars;8.3;Aug 14, 2001 +80;Gabriel Knight 3: Blood of the Sacred, Blood of the Damned;8.8;Oct 5, 1999 +80;Westerado: Double Barreled;7.4;Apr 16, 2015 +80;Anomaly: Warzone Earth;7.3;Apr 8, 2011 +80;Volume;7.2;Aug 18, 2015 +80;GRID 2;5.7;May 27, 2013 +80;The Banner Saga;7.9;Jan 14, 2014 +80;Sam & Max Episode 202: Moai Better Blues;7.7;Jan 10, 2008 +80;Age of Wonders III - Eternal Lords;8.4;Apr 14, 2015 +80;Pro Evolution Soccer 2013;6.8;Sep 25, 2012 +80;Osmos;7.5;Aug 18, 2009 +80;Dungeon Siege II;7.9;Aug 16, 2005 +80;Dead Island;6.8;Sep 6, 2011 +80;Sam & Max Episode 104: Abe Lincoln Must Die!;7.8;Feb 22, 2007 +80;Deus Ex: Invisible War;6.3;Dec 2, 2003 +80;The Sims: Makin' Magic;8.6;Oct 28, 2003 +80;Tom Clancy's Splinter Cell: Double Agent;5.7;Nov 7, 2006 +80;Medal of Honor: Pacific Assault;7.4;Nov 4, 2004 +80;Assassin's Creed: Revelations;7.4;Nov 29, 2011 +80;Grandia II Anniversary Edition;7.6;Aug 24, 2015 +80;Assassin's Creed III;6.2;Nov 20, 2012 +80;Madden NFL 07;7.3;Aug 22, 2006 +80;Outlast;8.4;Sep 4, 2013 +80;The Chronicles of Riddick: Assault on Dark Athena;8.0;Apr 7, 2009 +80;Hearts of Iron II: Doomsday;8.8;Apr 7, 2006 +80;Dishonored: The Brigmore Witches;8.5;Aug 13, 2013 +80;Codename: Panzers, Phase Two;8.0;Jul 25, 2005 +80;Full Spectrum Warrior;7.0;Sep 21, 2004 +80;AI War: Fleet Command;8.4;May 14, 2009 +80;Freedom Fighters;8.3;Oct 1, 2003 +80;NBA Live 2003;8.3;Nov 14, 2002 +80;The Elder Scrolls III: Tribunal;8.2;Nov 6, 2002 +80;Elite: Dangerous;6.4;Dec 16, 2014 +80;Pure;6.9;Sep 16, 2008 +80;Goodbye Deponia;8.1;Oct 17, 2013 +80;SWAT 4: The Stetchkov Syndicate;8.3;Feb 28, 2006 +80;Dropsy;7.3;Sep 10, 2015 +80;Company of Heroes 2: The British Forces;5.9;Sep 3, 2015 +80;Ground Control II: Operation Exodus;8.8;Jun 23, 2004 +80;NBA Live 2004;9.0;Nov 11, 2003 +80;Brutal Legend;7.8;Feb 26, 2013 +80;Tomb Raider: Underworld;7.6;Nov 18, 2008 +80;Oxenfree;7.7;Jan 15, 2016 +80;Titan Quest: Immortal Throne;8.7;Mar 5, 2007 +80;La-Mulana (Remake);7.1;Jul 13, 2012 +80;X-Men Legends II: Rise of Apocalypse;8.4;Sep 20, 2005 +80;SpellForce 2: Shadow Wars;7.6;May 5, 2006 +80;Fritz 8 Deluxe;7.8;Dec 1, 2004 +80;Trine;8.2;Sep 11, 2009 +80;Dishonored: The Knife of Dunwall;8.1;Apr 16, 2013 +80;Company of Heroes 2;2.0;Jun 25, 2013 +80;Natural Selection 2;8.4;Oct 30, 2012 +80;Read Only Memories;7.2;Oct 5, 2015 +80;The Sims 3: Into the Future;5.4;Oct 22, 2013 +80;Borderlands 2: Captain Scarlett and Her Pirate's Booty;7.4;Oct 16, 2012 +80;FATE;8.3;Sep 19, 2006 +80;2002 FIFA World Cup;7.9;Apr 30, 2002 +80;Asheron's Call Dark Majesty;8.1;Nov 4, 2001 +80;The Bug Butcher;8.2;Jan 19, 2016 +80;Dragonshard;7.4;Oct 2, 2005 +80;Icewind Dale: Enhanced Edition;7.6;Oct 30, 2014 +80;The Magic Circle;7.3;Jul 9, 2015 +80;Far Cry 4;6.6;Nov 18, 2014 +80;Super Time Force Ultra;6.6;Aug 25, 2014 +80;Day of Defeat: Source;9.1;Feb 7, 2006 +80;Battlefield 2142;6.8;Oct 17, 2006 +80;World of Tanks;3.8;Sep 6, 2011 +80;Vampire: The Masquerade - Bloodlines;9.0;Nov 16, 2004 +80;Dark Souls II: Scholar of the First Sin;7.4;Apr 1, 2015 +80;Warhammer 40,000: Dawn of War II - Retribution;7.8;Mar 1, 2011 +80;Panzer Corps;7.5;Jul 11, 2011 +80;Men of War;8.1;Mar 16, 2009 +80;Fallen Enchantress: Legendary Heroes;7.7;May 22, 2013 +80;The Walking Dead: Episode 4 - Around Every Corner;8.5;Oct 10, 2012 +80;Tales of Monkey Island Chapter 4: The Trial and Execution of Guybrush Threepwood;8.4;Oct 30, 2009 +80;Penny Arcade Adventures: Episode Two;7.7;Nov 7, 2008 +80;Time Commando;8.9;Jul 31, 1996 +80;Sins of a Solar Empire: Entrenchment;8.1;Feb 25, 2009 +80;F1 2012;6.9;Sep 18, 2012 +80;Luftrausers;6.8;Mar 18, 2014 +80;Naruto Shippuden: Ultimate Ninja Storm 3 Full Burst;7.9;Oct 24, 2013 +80;Stealth Bastard Deluxe;8.3;Nov 28, 2012 +80;Tom Clancy's Ghost Recon Advanced Warfighter;7.7;May 3, 2006 +80;LEGO Batman: The Videogame;7.9;Sep 23, 2008 +80;Stacking;7.9;Mar 6, 2012 +80;Age of Wonders III;7.8;Mar 31, 2014 +80;Life is Strange: Episode 3 - Chaos Theory;9.0;May 19, 2015 +80;The Legend of Heroes: Trails in the Sky SC;8.4;Oct 29, 2015 +80;Proteus;5.6;Jan 30, 2013 +80;Robin Hood: The Legend of Sherwood;8.3;Nov 14, 2002 +80;Soldier of Fortune II: Double Helix;7.3;May 20, 2002 +80;RollerCoaster Tycoon: Loopy Landscapes;9.0;Sep 30, 2000 +80;Toki Tori;7.9;Jan 28, 2010 +80;RoboBlitz;8.3;Nov 7, 2006 +80;Wargame: AirLand Battle;8.1;May 29, 2013 +80;Football Manager 2015;6.0;Nov 7, 2014 +80;The Suffering;8.2;Jun 8, 2004 +80;Gish;7.2;Sep 17, 2004 +80;Axiom Verge;8.2;May 14, 2015 +80;Driver: San Francisco;7.0;Sep 27, 2011 +80;The Corporate Machine;7.5;Jul 14, 2001 +80;Dungeons & Dragons: Chronicles of Mystara;6.7;Jun 18, 2013 +80;Disciples II: Rise of the Elves;8.1;Nov 25, 2003 +80;MechCommander 2;8.3;Jul 18, 2001 +80;Waterloo: Napoleon's Last Battle;7.5;Mar 25, 2001 +80;Chessmaster 8000;6.4;Nov 14, 2000 +80;Circle of Blood;8.6;Sep 30, 1996 +80;BioShock Infinite: Burial at Sea - Episode Two;8.5;Mar 25, 2014 +80;S.T.A.L.K.E.R.: Call of Pripyat;8.7;Feb 2, 2010 +80;The Walking Dead: Season Two - A Telltale Games Series;8.3;Dec 17, 2013 +80;FLY'N;8.2;Nov 9, 2012 +80;Total War: Attila;7.3;Feb 17, 2015 +80;The Wolf Among Us;8.8;Oct 11, 2013 +80;Nancy Drew: Secret of the Old Clock;8.1;Jul 26, 2005 +80;ArcheAge;3.6;Sep 16, 2014 +80;CAPSIZED;7.1;Apr 29, 2011 +80;Microsoft Flight Simulator X;7.6;Oct 17, 2006 +80;Myst V: End of Ages;7.8;Sep 19, 2005 +80;Railroad Tycoon 3;7.7;Oct 23, 2003 +80;Hostile Waters: Antaeus Rising;8.1;Jun 13, 2001 +79;Dustforce;7.9;Jan 17, 2012 +79;Empire Earth II;7.0;Apr 26, 2005 +79;Fallout 3: Point Lookout;7.8;Jun 23, 2009 +79;Test Drive Unlimited;8.1;Mar 20, 2007 +79;Dying Light: The Following;8.3;Feb 9, 2016 +79;The Path;7.0;Mar 18, 2009 +79;Dungeon of the Endless;8.0;Oct 27, 2014 +79;Revenge of the Titans;7.6;May 24, 2010 +79;Bookworm Adventures: Volume 2;7.6;Jul 30, 2009 +79;F1 2001;7.5;Oct 14, 2001 +79;Brothers in Arms: Hell's Highway;7.9;Oct 7, 2008 +79;Star Wars: Empire at War;8.4;Feb 15, 2006 +79;Dariusburst: Chronicle Saviours;8.3;Dec 3, 2015 +79;Europa Universalis: Rome - Vae Victis;8.6;Nov 19, 2008 +79;Silent Hunter: Wolves of the Pacific;6.5;Mar 20, 2007 +79;Pillars of Eternity: The White March - Part 2;6.7;Feb 16, 2016 +79;1701 A.D.;8.3;Nov 6, 2006 +79;Stasis;7.6;Aug 31, 2015 +79;Pro Evolution Soccer 2009;7.4;Nov 12, 2008 +79;Return to Mysterious Island;8.5;Nov 2, 2004 +79;Jotun;7.0;Sep 29, 2015 +79;Else Heart.Break();7.5;Sep 24, 2015 +79;Kohan: Ahriman's Gift;8.7;Nov 5, 2001 +79;Emperor: Battle for Dune;8.3;Jun 12, 2001 +79;Trackmania Turbo;6.9;Mar 24, 2016 +79;Cart Life;5.9;Jul 29, 2010 +79;Sword of the Stars: Born of Blood;8.1;Jun 5, 2007 +79;Worms Reloaded;6.7;Aug 26, 2010 +79;Warhammer: End Times - Vermintide;7.9;Oct 23, 2015 +79;Euro Truck Simulator 2;8.7;Jan 16, 2013 +79;Tropico 3;8.2;Oct 20, 2009 +79;Cities: Skylines - After Dark;7.9;Sep 24, 2015 +79;Runaway: A Twist of Fate;8.5;Apr 21, 2011 +79;Tales of Monkey Island Chapter 1: Launch of the Screaming Narwhal;8.2;Jul 7, 2009 +79;Bloodline Champions;8.0;Jan 13, 2011 +79;The Sims: Superstar;8.2;May 12, 2003 +79;NBA Live 2005;8.5;Oct 26, 2004 +79;Valiant Hearts: The Great War;8.6;Jun 25, 2014 +79;Payday 2;3.4;Aug 13, 2013 +79;Dungeons of Dredmor;7.8;Jul 13, 2011 +79;Geometry Wars 3: Dimensions;6.2;Nov 25, 2014 +79;Assassin's Creed: Director's Cut Edition;7.5;Apr 8, 2008 +79;Puzzle Dimension;7.6;Jun 21, 2010 +79;Split/Second;8.2;May 18, 2010 +79;Sang-Froid: Tales of Werewolves;7.9;Apr 5, 2013 +79;The Incredible Adventures of Van Helsing: Final Cut;7.2;Oct 7, 2015 +79;Hitman: Absolution;7.0;Nov 19, 2012 +79;Call of Juarez: Gunslinger;8.2;May 22, 2013 +79;Rome: Total War Alexander;7.6;Jun 19, 2006 +79;Strong Bad's Cool Game for Attractive People Episode 3: Baddest of the Bands;8.1;Oct 27, 2008 +79;Sam & Max Episode 102: Situation: Comedy;7.9;Dec 20, 2006 +79;Tropico 3: Absolute Power;7.7;May 17, 2010 +79;Sam & Max Episode 106: Bright Side of the Moon;7.3;Apr 26, 2007 +79;Day of Defeat;9.3;May 6, 2003 +79;Space Empires: IV;8.3;Nov 6, 2000 +79;Resident Evil 4: Ultimate HD Edition;7.7;Feb 27, 2014 +79;Sam & Max Episode 203: Night of the Raving Dead;8.2;Feb 12, 2008 +79;FlatOut: Ultimate Carnage;7.6;Sep 2, 2008 +79;Guitar Hero III: Legends of Rock;7.2;Nov 13, 2007 +79;Sid Meier's Civilization: Beyond Earth - Rising Tide;5.9;Oct 9, 2015 +79;Memoria;8.5;Aug 29, 2013 +79;The Last Door;7.8;May 20, 2014 +79;Shadowgrounds Survivor;7.8;Dec 6, 2007 +79;Gothic II;8.8;Oct 28, 2003 +79;Port Royale;8.2;Jun 4, 2003 +79;Deadly Dozen: Pacific Theater;7.9;Oct 31, 2002 +79;Shattered Galaxy;8.3;Aug 21, 2001 +79;Close Combat: Invasion: Normandy;8.2;Oct 10, 2000 +79;King's Bounty: The Legend;8.6;Sep 23, 2008 +79;Rage;5.1;Oct 4, 2011 +79;The Misadventures of P.B. Winterbottom;8.3;Apr 20, 2010 +79;Uru: Ages Beyond Myst;7.4;Nov 11, 2003 +79;Guild Wars: Eye of the North;8.6;Aug 28, 2007 +79;Tales From The Borderlands: Episode 4 - Escape Plan Bravo;8.4;Aug 18, 2015 +79;EverQuest: Lost Dungeons of Norrath;7.0;Sep 8, 2003 +79;Battlefield 1942: Secret Weapons of WWII;8.5;Sep 4, 2003 +79;The Sims: Unleashed;8.0;Sep 23, 2002 +79;Race the Sun;7.5;Aug 19, 2013 +79;The Sims 3: Pets;6.1;Oct 18, 2011 +79;Prototype;7.9;Jun 10, 2009 +79;Stick it to the Man!;7.2;Dec 13, 2013 +79;Street Fighter X Tekken;6.4;May 11, 2012 +79;Frozen Cortex;6.5;Feb 19, 2015 +79;Free Realms;6.4;Apr 29, 2009 +79;Homeworld: Deserts of Kharak;8.0;Jan 20, 2016 +79;Don't Starve;8.3;Apr 23, 2013 +79;Assault Android Cactus;7.0;Sep 23, 2015 +79;Trainz;7.2;Feb 10, 2002 +79;King Arthur: The Role-Playing Wargame;7.9;Nov 24, 2009 +79;Chivalry: Medieval Warfare;7.8;Oct 16, 2012 +79;Overlord II;8.1;Jun 23, 2009 +79;F.E.A.R. 2: Project Origin;7.8;Feb 10, 2009 +79;Tom Clancy's Rainbow Six Siege;6.9;Dec 1, 2015 +79;The Settlers 7: Paths to a Kingdom;5.2;Mar 23, 2010 +79;RollerCoaster Tycoon 3: Soaked!;2.9;Jun 23, 2005 +79;Dark Souls II: Crown of the Old Iron King;7.6;Aug 26, 2014 +79;TrackMania 2 Valley;8.3;Jul 4, 2013 +79;State of Decay;6.8;Nov 5, 2013 +79;LEGO Harry Potter: Years 1-4;7.8;Jun 29, 2010 +79;Rift: Storm Legion;7.8;Nov 13, 2012 +79;Crayon Physics Deluxe;7.6;Jan 7, 2009 +79;Nancy Drew: Legend of the Crystal Skull;8.5;Oct 8, 2007 +79;EverQuest II: Desert of Flames;7.8;Sep 12, 2005 +79;SimCity 4: Rush Hour;8.6;Sep 22, 2003 +79;Uncommon Valor: Campaign for the South Pacific;7.6;Dec 2, 2002 +79;Global Operations;8.3;Mar 25, 2002 +78;Apotheon;7.8;Feb 3, 2015 +78;Need for Speed: Most Wanted - A Criterion Game;4.4;Oct 30, 2012 +78;Star Wars: Battlefront II;8.8;Oct 31, 2005 +78;The Walking Dead: Season Two Episode 1 - All That Remains;8.5;Dec 17, 2013 +78;The Journey Down: Chapter Two;7.1;Aug 25, 2014 +78;Star Trek: Elite Force II;7.6;Jun 25, 2003 +78;Zuma's Revenge!;7.9;Sep 15, 2009 +78;Baldur's Gate: Enhanced Edition;7.0;Nov 28, 2012 +78;Doom 3: Resurrection of Evil;6.0;Apr 4, 2005 +78;LEGO Indiana Jones: The Original Adventures;7.7;Jun 3, 2008 +78;NASCAR Thunder 2004;7.5;Sep 16, 2003 +78;Transformers: Fall of Cybertron;7.8;Aug 21, 2012 +78;FIFA Soccer 06;6.7;Oct 4, 2005 +78;DeadCore;6.8;Oct 17, 2014 +78;The Walking Dead: Season Two Episode 5 - No Going Back;8.5;Aug 26, 2014 \ No newline at end of file diff --git a/Streams_007/readme.md b/Streams_007/readme.md new file mode 100644 index 0000000..db68748 --- /dev/null +++ b/Streams_007/readme.md @@ -0,0 +1,44 @@ +# Map und Reduce auf Streams +## Lernziel + + + +Die Daten in einem Stream durch Map- und Reduce verdichten. + +## Aufgabe + +Gehen Sie in das Paket [pr2.streams.reduce_critics](../sources/src/main/java/pr2/streams/reduce_critics/). + +In dieser (und den folgenden Aufgaben) werden Sie Daten aus der Spieldatenbank von [Metacritic](http://www.metacritic.com) analysieren. Hierbei wurden die 994 Spiele mit der besten Bewertung ausgewählt. Für jedes Spiel sind angegeben: + + * Name des Spiels + * Metacritic-Score (0-100) + * Benutzerbewertung (0-100). Normalerweise werden die Benutzerbewertungen bei Metacritic on 0-10 mit einer Nachkommastelle angegeben. Für die einfachere Bearbeitung ist dies für Sie aber bereits in den Bereich 0-100 umgerechnet worden. + * Erscheinungsjahr des Spieles + +Die Verwaltung der Daten wurde Ihnen bereits abgenommen und wird von der Klasse `GameDatabase` durchgeführt. Ein einzelnes Spiel wird durch Objekte des Typs `ComputerGame` repräsentiert. + +Schauen Sie sich die Klassen `ComputerGame` und `GameDatabase` an und versuchen Sie deren Funktionsweise zu verstehen. + +Erweitern Sie nun die `main`-Methode von `MapReduceGames` so, dass Sie bestimmte Auswertungen auf den Spielen durchführen können. Folgende Informationen sollen Sie auswerten: + + 1. Das [Quadratische Mittel](https://de.wikipedia.org/wiki/Quadratisches_Mittel) des Unterschiedes zwischen Metascore und Userscore. + 3. Das [Arithmetische Mittel](https://de.wikipedia.org/wiki/Arithmetisches_Mittel) des Unterschiedes zwischen Metascore und Userscore. + +Lassen Sie Ihr Programm laufen und überprüfen Sie, ob die richtigen Informationen ausgegeben werden. + +Die Datei mit den Spielen finden Sie unter [games.txt](../sources/src/main/resources/pr2/streams/reduce_critics/games.txt). + + + \ No newline at end of file diff --git a/Streams_008/readme.md b/Streams_008/readme.md new file mode 100644 index 0000000..58eda20 --- /dev/null +++ b/Streams_008/readme.md @@ -0,0 +1,26 @@ +# Reduce +## Lernziel + + + +Daten in Streams mit `reduce` aggregieren. + +## Aufgabe + +Gehen Sie in das Paket [pr2.streams.reduce](../sources/src/main/java/pr2/streams/reduce/). + +Gegeben sei eine Liste von `Integer`-Werten (`List`). Schreiben Sie eine Klasse `Squarer`, die Summe der Quadrate der Werte bestimmt. Einmal unter Verwendung einer Map- und einmal ohne eine Map-Operation. + + + \ No newline at end of file diff --git a/Streams_009/readme.md b/Streams_009/readme.md new file mode 100644 index 0000000..21c21d2 --- /dev/null +++ b/Streams_009/readme.md @@ -0,0 +1,26 @@ +# Summe über reduce bestimmen +## Lernziel + + + +Daten in Streams mit `reduce` aggregieren. + +## Aufgabe + +Gehen Sie in das Paket [pr2.streams.summieren](../sources/src/main/java/pr2/streams/summieren/). + +Schreiben Sie in der Klasse `SumUp` eine Methode `int sumUp(Stream numbers)`, die die Elemente eines Streams von `Integer`-Objekten addiert. + + + \ No newline at end of file diff --git a/Streams_010/readme.md b/Streams_010/readme.md new file mode 100644 index 0000000..4b1e108 --- /dev/null +++ b/Streams_010/readme.md @@ -0,0 +1,28 @@ +# Wörter zählen +## Lernziel + + + +Daten in Streams mit `reduce` aggregieren. + +## Aufgabe + +Gehen Sie in das Paket [pr2.streams.word_count](../sources/src/main/java/pr2/streams/word_count/). + +Gegeben sei eine Liste von Strings (`List`), die die Wörter eines Textes enthält. Erzeugen Sie eine neue Liste, die zu jedem Wort die Häufigkeit im Text in der Form Wort->Häufigkeit also z.B. `die->32` angibt. + +Testen Sie Ihre Implementierung mit der Testklasse `WordCountTest`. + + + \ No newline at end of file diff --git a/Strukturierung_001/readme.md b/Strukturierung_001/readme.md new file mode 100644 index 0000000..adde6bf --- /dev/null +++ b/Strukturierung_001/readme.md @@ -0,0 +1,32 @@ +# Information-Hiding einer Klasse verbessern +## Lernziel + + + +Bei einer vorhandenen Klasse Information Hiding verbessern und Seiteneffekte reduzieren. + +## Aufgabe + +Im Paket [pr2.strukturierung.information_hiding](../sources/src/main/java/pr2/strukturierung/information_hiding/) finden Sie eine Klasse namens `Rechner`, die eine sehr einfachen Taschenrechner repräsentiert. Außerdem finden Sie einen passenden JUnit-Test `RechnerTest`, der die Funktionsweise des Taschenrechners demonstriert. + +Führen Sie den JUnit-Test aus und vergewissern Sie sich, dass der Taschenrechner korrekt funktioniert. + +Schauen Sie sich die Klasse `Rechner` genau an und überlegen Sie, welche Probleme hier vorliegen. Denken Sie an die in der Vorlesung diskutierten Prinzipien des _Information Hiding_ und der _Minimierung von Seiteneffekten_. + +Schreiben Sie die Klasse und die Tests so um, dass die genannten Prinzipien besser erfüllt werden. + +Führen Sie die Tests erneut aus und stellen Sie sicher, dass die Berechnungen noch korrekt erfolgen. + + + \ No newline at end of file diff --git a/Strukturierung_002/readme.md b/Strukturierung_002/readme.md new file mode 100644 index 0000000..506b798 --- /dev/null +++ b/Strukturierung_002/readme.md @@ -0,0 +1,32 @@ +# Vorhandene Bibliotheken als JAR einbinden +## Lernziel + + + +Eine vorhandene Bibliothek in einem Projekt verwenden und hierzu ein JAR einbinden. + +## Aufgabe + +Im Paket [pr2.strukturierung.jars_einbinden](../sources/src/main/java/pr2/strukturierung/jars_einbinden/) finden Sie eine Klasse `PieChart`, deren Rumpf auskommentiert ist. + +In dieser Aufgabe werden Sie die Bibliothek [JFreeChart](http://www.jfree.org/jfreechart/) für die Darstellung von Grafiken verwenden. Hierzu müssen die JARs der Bibliothek in das Projekt eingebunden werden. + +Die beiden JAR-Dateien `jcommon-1.0.23.jar` und `jfreechart-1.0.19.jar` liegen bereits im `lib`-Ordner des Projektes, sind aber noch nicht in das Projekt eingebunden. + +Binden Sie die Bibliotheken über den entsprechenden Dialog in Eclipse ein: `Properties` -> `Java Build Path` -> `Libraries` -> `Add JARs`... + +Kommentieren Sie die auskommentierten Passagen in der Klasse `PieChart` wieder ein und starten Sie das Programm. Experimentieren Sie ein wenig mit Werten, die dargestellt werden. + + + \ No newline at end of file diff --git a/Threads_001/readme.md b/Threads_001/readme.md new file mode 100644 index 0000000..93db948 --- /dev/null +++ b/Threads_001/readme.md @@ -0,0 +1,28 @@ +# Fakultät parallel berechnen +## Lernziel + + + +Berechnungen parallelisieren. + +## Aufgabe + +Gehen Sie ins Paket [pr2.threads.fakultaet](../sources/src/main/java/pr2/threads/fakultaet/). + +Schreiben Sie eine Klasse `FakultaetParallel`, die in der Lage ist, die Fakultäten für eine Reihe von Zahlen zwischen 0 und 20 zu berechnen. Der Berechnung dient eine Methode `calculate`, der die Zahl (1-20) übergeben wird, bis zu der die Reihe von Fakultäten berechnet werden soll und die dann ein `long`-Array mit den Ergebnissen zurückgibt. Verwenden Sie zur Implementierung der Berechnung zwei Threads, die sich die Arbeit teilen. + +Schreiben Sie eine `main`-Methode in der Klasse `Main`, welche die Klasse `FakultaetParallel` verwendet, um die Fakultäten von 0 bis 20 zu berechnen. Danach soll sie das Ergebnis der Berechnung ausgeben. + + + \ No newline at end of file diff --git a/Threads_002/readme.md b/Threads_002/readme.md new file mode 100644 index 0000000..c14a6ed --- /dev/null +++ b/Threads_002/readme.md @@ -0,0 +1,26 @@ +# Thread per interrupt beenden +## Lernziel + + + +Threads kontrolliert beenden. + +## Aufgabe + +Gehen Sie in das Paket [pr2.threads.interrupt](../sources/src/main/java/pr2/threads/interrupt/). + +Schreiben Sie ein Java-Programm `ThreadsBeenden`, das einen Thread startet, der alle 100 Millisekunden eine Ausgabe erzeugt. Nachdem dieser Thread gestartet wurde, soll der Main-Thread zwei Sekunden warten und dann den anderen Thread sauber von außen beenden. Verwenden Sie zum Beenden des Threads die `interrupt`-Methode und denken Sie daran, die `InterruptedException` bei der `sleep`-Methode richtig zu behandeln. + + + \ No newline at end of file diff --git a/Threads_003/readme.md b/Threads_003/readme.md new file mode 100644 index 0000000..714bd4b --- /dev/null +++ b/Threads_003/readme.md @@ -0,0 +1,34 @@ +# wait und notify benutzen +## Lernziel + + + +Thread-Koordination über Condition-Variablen. + +## Aufgabe + +Gehen Sie in das Paket +[pr2.threads.notifier](../sources/src/main/java/pr2/threads/notifier/). + +Schreiben Sie eine Klasse `Notifier`, die ein einziges `String`-Attribut enthält. Sie soll weiterhin zwei Methoden haben: + + * `setString(String string)` -- Diese Methode setzt den String auf einen neuen Wert, aber nur, wenn der String `null` ist. Ist der String bereits gesetzt, wartet die Methode darauf, dass ein anderer Thread den String über die `getString()`-Methode liest und wieder zurücksetzt. + * `getString()` -- Liest den String aus, gibt das Ergebnis zurück und setzt das Attribut wieder zurück auf `null`. Wenn kein String vorhanden ist (d.h. wenn das Attribut bereits `null` ist), wartet die Methode, bis ein anderer Thread mit `setString(String string)` einen String abspeichert. + +Schreinben Sie eine Klasse `Main` mit einer `main`-Methode. Starten Sie zwei Threads, die Strings in einer `Notifier`-Instanz abspeichern und drei Threads, die Strings auslesen. Lassen Sie die Threads nach jeder Operation für 200 Millisekunden schlafen. + +Verwenden Sie bitte `wait` und `notify` bzw. `notifyAll`, um die Threads entsprechend zu koordinieren. + + + \ No newline at end of file diff --git a/Threads_004/readme.md b/Threads_004/readme.md new file mode 100644 index 0000000..4f73019 --- /dev/null +++ b/Threads_004/readme.md @@ -0,0 +1,26 @@ +# Parallele Ausgaben erzeugen +## Lernziel + + + +Erste Schritte mit Threads. + +## Aufgabe + +Gehen Sie in das Paket [pr2.threads.paralleldrucker](../sources/src/main/java/pr2/threads/paralleldrucker/). + +Schreiben Sie ein Java-Programm `Paralleldrucker`, das zwei Threads startet, die beide in einer Endlosschleife einen Text auf der Konsole ausgeben, zum Beispiel "Thread 1 speaking". Parallel dazu soll der Main-Thread ebenfalls eine wiederkehrende Ausgabe erzeugen, z.B. "Hier spricht der Main-Thread". Verwenden Sie bitte für die Erzeugung der Threads anonyme innere Klassen, die `Runnable` implementieren. + + + \ No newline at end of file diff --git a/Threads_005/readme.md b/Threads_005/readme.md new file mode 100644 index 0000000..b0892d6 --- /dev/null +++ b/Threads_005/readme.md @@ -0,0 +1,32 @@ +# Race-Condition finden und beheben +## Lernziel + + + +In einem gegebenen Programm Race-Conditions finden und durch den Einsatz von kritischen Abschnitten beheben. + +## Aufgabe + +Gehen Sie in das Paket [pr2.threads.race_condition](../sources/src/main/java/pr2/threads/race_condition/). + +In dieser Aufgabe haben Sie ein defektes Programm vor sich, das aufgrund von Race-Conditions nicht richtig funktionieren kann. + +Schauen Sie sich den Quelltext des Programms genau an und versuchen Sie die Funktionsweise zu verstehen. Lassen Sie das Programm laufen und betrachten Sie die Fehlermeldungen und Ausgaben. Mit großer Wahrscheinlichkeit wird das Programm abstürzen. Wenn nicht, starten Sie es mehrmals, bis ein Fehler auftritt. + +Versuchen Sie die Ursache des Fehlers zu verstehen und überlegen Sie sich, wo genau die Race-Condition vorliegt. Wahrscheinlich wird der erste Fehler aus der Klasse `ArrayList` stammen. Dies ist aber nicht die einzige Race-Condition im Programm, es gibt noch eine zweite. + +Beheben Sie die Race-Condition durch die Verwendung von kritischen Abschnitten und lassen Sie das Programm danach erneut mehrfach laufen. Wenn bei keinem der Durchläufe ein Fehler auftritt, gilt die Aufgabe als gelöst. + + + \ No newline at end of file diff --git a/Threads_006/readme.md b/Threads_006/readme.md new file mode 100644 index 0000000..47d08ab --- /dev/null +++ b/Threads_006/readme.md @@ -0,0 +1,26 @@ +# Stack und Heap unterscheiden +## Lernziel + + + +Unterschied zwischen Stack und Heap bei parallelen Programmen verstehen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.threads.stack_heap](../sources/src/main/java/pr2/threads/stack_heap/). + +Schreiben Sie ein kurzes Java-Programm `ThreadProblem`, das den Unterschied zwischen Variablen auf dem Stack und Variablen auf dem Heap bezüglich des gleichzeitigen Zugriffs durch Threads demonstriert. + + + \ No newline at end of file diff --git a/Threads_007/readme.md b/Threads_007/readme.md new file mode 100644 index 0000000..a157f4b --- /dev/null +++ b/Threads_007/readme.md @@ -0,0 +1,26 @@ +# synchronized verwenden +## Lernziel + + + +Schlüsselwort `synchronized` verwenden. + +## Aufgabe + +Gehen Sie in das Paket [pr2.threads.synchronize](../sources/src/main/java/pr2/threads/synchronize/). + +Schreiben Sie eine Klasse `Synchronizer`, die ein einziges `int`-Attribut und zusätzlich noch eine Methode `addAndPrint` enthält. Bei jedem Aufruf der Methode soll das Attribut um eins hochgezählt werden. Starten Sie zwei Threads, die diese Method konkurrierend aufrufen und sorgen Sie durch korrekte Synchronisation bei der `addAndPrint` dafür, dass keine Zahl zweimal ausgegeben wird und die Folge der Zahlen wirklich ohne Lücken ist. + + + \ No newline at end of file diff --git a/Threads_008/readme.md b/Threads_008/readme.md new file mode 100644 index 0000000..c600122 --- /dev/null +++ b/Threads_008/readme.md @@ -0,0 +1,28 @@ +# Timer und TimerTask verwenden +## Lernziel + + + +Klassen aus `java.util.concurrent` verwenden. + +## Aufgabe + +Gehen Sie in das Paket [pr2.threads.timer](../sources/src/main/java/pr2/threads/timer/). + +Schreiben Sie eine Klasse `FakultaetTimer`, die in der Lage ist, die Fakultäten für alle Zahlen zwischen 0 und 20 zu berechnen. Der Berechnung dient eine Methode `calculate` die ein `long`-Array mit den Ergebnissen zurückgibt. Verwenden Sie zur Implementierung der Berechnung die Klasse `Timer` und `TimerTask`, wobei Sie für jede zu berechnende Zahl einen eigenen `TimerTask` verwenden sollen. + +Schreiben Sie eine `main`-Methode in der Klasse `Main`, welche die Klasse `FakultaetTimer` verwendet, um die Fakultäten von 0 bis 20 zu berechnen. Danach soll sie das Ergebnis der Berechnung ausgeben. + + + \ No newline at end of file diff --git a/Vererbung_001/readme.md b/Vererbung_001/readme.md new file mode 100644 index 0000000..77182a3 --- /dev/null +++ b/Vererbung_001/readme.md @@ -0,0 +1,26 @@ +# Final anwenden +## Lernziel + + + +Das Schlüsselwort `final` in seinen verschiedenen Bedeutungen kennenlernen und syntaktisch an die richtigen Stellen schreiben. + +## Aufgabe + +Im Paket [pr2.vererbung.finals](../sources/src/main/java/pr2/vererbung/finals/) finden Sie zwei Klassen `A` und `B`. + +Durch einen Fehler sind hier alle `final` Schlüsselwort verloren gegangen. Bitte schreiben Sie an alle Stellen, an denen dies möglich ist einen `final`-Modifier. + + + \ No newline at end of file diff --git a/Vererbung_002/readme.md b/Vererbung_002/readme.md new file mode 100644 index 0000000..9360e77 --- /dev/null +++ b/Vererbung_002/readme.md @@ -0,0 +1,30 @@ +# Figur und Rechteck +## Lernziel + + + +Vererbung sinnvoll einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.vererbung.geometrie1](../sources/src/main/java/pr2/vererbung/geometrie1/). + +Schreiben Sie eine Klasse `Figur`, die als einziges Attribut die Fläche (`flaeche`) der Figur hat. Bieten Sie zusätzlich eine Methode `getFlaeche()` an, mit der die Fläche wieder ausgelesen werden kann. Sorgen Sie dafür, dass nur Subklassen den Konstruktor dieser Klasse aufrufen können und dass das Attribut mit der Fläche ebenfalls nur für Subklassen verfügbar ist. + +Leiten Sie von der Klasse `Figur` eine Klasse `Rechteck` ab. Das Rechteck soll durch Höhe und Breite beschrieben werden und diese Werte sollen benutzt werden, um die Fläche der Figur zu setzen. + +Schreiben Sie eine Klasse `Main` mit einer `main`-Methode, welche Ihre beiden gerade entwickelten Klassen nutzt. + + + \ No newline at end of file diff --git a/Vererbung_003/readme.md b/Vererbung_003/readme.md new file mode 100644 index 0000000..40bd077 --- /dev/null +++ b/Vererbung_003/readme.md @@ -0,0 +1,26 @@ +# Figur erweitern +## Lernziel + + + +Vererbung sinnvoll einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.vererbung.geometrie2](../sources/src/main/java/pr2/vererbung/geometrie2/). + +Verändern Sie die Klasse `Figur` so, dass das Attribut mit der Fläche nur noch innerhalb der Klasse sichtbar ist. Verändern Sie den Konstruktor und die Klasse `Rechteck` entsprechend, damit sich das Verhalten der Klassen nicht ändert. + + + \ No newline at end of file diff --git a/Vererbung_004/readme.md b/Vererbung_004/readme.md new file mode 100644 index 0000000..5b086a7 --- /dev/null +++ b/Vererbung_004/readme.md @@ -0,0 +1,30 @@ +# Figur noch einmal erweitern +## Lernziel + + + +Vererbung sinnvoll einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.vererbung.geometrie3](../sources/src/main/java/pr2/vererbung/geometrie3/). + +Erweitern Sie die Klasse `Figur` so, dass man Objekte ohne Angabe einer Fläche erzeugen kann. Diese Objekte sollen dann die Fläche `0` haben. Die Klasse `Rechteck` soll weiter funktionieren. + +Schreiben Sie eine Klasse `Gerade`, die von `Figur` abgeleitet ist und als Attribut die Länge der Geraden hat, deren Fläche aber logischerweise `0` ist. + +Schreiben Sie eine Klasse `Quadrat`, die von der Klasse `Rechteck` abgeleitet ist. + + + \ No newline at end of file diff --git a/Vererbung_005/readme.md b/Vererbung_005/readme.md new file mode 100644 index 0000000..8eef5cd --- /dev/null +++ b/Vererbung_005/readme.md @@ -0,0 +1,40 @@ +# Konstruktoren schreiben +## Lernziel + + + +Für eine vorhandene Klasse Konstruktoren schreiben und Konstruktoren sich gegenseitig und auch Konstruktoren der Superklasse aufrufen lassen. + +## Aufgabe + +Im Paket [pr2.vererbung.konstruktoren](../sources/src/main/java/pr2/vererbung/konstruktoren/) finden Sie die Klassen, welche Charaktere in einem Spiel repräsentieren. + +Sie sollen Klassen entwickeln, welche Charaktere in einem Spiel repräsentieren. Es gibt in dem Spiel zwei Rassen: + + * die _Nachtelfen_ mit der Spezialfähigkeit _Naturwiderstand_ und + * die _Untoten_ mit der Spezialfähigkeit _Unterwasseratmung_. + +Ausgehend von der Klasse `Wesen` sollen die beiden Rassen durch zwei Klassen `Untoter` und `Nachtelf` repräsentiert werden. Diese Klassen sind auch bereits vorhanden, allerdings fehlen die Konstruktoren und die Vererbung ist noch nicht deklariert. + +Leiten Sie die beiden Klassen also von `Wesen` ab und schreiben Sie entsprechende Konstruktoren. Beide Klassen sollen zwei Konstruktoren haben: + + * bei einem kann man den Namen und die Stärke der Spezialfähigkeit mitgeben, + * beim anderen nur den Namen; die Spezialfähigkeit soll dann dem Standardwert entsprechen. + +### Test + +Testen Sie die Funktionsweise Ihrer Konstruktoren mit dem vorgegebenen JUnit-Test. Entfernen Sie die Kommentare, um die entsprechenden Tests zu aktivieren und importieren Sie die noch fehlenden Klassen und Methoden. + + + \ No newline at end of file diff --git a/Vererbung_006/readme.md b/Vererbung_006/readme.md new file mode 100644 index 0000000..0683bb7 --- /dev/null +++ b/Vererbung_006/readme.md @@ -0,0 +1,38 @@ +# Polymorphie einsetzen +## Lernziel + + + +Durch Polymorphie Subklassen wie Basisklassen behandeln können. + +## Aufgabe + +Im Paket [pr2.vererbung.polymorphie](../sources/src/main/java/pr2/vererbung/polymorphie/) finden Sie Klassen, welche Tiere in einem Zoo repräsentieren. + +In dieser Aufgabe geht es darum, einen Zoo zu simulieren. In dem Zoo gibt es _Affen_, _Gorillas_ und _Giraffen_. Die Tiere sind oft hungrig und müssen deshalb gefüttert werden. Hierzu dient die Klasse `Futterstelle`, die für die verschiedenen Tierarten entsprechende Fütterungsmethoden hat. + + +### UML-Diagramm + +Sehen Sie sich die Klassen für die verschiedenen Tiere, die `Futterstelle` und `ZooSimulation` genau an und zeichnen Sie danach ein UML-Diagramm der Klassen und ihrer Beziehungen. + + +### Futterstelle + +Schreiben Sie die Klasse `Futterstelle` so um, dass sie Polymorphie nutzt, um alle Tiere mit nur einer einzigen Methode zu füttern. + +Schreiben Sie danach die Klasse `ZooSimulation` so um, dass Sie anstatt von drei Variablen `charlie`, `buck` und `debbie` ein einziges Array `tiere` verwendet. + + + \ No newline at end of file diff --git a/Vererbung_007/readme.md b/Vererbung_007/readme.md new file mode 100644 index 0000000..3decb9f --- /dev/null +++ b/Vererbung_007/readme.md @@ -0,0 +1,26 @@ +# Singleton +## Lernziel + + + +Das Design-Pattern _Singleton_ einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.vererbung.singleton_einfach](../sources/src/main/java/pr2/vererbung/singleton_einfach/). + +Schreiben Sie eine Klasse `Singelton`, die ein Singleton ist. + + + \ No newline at end of file diff --git a/Vererbung_008/readme.md b/Vererbung_008/readme.md new file mode 100644 index 0000000..04501a5 --- /dev/null +++ b/Vererbung_008/readme.md @@ -0,0 +1,37 @@ +# Statische Methoden und Attribute +## Lernziel + + + +Eine Klasse mit statischen Attributen und Methoden entwickeln und die Unterschiede zu normalen Methoden und Attributen verstehen. + +## Aufgabe + +Im Paket [pr2.vererbung.statics](../sources/src/main/java/pr2/vererbung/statics/) finden Sie zwei Klassen. + +Sie finden in der Aufgabe eine Klasse `Wuerfel`, die einen normalen sechsseitigen Würfel repräsentiert und eine Klasse `Spiel`, die Würfel benutzt. Um zu Überprüfen, ob die Würfel gezinkt sind, enthält jeder Würfel eine Methode `statistik()`, die eine Statistik über die geworfenen Augenzahlen ausgibt. + +Der Nachteil der jetzigen Lösung ist, dass die Statistik nur pro Würfel erhältlich ist, nicht aber über alle Würfel hinweg. + +Ändern Sie die Klasse `Wuerfel` so, dass + + * die Statistik über alle innerhalb des Programms verwendeten Würfel berechnet wird und + * die Verteilung auf die einzelnen Augen in Prozent und nicht mehr als absolute Zahl ausgegeben wird. + +Möglicherweise müssen Sie noch eine kleine Anpassung in der Klasse `Spiel` vornehmen. + +Testen Sie Ihr Programm, indem Sie es mehrmals laufen lassen und prüfen Sie, ob der Würfel fair ist. Bei dieser Aufgabe dürfen Sie auf JUnit-Tests verzichten. + + + \ No newline at end of file diff --git a/Vererbung_009/readme.md b/Vererbung_009/readme.md new file mode 100644 index 0000000..72cf564 --- /dev/null +++ b/Vererbung_009/readme.md @@ -0,0 +1,28 @@ +# Methode überladen +## Lernziel + + + +Methoden überladen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.vererbung.ueberladen_summe](../sources/src/main/java/pr2/vererbung/ueberladen_summe). + +Schreiben Sie eine Klasse `Summator` mit einer Methode `sum`, die zwei Zahlen addiert und das Ergebnis zurückgibt. Überladen Sie die Methode so, dass sie drei, vier und fünf Zahlen addieren kann. + +Kommentieren Sie die mitgelieferten Tests ein und führen Sie sie aus. + + + \ No newline at end of file diff --git a/Vererbung_010/readme.md b/Vererbung_010/readme.md new file mode 100644 index 0000000..516e8af --- /dev/null +++ b/Vererbung_010/readme.md @@ -0,0 +1,32 @@ +# Methoden überschreiben +## Lernziel + + + +Bei Vererbung das Überschreiben von Methoden einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.vererbung.ueberschreiben_lebewesen](../sources/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/). + +Schreiben Sie eine Klasse `Lebewesen`. Diese Klasse soll eine öffentliche Methode `bewegen` haben. Die Methode nimmt keine Parameter und hat keinen Rückgabewert. Die Implementierung in `Lebewesen` soll leer sein. + +Schreiben Sie eine Klasse `Amoebe`, die von `Lebewesen` abgeleitet ist, die `bewegen`-Methode überschreibt und in der Methode den Text "Schleimen" ausgibt. + +Schreiben Sie eine Klasse `Dackel`, die von `Lebewesen` abgeleitet ist, die `bewegen`-Methode überschreibt und in der Methode den Text "Auf kurzen Beinen vorwärts wackeln" ausgibt. Fügen Sie weiterhin eine Methode `bellen()` zum `Dackel` hinzu, die die Ausgabe "Wau wau wau" erzeugt. + +Schreiben Sie einen kleinen Test, bei dem Sie zwei Referenzvariablen (`l1` und `l2`) vom Typ `Lebewesen` erzeugen und dann damit einen neu erzeugten `Dackel` (mit `l1`) und eine neu erzeugte `Amoebe` mit (`l2`) verwalten. Rufen Sie auf beiden die Methode `bewegen` auf. Casten Sie danach die Variable `l1`, die auf den Dackel zeigt, auf einen `Dackel` und rufen Sie die `bellen`-Methode auf, wobei Sie sich vorher mit `instanceof` versichern, dass auch wirklich ein `Dackel` vorliegt. + + + \ No newline at end of file diff --git a/Vererbung_011/readme.md b/Vererbung_011/readme.md new file mode 100644 index 0000000..6397fc8 --- /dev/null +++ b/Vererbung_011/readme.md @@ -0,0 +1,30 @@ +# Varag-Methode schreiben +## Lernziel + + + +Eine Varag-Methode schreiben. + +## Aufgabe + +Gehen Sie in das Paket [pr2.vererbung.vararg_summe](../sources/src/main/java/pr2/vererbung/vararg_summe/). + +Schreiben Sie eine Klasse `Summator` mit einer Methode `sum`, die zwei oder drei Zahlen addiert und das Ergebnis zurückgibt. + +Schreiben Sie eine **vararg**-Methode, die das Addieren beliebig vieler Zahlen realisiert. + +Kommentieren Sie die mitgelieferten Tests ein und führen Sie sie aus. + + + \ No newline at end of file diff --git a/Vererbung_012/readme.md b/Vererbung_012/readme.md new file mode 100644 index 0000000..b8dc2dc --- /dev/null +++ b/Vererbung_012/readme.md @@ -0,0 +1,56 @@ +# Vererbung von Figuren +## Lernziel + + + +Einfache Klassen schreiben und eine Vererbungshierarchie bilden. + +## Aufgabe + +Denken Sie bei den folgenden Aufgaben daran, Pakete zu verwenden. + +### Figur und Rechteck + +Im Paket [pr2.vererbung.vererbung_geometrie](../sources/src/main/java/pr2/vererbung/vererbung_geometrie/) finden Sie Klassen, welche geometrische Figuren repräsentieren. + +Die Klasse `Figur` soll als einziges Attribut die Fläche der Figur haben. Bieten Sie weiterhin eine Methode `getFlaeche()` an, mit der die Fläche wieder ausgelesen werden kann. Sorgen Sie dafür, dass nur Subklassen den Konstruktor dieser Klasse aufrufen können. Machen Sie das Attribut `flaeche` private. + +Leiten Sie von der Klasse `Figur` eine Klasse `Rechteck` ab. Das Rechteck soll durch Höhe und Breite beschrieben werden und diese Werte sollen benutzt werden, um die Fläche der Figur zu setzen. + +### Erweiterung der Figur + +Erweitern Sie die Klasse `Figur` so, dass man Objekte ohne Angabe einer Fläche erzeugen kann. Diese Objekte sollen dann die Fläche `0` haben. Die Klasse `Rechteck` soll weiter funktionieren. + +### Dreieck + +Schreiben Sie eine Klasse `Dreieck`, die von der Klasse `Figur` abgeleitet ist und über Grundseite und Höhe definiert wird. + +### Gerade + +Schreiben Sie eine Klasse `Gerade`, die von `Figur` abgeleitet ist und als Attribut die Länge der Geraden hat, deren Fläche aber logischerweise `0` ist. + +### Quadrat + +Schreiben Sie eine Klasse `Quadrat` und leiten Sie diese sinnvoll von den bereits vorhandenen Klassen ab. Überlegen Sie sich, welche Informationen Sie für die Berechnung der Fläche benötigen. + +### Tests + +Schreiben Sie Unit-Tests, die die von Ihnen entwickelten Klassen testen. + +### UML-Diagramm + +Zeichnen Sie ein UML-Diagramm von Ihrer Lösung. + + + \ No newline at end of file diff --git a/readme.md b/readme.md index 79b2033..3e8d225 100644 --- a/readme.md +++ b/readme.md @@ -10,114 +10,114 @@ Hier finden Sie die **freiwilligen Übungen** zur Vorlesung Programmieren 2 (PR2 Hinweise zur nötigen Softwareausstattung finden Sie [hier](help/softwareausstattung.md). -| # | Kapitel | Thema | -|-----|-----------------------|-----------------------------------------------------------------------------------| -| 1. | Auffrischung | [String in Großbuchstaben umwandeln](_001/readme.md) | -| 2. | Auffrischung | [Labeled Break](_002/readme.md) | -| 3. | Auffrischung | [Passwortbewertung](_003/readme.md) | -| 4. | Auffrischung | [printf mit Formatstring](_004/readme.md) | -| 5. | Auffrischung | [Maximum in einem Array suchen](_005/readme.md) | -| 6. | Auffrischung | [Taschenrechner](_006/readme.md) | -| 7. | Einführung | [Java-Coding-Standard anwenden](_001/readme.md) | -| 8. | Einführung | [JavaDoc schreiben](_002/readme.md) | -| 9. | Einführung | [Klasse mit JUnit testen](_003/readme.md) | -| 10. | Strukturierung | [Information-Hiding einer Klasse verbessern](_001/readme.md) | -| 11. | Strukturierung | [Vorhandene Bibliotheken als JAR einbinden](_002/readme.md) | -| 12. | Vererbung | [Final anwenden](_001/readme.md) | -| 13. | Vererbung | [Figur und Rechteck](_002/readme.md) | -| 14. | Vererbung | [Figur erweitern](_003/readme.md) | -| 15. | Vererbung | [Figur noch einmal erweitern](_004/readme.md) | -| 16. | Vererbung | [Konstruktoren schreiben](_005/readme.md) | -| 17. | Vererbung | [Polymorphie einsetzen](_006/readme.md) | -| 18. | Vererbung | [Singleton](_007/readme.md) | -| 19. | Vererbung | [Statische Methoden und Attribute](_008/readme.md) | -| 20. | Vererbung | [Methode überladen](_009/readme.md) | -| 21. | Vererbung | [Methoden überschreiben](_010/readme.md) | -| 22. | Vererbung | [Varag-Methode schreiben](_011/readme.md) | -| 23. | Vererbung | [Vererbung von Figuren](_012/readme.md) | -| 24. | Abstrakte Klassen | [Abstrakte Klassen](_001/readme.md) | -| 25. | Abstrakte Klassen | [Abstrakte Klasse](_002/readme.md) | -| 26. | Interfaces | [Comparable implementieren](_001/readme.md) | -| 27. | Interfaces | [Interface Stack entwerfen](_002/readme.md) | -| 28. | Interfaces | [Interface: Uebersetzer](_003/readme.md) | -| 29. | Interfaces | [Interfaces anwenden und entwerfen](_004/readme.md) | -| 30. | Object und Wrapper | [Deep-Copy mit `clone()`](_001/readme.md) | -| 31. | Object und Wrapper | [Clone](_002/readme.md) | -| 32. | Object und Wrapper | [`equals()` und `hashCode()` implementieren und nutzen](_003/readme.md) | -| 33. | Object und Wrapper | [equals und hashCode](_004/readme.md) | -| 34. | Object und Wrapper | [`toString()`-Methode implementieren](_005/readme.md) | -| 35. | Object und Wrapper | [Optimierung bei Integer](_006/readme.md) | -| 36. | Object und Wrapper | [Methoden der Wrapper-Klassen](_007/readme.md) | -| 37. | Enumerationen | [Eigene Enumeration schreiben und verwenden](_001/readme.md) | -| 38. | Enumerationen | [Enumeration schreiben](_002/readme.md) | -| 39. | Enumerationen | [Singleton-Eigenschaft von Enumerationen](_003/readme.md) | -| 40. | Enumerationen | [Stein, Papier, Schere, Echse, Spock](_004/readme.md) | -| 41. | Ausnahmen | [Ausnahmen testen](_001/readme.md) | -| 42. | Ausnahmen | [Eigene Ausnahmen schreiben und an entsprechender Stelle werfen](_002/readme.md) | -| 43. | Ausnahmen | [Eigene Exception schreiben](_003/readme.md) | -| 44. | Ausnahmen | [Handle-or-Declare-Regel anwenden](_004/readme.md) | -| 45. | Ausnahmen | [Ausnahmen mit `try` und `catch` behandeln.](_005/readme.md) | -| 46. | Input und Output | [`BufferedReader` zum zeilenweisen Lesen einsetzen](_001/readme.md) | -| 47. | Input und Output | [DataOutputStream](_002/readme.md) | -| 48. | Input und Output | [DataOutputStream durch Serialisierung ersetzen](_003/readme.md) | -| 49. | Input und Output | [Daten mit `DataOutputStream` und `DataInputStream` verarbeiten](_004/readme.md) | -| 50. | Input und Output | [Daten mit einem `InputStream` lesen](_005/readme.md) | -| 51. | Input und Output | [Daten mit einem `OutputStream` schreiben](_006/readme.md) | -| 52. | Input und Output | [Filesystem-Abstraktion mit `File`](_007/readme.md) | -| 53. | Input und Output | [Fileattribute lesen](_008/readme.md) | -| 54. | Input und Output | [`FilterReader`](_009/readme.md) | -| 55. | Input und Output | [Konsolen Input/Output](_010/readme.md) | -| 56. | Input und Output | [Zeilen einer Textdatei zählen](_011/readme.md) | -| 57. | Input und Output | [`RandomAccessFile`](_012/readme.md) | -| 58. | Input und Output | [`Reader` verwenden](_013/readme.md) | -| 59. | Input und Output | [Rot13-Verschlüsselung](_014/readme.md) | -| 60. | Input und Output | [Datei zerhacken](_015/readme.md) | -| 61. | Input und Output | [Serialisierung](_016/readme.md) | -| 62. | Generische Typen | [Einen generischen Typ schreiben](_001/readme.md) | -| 63. | Generische Typen | [Generische Klasse Pair schreiben](_002/readme.md) | -| 64. | Generische Typen | [Generische Klasse Pair erweitern: NumberPair](_003/readme.md) | -| 65. | Generische Typen | [Generische Klasse Pair erweitern: SamePair](_004/readme.md) | -| 66. | Generische Typen | [PairList](_005/readme.md) | -| 67. | Generische Typen | [Wildcard benutzen](_006/readme.md) | -| 68. | Generische Typen | [Generische Queue](_007/readme.md) | -| 69. | Generische Typen | [`super` und `extends` einsetzen](_008/readme.md) | -| 70. | Generische Typen | [Generische Typen zusammen mit Wildcards einsetzen](_009/readme.md) | -| 71. | Geschachtelte Klassen | [Eigene compare-Methode schreiben](_001/readme.md) | -| 72. | Geschachtelte Klassen | [Innere Klasse Beobachter](_002/readme.md) | -| 73. | Geschachtelte Klassen | [Callback mit anonymer Klasse realisieren](_003/readme.md) | -| 74. | Lambdas | [Comparator als Lambda](_001/readme.md) | -| 75. | Lambdas | [Callback mit Lambda realisieren](_002/readme.md) | -| 76. | Geschachtelte Klassen | [MatrixSuche](_001/readme.md) | -| 77. | Lambdas | [StringTransmogrifier](_001/readme.md) | -| 78. | Lambdas | [StringTransmogrifier erweitern](_002/readme.md) | -| 79. | Collections | [Iterator schreiben](_001/readme.md) | -| 80. | Collections | [Iterator programmieren](_002/readme.md) | -| 81. | Collections | [`List` und dessen Implementierungen](_003/readme.md) | -| 82. | Collections | [`Map` verwenden](_004/readme.md) | -| 83. | Collections | [ReverserGeneric](_005/readme.md) | -| 84. | Collections | [Strings umgekehrt sortieren: Reverser](_006/readme.md) | -| 85. | Collections | [`Set` und dessen Implementierungen](_007/readme.md) | -| 86. | Collections | [CommandLineSorter](_008/readme.md) | -| 87. | Collections | [CommandLineSorter -- Version 2](_009/readme.md) | -| 88. | Collections | [`Comparator` verwenden und Objekte sortieren](_010/readme.md) | -| 89. | Collections | [Wörterbuchprogramm](_011/readme.md) | -| 90. | Streams | [Kleinbuchstaben in einem String zählen](_001/readme.md) | -| 91. | Streams | [Buchstaben in einer Liste von Strings zählen](_002/readme.md) | -| 92. | Streams | [Kleinbuchstaben in einem String zählen](_003/readme.md) | -| 93. | Streams | [Liste filtern](_004/readme.md) | -| 94. | Streams | [Streams mit interner Iteration](_005/readme.md) | -| 95. | Streams | [Map und Filter auf Streams](_006/readme.md) | -| 96. | Streams | [Map und Reduce auf Streams](_007/readme.md) | -| 97. | Streams | [Reduce](_008/readme.md) | -| 98. | Streams | [Summe über reduce bestimmen](_009/readme.md) | -| 99. | Streams | [Wörter zählen](_010/readme.md) | -| 100. | Threads | [Fakultät parallel berechnen](_001/readme.md) | -| 101. | Threads | [Thread per interrupt beenden](_002/readme.md) | -| 102. | Threads | [wait und notify benutzen](_003/readme.md) | -| 103. | Threads | [Parallele Ausgaben erzeugen](_004/readme.md) | -| 104. | Threads | [Race-Condition finden und beheben](_005/readme.md) | -| 105. | Threads | [Stack und Heap unterscheiden](_006/readme.md) | -| 106. | Threads | [synchronized verwenden](_007/readme.md) | -| 107. | Threads | [Timer und TimerTask verwenden](_008/readme.md) | -| 108. | Reflection | [Klasse per Reflection analysieren](_001/readme.md) | -| 109. | Reflection | [Objekte per Reflection erzeugen](_002/readme.md) | +| # | Kapitel | Thema | +|-----|-----------------------|---------------------------------------------------------------------------------------------------| +| 1. | Auffrischung | [String in Großbuchstaben umwandeln](Auffrischung_001/readme.md) | +| 2. | Auffrischung | [Labeled Break](Auffrischung_002/readme.md) | +| 3. | Auffrischung | [Passwortbewertung](Auffrischung_003/readme.md) | +| 4. | Auffrischung | [printf mit Formatstring](Auffrischung_004/readme.md) | +| 5. | Auffrischung | [Maximum in einem Array suchen](Auffrischung_005/readme.md) | +| 6. | Auffrischung | [Taschenrechner](Auffrischung_006/readme.md) | +| 7. | Einführung | [Java-Coding-Standard anwenden](Einführung_001/readme.md) | +| 8. | Einführung | [JavaDoc schreiben](Einführung_002/readme.md) | +| 9. | Einführung | [Klasse mit JUnit testen](Einführung_003/readme.md) | +| 10. | Strukturierung | [Information-Hiding einer Klasse verbessern](Strukturierung_001/readme.md) | +| 11. | Strukturierung | [Vorhandene Bibliotheken als JAR einbinden](Strukturierung_002/readme.md) | +| 12. | Vererbung | [Final anwenden](Vererbung_001/readme.md) | +| 13. | Vererbung | [Figur und Rechteck](Vererbung_002/readme.md) | +| 14. | Vererbung | [Figur erweitern](Vererbung_003/readme.md) | +| 15. | Vererbung | [Figur noch einmal erweitern](Vererbung_004/readme.md) | +| 16. | Vererbung | [Konstruktoren schreiben](Vererbung_005/readme.md) | +| 17. | Vererbung | [Polymorphie einsetzen](Vererbung_006/readme.md) | +| 18. | Vererbung | [Singleton](Vererbung_007/readme.md) | +| 19. | Vererbung | [Statische Methoden und Attribute](Vererbung_008/readme.md) | +| 20. | Vererbung | [Methode überladen](Vererbung_009/readme.md) | +| 21. | Vererbung | [Methoden überschreiben](Vererbung_010/readme.md) | +| 22. | Vererbung | [Varag-Methode schreiben](Vererbung_011/readme.md) | +| 23. | Vererbung | [Vererbung von Figuren](Vererbung_012/readme.md) | +| 24. | Abstrakte Klassen | [Abstrakte Klassen](Abstrakte Klassen_001/readme.md) | +| 25. | Abstrakte Klassen | [Abstrakte Klasse](Abstrakte Klassen_002/readme.md) | +| 26. | Interfaces | [Comparable implementieren](Interfaces_001/readme.md) | +| 27. | Interfaces | [Interface Stack entwerfen](Interfaces_002/readme.md) | +| 28. | Interfaces | [Interface: Uebersetzer](Interfaces_003/readme.md) | +| 29. | Interfaces | [Interfaces anwenden und entwerfen](Interfaces_004/readme.md) | +| 30. | Object und Wrapper | [Deep-Copy mit `clone()`](Object und Wrapper_001/readme.md) | +| 31. | Object und Wrapper | [Clone](Object und Wrapper_002/readme.md) | +| 32. | Object und Wrapper | [`equals()` und `hashCode()` implementieren und nutzen](Object und Wrapper_003/readme.md) | +| 33. | Object und Wrapper | [equals und hashCode](Object und Wrapper_004/readme.md) | +| 34. | Object und Wrapper | [`toString()`-Methode implementieren](Object und Wrapper_005/readme.md) | +| 35. | Object und Wrapper | [Optimierung bei Integer](Object und Wrapper_006/readme.md) | +| 36. | Object und Wrapper | [Methoden der Wrapper-Klassen](Object und Wrapper_007/readme.md) | +| 37. | Enumerationen | [Eigene Enumeration schreiben und verwenden](Enumerationen_001/readme.md) | +| 38. | Enumerationen | [Enumeration schreiben](Enumerationen_002/readme.md) | +| 39. | Enumerationen | [Singleton-Eigenschaft von Enumerationen](Enumerationen_003/readme.md) | +| 40. | Enumerationen | [Stein, Papier, Schere, Echse, Spock](Enumerationen_004/readme.md) | +| 41. | Ausnahmen | [Ausnahmen testen](Ausnahmen_001/readme.md) | +| 42. | Ausnahmen | [Eigene Ausnahmen schreiben und an entsprechender Stelle werfen](Ausnahmen_002/readme.md) | +| 43. | Ausnahmen | [Eigene Exception schreiben](Ausnahmen_003/readme.md) | +| 44. | Ausnahmen | [Handle-or-Declare-Regel anwenden](Ausnahmen_004/readme.md) | +| 45. | Ausnahmen | [Ausnahmen mit `try` und `catch` behandeln.](Ausnahmen_005/readme.md) | +| 46. | Input und Output | [`BufferedReader` zum zeilenweisen Lesen einsetzen](Input und Output_001/readme.md) | +| 47. | Input und Output | [DataOutputStream](Input und Output_002/readme.md) | +| 48. | Input und Output | [DataOutputStream durch Serialisierung ersetzen](Input und Output_003/readme.md) | +| 49. | Input und Output | [Daten mit `DataOutputStream` und `DataInputStream` verarbeiten](Input und Output_004/readme.md) | +| 50. | Input und Output | [Daten mit einem `InputStream` lesen](Input und Output_005/readme.md) | +| 51. | Input und Output | [Daten mit einem `OutputStream` schreiben](Input und Output_006/readme.md) | +| 52. | Input und Output | [Filesystem-Abstraktion mit `File`](Input und Output_007/readme.md) | +| 53. | Input und Output | [Fileattribute lesen](Input und Output_008/readme.md) | +| 54. | Input und Output | [`FilterReader`](Input und Output_009/readme.md) | +| 55. | Input und Output | [Konsolen Input/Output](Input und Output_010/readme.md) | +| 56. | Input und Output | [Zeilen einer Textdatei zählen](Input und Output_011/readme.md) | +| 57. | Input und Output | [`RandomAccessFile`](Input und Output_012/readme.md) | +| 58. | Input und Output | [`Reader` verwenden](Input und Output_013/readme.md) | +| 59. | Input und Output | [Rot13-Verschlüsselung](Input und Output_014/readme.md) | +| 60. | Input und Output | [Datei zerhacken](Input und Output_015/readme.md) | +| 61. | Input und Output | [Serialisierung](Input und Output_016/readme.md) | +| 62. | Generische Typen | [Einen generischen Typ schreiben](Generische Typen_001/readme.md) | +| 63. | Generische Typen | [Generische Klasse Pair schreiben](Generische Typen_002/readme.md) | +| 64. | Generische Typen | [Generische Klasse Pair erweitern: NumberPair](Generische Typen_003/readme.md) | +| 65. | Generische Typen | [Generische Klasse Pair erweitern: SamePair](Generische Typen_004/readme.md) | +| 66. | Generische Typen | [PairList](Generische Typen_005/readme.md) | +| 67. | Generische Typen | [Wildcard benutzen](Generische Typen_006/readme.md) | +| 68. | Generische Typen | [Generische Queue](Generische Typen_007/readme.md) | +| 69. | Generische Typen | [`super` und `extends` einsetzen](Generische Typen_008/readme.md) | +| 70. | Generische Typen | [Generische Typen zusammen mit Wildcards einsetzen](Generische Typen_009/readme.md) | +| 71. | Geschachtelte Klassen | [Eigene compare-Methode schreiben](Geschachtelte Klassen_001/readme.md) | +| 72. | Geschachtelte Klassen | [Innere Klasse Beobachter](Geschachtelte Klassen_002/readme.md) | +| 73. | Geschachtelte Klassen | [Callback mit anonymer Klasse realisieren](Geschachtelte Klassen_003/readme.md) | +| 74. | Lambdas | [Comparator als Lambda](Lambdas_001/readme.md) | +| 75. | Lambdas | [Callback mit Lambda realisieren](Lambdas_002/readme.md) | +| 76. | Geschachtelte Klassen | [MatrixSuche](Geschachtelte Klassen_001/readme.md) | +| 77. | Lambdas | [StringTransmogrifier](Lambdas_001/readme.md) | +| 78. | Lambdas | [StringTransmogrifier erweitern](Lambdas_002/readme.md) | +| 79. | Collections | [Iterator schreiben](Collections_001/readme.md) | +| 80. | Collections | [Iterator programmieren](Collections_002/readme.md) | +| 81. | Collections | [`List` und dessen Implementierungen](Collections_003/readme.md) | +| 82. | Collections | [`Map` verwenden](Collections_004/readme.md) | +| 83. | Collections | [ReverserGeneric](Collections_005/readme.md) | +| 84. | Collections | [Strings umgekehrt sortieren: Reverser](Collections_006/readme.md) | +| 85. | Collections | [`Set` und dessen Implementierungen](Collections_007/readme.md) | +| 86. | Collections | [CommandLineSorter](Collections_008/readme.md) | +| 87. | Collections | [CommandLineSorter -- Version 2](Collections_009/readme.md) | +| 88. | Collections | [`Comparator` verwenden und Objekte sortieren](Collections_010/readme.md) | +| 89. | Collections | [Wörterbuchprogramm](Collections_011/readme.md) | +| 90. | Streams | [Kleinbuchstaben in einem String zählen](Streams_001/readme.md) | +| 91. | Streams | [Buchstaben in einer Liste von Strings zählen](Streams_002/readme.md) | +| 92. | Streams | [Kleinbuchstaben in einem String zählen](Streams_003/readme.md) | +| 93. | Streams | [Liste filtern](Streams_004/readme.md) | +| 94. | Streams | [Streams mit interner Iteration](Streams_005/readme.md) | +| 95. | Streams | [Map und Filter auf Streams](Streams_006/readme.md) | +| 96. | Streams | [Map und Reduce auf Streams](Streams_007/readme.md) | +| 97. | Streams | [Reduce](Streams_008/readme.md) | +| 98. | Streams | [Summe über reduce bestimmen](Streams_009/readme.md) | +| 99. | Streams | [Wörter zählen](Streams_010/readme.md) | +| 100. | Threads | [Fakultät parallel berechnen](Threads_001/readme.md) | +| 101. | Threads | [Thread per interrupt beenden](Threads_002/readme.md) | +| 102. | Threads | [wait und notify benutzen](Threads_003/readme.md) | +| 103. | Threads | [Parallele Ausgaben erzeugen](Threads_004/readme.md) | +| 104. | Threads | [Race-Condition finden und beheben](Threads_005/readme.md) | +| 105. | Threads | [Stack und Heap unterscheiden](Threads_006/readme.md) | +| 106. | Threads | [synchronized verwenden](Threads_007/readme.md) | +| 107. | Threads | [Timer und TimerTask verwenden](Threads_008/readme.md) | +| 108. | Reflection | [Klasse per Reflection analysieren](Reflection_001/readme.md) | +| 109. | Reflection | [Objekte per Reflection erzeugen](Reflection_002/readme.md) |