From 84c5e9413f75482aaf1ea5446a49bb9b86aecc53 Mon Sep 17 00:00:00 2001 From: Sara Date: Tue, 3 Oct 2023 17:54:54 +0200 Subject: [PATCH] formulation changes changes the formulation of some tasks and adds ExtraSheetTask4 class for task 4 on the extra sheet --- .../fius/jvk/tasks/ExtraSheetTask4.java | 55 ++++++++++++++++ sheets/1/exercise-2.tex | 15 +++-- sheets/1/exercise-3.tex | 14 ++--- sheets/2/exercise-1.tex | 18 +++--- sheets/2/exercise-2.tex | 52 ++++++++-------- sheets/2/exercise-3.tex | 62 +++++++++---------- sheets/2/exercise-4.tex | 41 ++++++------ sheets/2/exercise-5.tex | 11 ++-- sheets/2/exercise-6.tex | 5 +- sheets/2/exercise-7.tex | 10 +-- sheets/3/exercise-1.tex | 19 ++---- sheets/3/exercise-2.tex | 4 +- sheets/3/exercise-3.tex | 2 +- sheets/3/exercise-6.tex | 8 +-- sheets/4/exercise-1.tex | 2 +- sheets/4/exercise-3.tex | 2 +- sheets/4/exercise-4.tex | 4 +- sheets/extra/exercise-1.tex | 2 + sheets/extra/jvk-extra.tex | 2 +- 19 files changed, 187 insertions(+), 141 deletions(-) create mode 100644 project/src/main/java/de/unistuttgart/informatik/fius/jvk/tasks/ExtraSheetTask4.java diff --git a/project/src/main/java/de/unistuttgart/informatik/fius/jvk/tasks/ExtraSheetTask4.java b/project/src/main/java/de/unistuttgart/informatik/fius/jvk/tasks/ExtraSheetTask4.java new file mode 100644 index 00000000..9c38c271 --- /dev/null +++ b/project/src/main/java/de/unistuttgart/informatik/fius/jvk/tasks/ExtraSheetTask4.java @@ -0,0 +1,55 @@ +/* + * This source file is part of the FIUS JVK 2019 project. + * For more information see github.com/FIUS/JVK-2019 + * + * Copyright (c) 2019 the FIUS JVK 2019 project authors. + * + * This software is available under the MIT license. + * SPDX-License-Identifier: MIT + */ +package de.unistuttgart.informatik.fius.jvk.tasks; + +import java.util.Random; + +import de.unistuttgart.informatik.fius.icge.simulation.Position; +import de.unistuttgart.informatik.fius.icge.simulation.Simulation; +import de.unistuttgart.informatik.fius.icge.simulation.tasks.Task; +import de.unistuttgart.informatik.fius.icge.simulation.tools.PlayfieldModifier; +import de.unistuttgart.informatik.fius.jvk.provided.entity.Coin; +import de.unistuttgart.informatik.fius.jvk.provided.entity.Neo; +import de.unistuttgart.informatik.fius.jvk.provided.entity.Wall; +import de.unistuttgart.informatik.fius.jvk.provided.factories.CoinFactory; +import de.unistuttgart.informatik.fius.jvk.provided.factories.WallFactory; +import de.unistuttgart.informatik.fius.jvk.provided.shapes.Rectangle; + +/** + * @author Sara Galle + */ +public class ExtraSheetTask4 implements Task{ + + @Override + public void run(Simulation sim) { + PlayfieldModifier pm = new PlayfieldModifier(sim.getPlayfield()); + buildEnvironment(pm); + Neo neo = new Neo(); + neo.setCoinsInWallet(500); + pm.placeEntityAt(neo, new Position(1, 2)); + //your code here + + } + + private void buildEnvironment(PlayfieldModifier pm){ + // build the outside wall + pm.placeEntityAtEachPosition(new CoinFactory(), new Rectangle(new Position(0, 0), new Position(11, 4))); + + Random r = new Random(); + for(int i = 1; i < 11; i++){ + if(r.nextDouble() < 0.4) + pm.placeEntityAt(new Coin(), new Position(i, 1)); + + if(r.nextDouble() < 0.4) + pm.placeEntityAt(new Coin(), new Position(i, 3)); + } + } + +} diff --git a/sheets/1/exercise-2.tex b/sheets/1/exercise-2.tex index 05468385..7cd543f8 100644 --- a/sheets/1/exercise-2.tex +++ b/sheets/1/exercise-2.tex @@ -165,12 +165,12 @@ \subsection*{Syntax} \begin{Infobox} \subsubsection*{Kommandos und Abfragen:} \begin{itemize} - \item Kommando: Sie ändern eventuell was an dem Objekt z.B. benennen den Hund um + \item Kommando: Sie ändern eventuell was an dem Objekt z.B. benennen den Hund um oder lasse den Hund einen Schritt nach vorne gehen \item Abfragen: Sie ändern nichts an dem Objekt, geben dafür aber was zurück z.B. den Hundename \end{itemize} Um Operationen eines Objekts aufzurufen, wird zuerst der Objektname geschrieben, gefolgt von einem Punkt und dem Operationsname. Am Ende stehen paar Rundeklammern \q{()}, in denen Parameter stehen können.\\ - {\color{red} Wichtig: } Operationen können nur auf Objekten und nicht auf Klassen aufgerufen werden. + \textbf{Wichtig:} Operationen können nur auf Objekten und nicht auf Klassen aufgerufen werden. Es gibt hier einen Sonderfall, diesen wirst du in PSE kennenlernen. \end{Infobox} \begin{lstlisting}[title=\textbf{Kommando/Abfrage Syntax}] @@ -213,6 +213,7 @@ \subsubsection*{Konvention Namen:} \item Abfragen sollen mit \lstinline{get} beginnen $\rightarrow$ ''getName'' \item Kommandos, die einen Wert setzen, sollen mit \lstinline{set} beginnen $\rightarrow$ ''setName'' \item Keine Umlaute (ä, ö, ß,...) + \item Einheitliche Sprache, also entweder alles auf Englisch oder Deutsch \end{itemize} \end{Infobox} @@ -220,7 +221,7 @@ \subsubsection*{Konvention Namen:} \vspace{5mm} \noindent -Allgemein sollen alle Namen auf Englisch formuliert werden. +Allgemein sollten aber alle Namen auf Englisch formuliert werden. Variablen und Operationen werden immer mit einem Kleinbuchstaben angefangen.\\ \noindent @@ -250,7 +251,7 @@ \subsubsection*{Einrückungen:} Um direkt auf einen Blick zu erkennen, wo die Operation anfängt und wo sie endet, rückt man den Code in einer Operation (übrigens auch in Klassen) um eine Stufe ein (Eine \fbox{TAB} Stufe).\\ \noindent -{\color{red} Wichtig: }Achte unbedingt darauf das alle Klammern, die du öffnest auch wieder in der richtigen Reihenfolge schließest werden! +\textbf{Wichtig:} Achte unbedingt darauf das alle Klammern, die du öffnest auch wieder in der richtigen Reihenfolge schließest werden! \begin{lstlisting}[title=\textbf{Beispiel gute Namensgebung}] @@ -331,7 +332,9 @@ \subsubsection*{Einrückungen:} Wie du vielleicht bereits gemerkt hast, ist das sehr hilfreich eine gute Dokumentation zu haben. Ziel sollte es also sein so gut wie möglich zu beschreiben was bei einer Operation passiert (auch welche Parameter sie braucht und was sie zurück gibt) oder wofür eine Klasse zuständig ist.\\ - Diese Dokumentation kannst du zum Beispiel online nachschauen oder direkt in der IDE (Eclipse) indem du den Mauszeiger über den Namen einer Operation bewegst, wird ein Kasten mit der Dokumentation dieser Operation angezeigt. + Diese Dokumentation kannst du zum Beispiel online nachschauen oder direkt in der IDE (Eclipse) indem du den Mauszeiger über den Namen einer Operation bewegst, wird ein Kasten mit der Dokumentation dieser Operation angezeigt.\\ + + Mehr zu Dokumentation und JavaDoc folgt noch in späteren Aufgaben. \end{Infobox} \begin{Infobox}[Autocompletion] @@ -358,7 +361,9 @@ \subsubsection*{Einrückungen:} Mit \fbox{Strg + Shift + l} kannst du eine Liste alle Tastenkombinationen ansehen.\\ \\ Wenn du \fbox{Strg} drückst während du auf einen Klassennamen oder einen Operationsnamen im Code klickst, öffnet Eclipse die entsprechende Java-Datei wo sich diese Operation oder Klasse befindet.\\ + Wenn du \fbox{Strg + F11} drückst wird das Programm gestartet/so zu sagen der Run Button gedrückt.\\ + Mit \fbox{Strg + Space} kannst du Autocompletion triggern. \end{Infobox} diff --git a/sheets/1/exercise-3.tex b/sheets/1/exercise-3.tex index edc3f40b..f3cb76a3 100644 --- a/sheets/1/exercise-3.tex +++ b/sheets/1/exercise-3.tex @@ -4,17 +4,17 @@ \label{ex3} \begin{enumerate} - \item Nun wollen wir wie in Aufgabe 1 ein Spiel starten. Dazu ersetzen wir den \lstinline{ new demoTask} und \lstinline{new demoTaskVerifier} durch - den \lstinline{Sheet1Task3Task} und noch ohne den \lstinline{Sheet1Task3TaskVerifier}: + \item Nun wollen wir wie in Aufgabe 1 ein Spiel starten. Dazu ersetzen wir den \lstinline{ new demoTask} und \lstinline{new demoTaskVerifier} in der Main Klasse, durch + den \lstinline{Sheet1Task3Task} wie hier gezeigt: \begin{lstlisting} -Game myGame = new Game("Hello World", new Sheet1Task3Task()); +Game demoGame = new Game("Hello World", new Sheet1Task3Task()); \end{lstlisting} - Du startest das Spiel in der Variable \lstinline{myGame} indem du die Operation \lstinline{run()} darauf aufrufst. + Du startest das Spiel in der Variable \lstinline{demoGame} indem du die Operation \lstinline{run()} darauf aufrufst. \begin{lstlisting} -myGame.run(); +demoGame.run(); \end{lstlisting} Starte das Programm in Eclipse, mit dem kleinen Play-Button oben in der Werkzeugleiste und schau dich ein wenig im Fenster, das dann aufgeht um. @@ -29,7 +29,7 @@ Finde den \q{Task Status} Tab und drücke den Refresh Button. \begin{lstlisting} -Game myGame = new Game("Hello World", new Sheet1Task3Task(), new Sheet1Task3TaskVerifier()); +Game demoGame = new Game("Hello World", new Sheet1Task3Task(), new Sheet1Task3TaskVerifier()); \end{lstlisting} \end{enumerate} @@ -63,6 +63,6 @@ Wie ist der Zusammenhang zwischen Position der Münze und die Koordinaten im Koordinatensystem? - Tipp: Wenn du nicht genau weißt, wie man eine Münze erzeugt, schaue dir den Code, welchen du in Teilaufgabe d) gefunden hast, nochmal an. + \textbf{Tipp:} Wenn du nicht genau weißt, wie man eine Münze erzeugt, schaue dir den Code, welchen du in Teilaufgabe d) gefunden hast, nochmal an. \item Du kannst auch im Fenster selbst Münzen und Wände platzieren, dies geht rechts oben mit dem + und - Button. Versuche die Aufgabe e) nun nochmal zu lösen ohne im Code Münzen zu platzieren. \end{enumerate} diff --git a/sheets/2/exercise-1.tex b/sheets/2/exercise-1.tex index 603c6c20..6f097532 100644 --- a/sheets/2/exercise-1.tex +++ b/sheets/2/exercise-1.tex @@ -14,8 +14,8 @@ \item Instanziiere die Simulation wie bekannt und mache dich mit dieser vertraut. Benutze dabei den Task \lstinline{Sheet2Task1} und den Verifier aus \lstinline{Sheet2Task1Verifier}. \item Lade Neo in die Matrix. - Dafür musst du zuerst ein Objekt der Klasse \lstinline{Neo} erstellen und in einer Variable (z.B. \lstinline{player}) speichern. - Dann kannst du den \lstinline{player} und die Münze wie bereits gelernt mit dem \lstinline{PlayfieldModifier} auf dem Spielfeld platzieren. + Dafür musst du zuerst ein Objekt der Klasse \lstinline{Neo} erstellen und in einer Variable (z.B. \lstinline{neo}) speichern. + Dann kannst du \lstinline{neo} und die Münze wie bereits gelernt mit dem \lstinline{PlayfieldModifier} auf dem Spielfeld platzieren. Dein Code sollte in etwa wie folgt aussehen. @@ -24,25 +24,25 @@ // Your Implementation here PlayfieldModifier pm = new PlayfieldModifier(sim.getPlayfield()); - Neo player = new Neo(); - pm.placeEntityAt(player, new Position(1,1)); + Neo neo = new Neo(); + pm.placeEntityAt(neo, new Position(1,1)); \end{lstlisting} Überprüfe im \fbox{Task Status} Tab ob dein Code korrekt funktioniert. \item Damit sich Neo bewegt, musst du ihm eines der folgenden Kommandos geben und die Simulation mit dem Play Button starten. Im Simulationsfenster musst du dann den Play Button links oben drücken. \\ - Tipp: Neben dem Play Button im Simulationsfenster ist ein Geschwindigkeitsschieberegler, mit dem du die Simulationsgeschwindigkeit anpassen kannst. + \textbf{Tipp:} Neben dem Play Button im Simulationsfenster ist ein Geschwindigkeitsschieberegler, mit dem du die Simulationsgeschwindigkeit anpassen kannst. \begin{lstlisting}[firstnumber=20] - player.move(); - player.moveIfPossible(); - player.turnClockWise(); + neo.move(); + neo.moveIfPossible(); + neo.turnClockWise(); \end{lstlisting} Teste alle 3 Kommandos.\\ \item Mit den gegebenen Kommando, kann sich Neo nur nach rechts drehen.\\ Finde un einen Weg, wie du Neo dazu bringen kannst, sich nach links (oder nach hinten) umzudrehen? - Hinweis: Du kannst Kommandos mehrfach hintereinander aufrufen. + \textbf{Hinweis:} Du kannst Kommandos mehrfach hintereinander aufrufen. \item Gib Neo nun die folgenden Anweisungen: { diff --git a/sheets/2/exercise-2.tex b/sheets/2/exercise-2.tex index 2e1eb52d..2492b3c7 100644 --- a/sheets/2/exercise-2.tex +++ b/sheets/2/exercise-2.tex @@ -2,7 +2,7 @@ \excercise{Exceptions} -Tank und Neo wollen nun in einer neuen Simulationsumgebung trainieren. +Tank und Neo wollen nun in einer neuen Simulationsumgebung trainieren. Dabei soll Neo in einem potenziell gefährlichen Situation so schnell wie möglich zur nächsten Telefonstation laufen. \begin{enumerate} @@ -10,44 +10,49 @@ \item Als Operator hat Tank die Möglichkeit Hindernisse zwischen Neo und der Telefonstation einzufügen. Betrachte die Klasse \lstinline{Sheet2Task2} mit der Operation \lstinline{run} an der markierten Stelle. - Überlege dir wie du an Tank's Stelle ein solches Hindernis an einer geeigneten Stelle platzieren kannst und platziere es dort. - Falls du nicht weißt wie man ein Hindernis platziert, schaue dir nochmal Blatt 1 Aufgabe 3 oder die Klasse \lstinline{Sheet2Task2} genauer an. - - Was passiert, wenn man jetzt die Simulation wie zuvor ausführt? + Überlege dir wie du an Tank's Stelle ein solches Hindernis an einer geeigneten Stelle platzieren kann und platziere es dort. Falls du nicht weißt wie man ein Hindernis platziert, schaue dir nochmal Blatt 1 Aufgabe 3 oder die Klasse \lstinline{Sheet2Task2} genauer an. + Was passiert, wenn man jetzt die Simulation wie zuvor ausführt?\\ + \end{enumerate} -\begin{Infobox}[Exceptions] - Eine Exception ist ein Fehler der beim Ausführen des Programmes passieren kann wenn z.B. unvorhergesehene oder verbotene Sachen passieren.\newline +\textbf{Antwort:} Es wird eine Excepion geworfen.\\ +\begin{Infobox}[Exception] + Eine Exception ist ein Fehler der beim Ausführen des Programmes passieren kann wenn z.B. unvorhergesehene oder verbotene Sachen passieren.\\ + - \textbf{Hinweis:} Es gibt in PSE später genauere Unterscheidungen zwischen verschiedene Arten von Exceptions und Errors, wir wollen das ganze hier mal vereinfacht betrachten. - Dabei werden wir allerdings teilweise nicht hundertprozentig genau sein.\newline + \textbf{Notiz:} Es gibt in PSE später genauere Unterscheidungen zwischen verschiedene Arten von Exceptions, Errors usw. wir wollen das ganze hier mal vereinfacht betrachten. Dabei werden wir allerdings teilweise nicht hundertprozentig genau sein.\\ Als nächstes wollen wir den Aufbau einer Exception genauer verstehen. Überlege dazu was der folgende Programmausschnitt macht: \begin{lstlisting}[numbers=left,xleftmargin=2em,frame=single,framexleftmargin=1.5em] -public class Main { +public class Main{ //Programmeinstieg - public void main() { + public void main(){ //some other code divide(1, 0); } - - public int divide(int a, int b) { + + public Integer divide(Integer a, Integer b){ return a / b; } } \end{lstlisting} + \textbf{Exkurs:} Operatoren sind in eine Programmiersprache eingebaute Funktion, die durch ein Zeichen repräsentiert werden. + Beispielsweise können wir zwei Zahlen durch den \texttt{-} Operator voneinander abziehen, z.B. mit \texttt{42 - 73}. + Damit wir das Ergebnis auch ansehen können und die Rechnung nicht nur ausgewertet wird und dann verschwindet, kann man es entweder in einer Variable speichern (siehe Nachschlagwerk) oder als Argument in einer Funktionen verwenden. + Wenn man beispielsweise das Ergebnis der Subtraktion oben auf der Konsole ausgeben möchte, kann man diese einfach als Parameter in die runden Klammern der Java-internen Funktion \lstinline{System.out.println()} geben. + Die meisten Programmiersprachen haben eingebaute, einfache arithmetische Operatoren wie \texttt{+}, \texttt{-}, \texttt{*} oder \texttt{/}.\\ - Dabei lässt sich erkennen, dass in Zeile 9 der Programmausführung durch 0 geteilt wird.\\ + Im oberen Programmausschnitt lässt sich erkennen, dass in Zeile 9 der Programmausführung durch 0 geteilt wird.\\ Dieses ungewollte (''verbotene'') Verhalten wird bei der Programmausführung durch die folgende Exception ersichtlich: \begin{lstlisting}[keywords={}, breaklines=true, numbers=none] java.lang.ArithmeticException: / by zero at de.unistuttgart.informatik.fius.jvk.Main.divide(Main.java:9) at de.unistuttgart.informatik.fius.jvk.Main.main(Main.java:5) - \end{lstlisting} + \end{lstlisting} Der Inhalt der Fehlermeldung, lässt sich in folgende Teile aufteilen: @@ -58,17 +63,9 @@ In unserem Fall ist die Nachricht \lstinline{"/ by zero"}. \item Fehlerstelle im Programm: Der Stacktrace der Exception beinhaltet Informationen, wo im Programm die Exception geflogen also passiert ist. Genauer, welche Klassen wo Fehler geworfen haben und so den eigentlichen Fehler produziert haben.\\ Hier interessiert uns fürs Erste nur die zweite Zeile. In unserem Beispiel deutet die zweite Zeile darauf hin, dass die Exception expliziet in der \lstinline{Main} Klasse in der \lstinline{divide} - Operation in Zeile 9 geflogen ist, was wiederum Auswirkungen auf die Main Funktion hatte. + Operation in Zeile 9 geflogen ist, was wiederum Auswirkungen auf die Main Funktion hatte. \end{enumerate} - \textit{Exkurs:} Operatoren sind in eine Programmiersprache eingebaute Funktion, die durch ein oder mehrere Zeichen repräsentiert werden.\newline - - Beispielsweise können wir zwei Zahlen durch den \texttt{-}-Operator voneinander abziehen, z.B. mit \texttt{42 - 73}. - Damit wir das Ergebnis auch ansehen können und die Rechnung nicht nur ausgewertet wird und dann verschwindet, kann man es entweder in einer Variable speichern (siehe Nachschlagwerk) oder etwa als Argument in einer Funktionen verwenden.\newline - - Wenn man beispielsweise das Ergebnis der Subtraktion oben auf der Konsole ausgeben möchte, kann man diese einfach als Parameter in die runden Klammern der Java-internen Funktion \lstinline{System.out.println()} geben. - Die meisten Programmiersprachen haben eingebaute arithmetische Operatoren wie \texttt{+}, \texttt{-}, \texttt{*} oder \texttt{/}. - \end{Infobox} @@ -94,8 +91,8 @@ \item[ii)] In welcher Operation wurde die Exception geworfen? \item[iii)] In dem obigen Stacktrace sind die dazugehörigen Zeilennummern verloren gegangen. Ersetze diese! - \textbf{Tipp}: Schaue dazu in die Console.\\ - \textbf{Warum diese Analyse}: Stacktraces können vorallem bei komplexerem Code helfen rauszufinden, was wo nicht funktioniert und helfen somit bei der Fehlersuche. + \textbf{Tipp:} Schaue dazu in die Console.\\ + \textbf{Warum diese Analyse:} Stacktraces können vorallem bei komplexerem Code helfen rauszufinden, was wo nicht funktioniert hat und helfen somit bei der Fehlersuche. \end{enumerate} \item Wie wir gelernt haben sind Exceptions ein Anzeichen das etwas passiert ist was nicht passieren sollte, jetzt wollen wir die Exception verhindern.\\ @@ -108,6 +105,7 @@ Wenn ja wie ? \textbf{Hinweis}: In Aufgabe 1 hast du noch ein weiteres Kommando kennengelernt mit dem du Neo bewegen kannst. - Du kannst Neo aber auch um die Wand herum gehen lassen. + \item \optional Welche \q{linenumber} aus dem obigen Stacktrace ändert sich, wenn man zwischen den \lstinline{neo.move()} Aufrufen jeweils Leerzeilen einfügt? \end{enumerate} + diff --git a/sheets/2/exercise-3.tex b/sheets/2/exercise-3.tex index 83be23e0..3961b206 100644 --- a/sheets/2/exercise-3.tex +++ b/sheets/2/exercise-3.tex @@ -2,56 +2,49 @@ \excercise{Vor- und Nachbedingungen} -In dieser Aufgabe wollen wir eine neue Funktion von Neo einführen. -Neo kann Goldmünzen mit den Kommandos \lstinline{collectCoin()} und \lstinline{dropCoin()} aufheben und niederlegen. +In dieser Aufgabe wollen wir eine neue Funktion von Neo einführen. +Neo kann Goldmünzen mit den Kommandos \lstinline{collectCoin()} und \lstinline{dropCoin()} aufheben und niederlegen. \begin{enumerate} \item Instanziiere die Simulation wie bekannt (\lstinline{Sheet2Task3} und \lstinline{Sheet2Task3Verifier}) und mache dich mit dieser vertraut. - \item Auf dem Spielfeld siehst du viele Goldmünzen. + \item Auf dem Spielfeld siehst du viele Münzen. Wenn Neo auf einem Feld mit Münzen steht kann er mit dem Kommando \lstinline{collectCoin()} eine Münze aufheben.\\ - Lass Neo nun alle Goldmünzen auf dem Spielfeld aufheben. + Lass Neo nun alle Münzen auf dem Spielfeld aufheben. \item Mit dem Kommando \lstinline{dropCoin()} kannst du eine Münze wieder auf dem Spielfeld ablegen auf welchem sich Neo befindet.\\ Verwende das \lstinline{dropCoin()} Kommando, um alle Münzen die Neo aufgesammelt hat auf das Feld (3,3) zu legen.\\ - Hinweis: auf dem Spielfeld liegen genau 6 Münzen. + \textbf{Hinweis:} auf dem Spielfeld liegen genau 6 Münzen. \end{enumerate} \begin{Infobox}[Vor- und Nachbedingungen] - Damit Operationen richtig funktionieren, müssen oft bestimme Bedingungen gelten, bevor man diese aufruft. - Zum Beispiel darf sich bei dem \lstinline{move()} Kommando, wie wir in der letzten Aufgabe gesehen haben, vor dem Spieler keine Wand befinden.\newline + Damit Operationen richtig funktionieren, müssen oft bestimme Bedingungen gelten, bevor man diese aufruft.\\ + Z.B. darf sich bei dem \lstinline{move()} Kommando, wie wir in der letzten Aufgabe gelernt haben, vor dem Spieler keine Wand befinden.\\ + Da diese Bedingungen gelten müssen bevor man die Operation aufruft, nennt man sie Vorbedingungen.\\ + Meistens findet man diese Vorbedingungen im Javadoc Kommentar (Dokumentation) der Operation. Welchen man sehen kann wenn man mit der Maus, wie in Blatt 1 Aufgabe 2 (Nachschlagwerk) beschrieben, über dem Funktionsnamen hovert.\\ - Da diese Bedingungen gelten müssen bevor man die Operation aufruft, nennt man sie \textit{Vorbedingungen}. - Meistens findet man diese Vorbedingungen im Javadoc Kommentar (Dokumentation) der Operation. - Diese kann man einsehen, wenn man mit der Maus - wie im Nachschlagwerk beschrieben - über dem Funktionsnamen hovert. - Auch gelangst du mit \fbox{Strg} + Linke Maustaste zur Definition einer Methode, Klasse oder Variable, um dir die entsprechende JavaDoc oder den Code dort genauer anzusehen.\newline - - So wie bei Vorbedingungen bestimmte Zustände gelten müssen bevor man die Operation aufrufen darf, sind Nachbedingungen Zustände die nach einer Operation gelten. - Nach dem Ausführen von \lstinline{move()} hat sich Neo beispielsweise eine Position nach vorne (in seine Blickrichtung) bewegt, was also die Nachbedingung dieser Operation ist. - Diese gilt allerdings, nur wenn vor dem Aufruf von \lstinline{move()} die Vorbedingungen erfüllt sind, also unter anderen, dass sich keine Wand vor Neo befindet. + So wie bei Vorbedingungen bestimmte Zustände gelten müssen bevor man die Operation aufrufen darf, sind Nachbedingungen Zustände die nach einer Operation gelten.\\ + Nach dem Ausführen von \lstinline{move()} hat sich Neo eine Position nach vorne (in seine Blickrichtung) bewegt.\\ + Das gilt allerdings, nur wenn vor dem Aufruf von \lstinline{move()} die Vorbedingungen erfüllt sind z.B. es darf sich keine Wand vor Neo befinden.\\ \end{Infobox} -\begin{Infobox}[Javadoc] - Im Zusammenhang mit Vor- und Nachbedingungen, ist wichtig zu erwähnen, dass diese neben einer detaillierteren Beschreibung der Funktion im Javadoc einer Operation zu finden sein sollten.\newline - - Javadoc-Kommentare sind spezielle Kommentare in Quellcode vor einer Operation, einer Klassenvariable oder Klasse. - Wie andere Kommentare werden sie nicht als Programmcode ausgeführt, sondern dienen zur Dokumentation der zugeordneten Elemente.\newline +\begin{Infobox}[JavaDoc] + Im Zusammenhang mit Vor- und Nachbedingungen, ist wichtig zu erwähnen, dass diese neben einer detaillierteren Beschreibung der Funktion im Javadoc einer Operation zu finden sein sollten. + JavaDoc befindet sich als spezieller Kommentar in Quellcode vor einer Operation oder Klasse. + Wie andere Kommentare wird er nicht als Programmcode ausgeführt, sondern dient zur Dokumentation der Funktion der zugeordneten Elemente. In den letzten Aufgaben haben wir bis jetzt immer recht \enquote{einfache} Methoden verwendet, deren Zweck Du vielleicht ganz gut aus dem Quellcode oder Beispielen ableiten konntest. - Beim schreiben von eigenen Methoden ist es daher sehr wichtig darauf zu achten, dass der Name der Funktion und die Werte, die diese "empfangen" kann, für sich sprechende Namen zu geben.\newline - + Beim schreiben von eigenen Methoden ist es daher sehr wichtig darauf zu achten, dass der Name der Funktion und die Werte, die diese ''empfangen'' kann, für sich sprechende Namen haben. Vielleicht sind dir die Funktion von machen Methoden allerdings auch noch nicht ganz klar geworden oder der Name hat zu wenig Kontext hergegeben, um die Funktion der Methode zu verstehen. - Genau hier setzt die Dokumentation in Form von JavaDoc ein.\newpage - - Hier ein Beispiel, wie ein Javadoc-Kommentar aussehen kann: + Genau hier setzt die Dokumentation in Form von JavaDoc ein. \begin{lstlisting}[numbers=none] /** * Turn Neo around. * * This operation turns Neo around by calling - * turnClockWise twice. This operation will fail + * turnClockWise twice. This operation will fail * if Neo is not on a Playfield of a Simulation. * */ @@ -61,14 +54,19 @@ } \end{lstlisting} - Ein Javadoc Kommentar unterscheidet sich nur dahingehend von einem normalen Kommentar, dass dieser mit \lstinline{/**} statt von \lstinline{/*} beginnt.\newline - + Ein Javadoc Kommentar unterscheidet sich nur dahingehend von einem normalen Kommentar, dass dieser mit \lstinline{/**} statt \lstinline{/*} anfängt.\\ + Der erste Satz ist eine kurze Beschreibung was die Operation macht. - Gefolgt davon kommt eine ausführliche Beschreibung der Operation oder Klasse. - Der Kommentar sollte alles enthalten, was man jemals über die Operation wissen muss.\newline + Gefolgt davon kommt eine ausführliche Beschreibung der Operation oder Klasse.\\ + + Der Kommentar sollte alles enthalten, was man jemals über die Operation wissen muss. + + Im Javadoc Kommentar sollen dabei insbesondere wie wir vorhin schon erwähnt haben, Vorbedingungen beschrieben werden, also was der Programmierer beachten muss bevor er die Operation nutzen darf. + Wenn dies nicht passiert oder der JavaDoc ungenau ist, ist es sehr wahrscheinlich das daraus ein Bug entstehen kann. - In dem Javadoc Kommentar soll dabei insbesondere wir vorhin schon erwähnt \textit{Vorbedingungen} beschrieben werden, also was der Programmierer beachten muss bevor er die Operation nutzen darf. - Wenn dies nicht passiert oder das Javadoc ungenau ist, ist es sehr wahrscheinlich das daraus ein Bug entstehen kann, weil die Nutzer vielleicht nicht angegebene Vorbedingungen der Methode nicht erfüllen. + Eclipse kann diese speziellen JavaDoc-Kommentare erkennen und anzeigt, wenn man mit der Maus im Quelltext über einen Aufruf einer Operation fährt. + Außerdem kann man im Quellcode durch \lstinline{Ctrl + Linksklick} auf Operationen oder Klassen zu den Definitionen von diesen gelangen, wo man auch die zugehörige JavaDoc finden sollte. + Letzteres kann man natürlich auch nutzen, um die Funktion einer Operation durch das Lesen des Quellcodes besser zu verstehen. \end{Infobox} diff --git a/sheets/2/exercise-4.tex b/sheets/2/exercise-4.tex index 95c16507..9f9b6852 100644 --- a/sheets/2/exercise-4.tex +++ b/sheets/2/exercise-4.tex @@ -2,54 +2,53 @@ \excercise{Verzweigung} -In dieser Aufgabe wollen wir uns Conditions näher anschauen. +In dieser Aufgabe wollen wir uns Conditions (Verzweigungen) näher anschauen. -\begin{enumerate} +\begin{enumerate} \item Instanziiere die Simulation wie bekannt (\lstinline{Sheet2Task4} und \lstinline{Sheet2Task4Verifier}) und mache dich mit dieser vertraut. Was passiert bei der Ausführung? \end{enumerate} \begin{Infobox}[Bool'sche Werte] - Um if-Verzweigung verstehen zu können, müssen wir uns zuerst bool'sche Werte anschauen. Bool'sche Werte sind Variablen oder auch Rückgabewerte von Funktionen, welche nur den Wert \lstinline{true} oder \lstinline{false} (also wahr oder falsch) annehmen können.\newline - + Um if-Verzweigung verstehen zu können, müssen wir uns zuerst Bool'sche Werte anschauen. Bool'sche Werte sind Variablen oder auch Rückgabewerte von Funktionen, welche nur den Wert \lstinline{true} oder \lstinline{false} (also wahr oder falsch) annehmen können. \\ Im Quellcode hat jeder Wert, ob Rückgabe einer Funktion oder eben Variablen, einen Typ. Dieser Typ bestimmt, welche Werte für diesen Wert zulässig sind. Beispielsweise gibt es einfachen - primitive - Werte wie zum Beispiel Ganzzahlen oder Zeichenketten, die wir bisher sogar schon verwendet haben. - Eine Zeichenkette (in Programmiersprachen in der Regel als \texttt{String} bezeichnet) kann beispielsweise den Inhalt \lstinline{"Hello World"} haben. - Diesen Wert allerdings in einer Variable, die nur Ganzzahlen speichert (= \lstinline{int} für Integer) zuweisen, macht allerdings weniger Sinn.\newline - + Eine Zeichenkette (in Programmiersprachen in der Regel als \lstinline{String} bezeichnet) kann beispielsweise den Inhalt \lstinline{''Hello World''} haben. + Diesen Wert allerdings in einer Variable, die nur Ganzzahlen speichert (= \lstinline{int} für Integer) zu speichern, macht allerdings weniger Sinn. + Genau wie \lstinline{int} gibt es noch ein paar andere primitive Typen, welche häufig verwendet werden. Am häufigsten kommen dabei wohl bool'sche Werte mit dem zugehörige primitive Typ \lstinline{boolean} zur Verwendung. - Da es sich um einen primitiven Typ handelt, wird er genau wie \lstinline{int} in klein geschrieben.\newline - + Da es sich um einen primitiven Typ handelt, wird er genau wie \lstinline{int} in klein geschrieben.\\ + Es ist wichtig zu erwähnen, dass in Java \lstinline{int} und \lstinline{Integer} dieselben Werte speichern können, aber nicht derselbe Typ sind. - Den genauen Unterschied zwischen den beiden Typen werdet ihr noch in der PSE (\enquote{Programmierung und Softwareentwicklung}) kennenlernen.\newline - - Die Funktion \lstinline{player.canMove()} zum Beispiel gibt den bool'schen Wert \lstinline{true} zurück wenn der Player (z.B. Neo) eine Schritt in seine Blickrichtung gehen kann, also auf diesem Feld sind keine Hindernisse. + Den genauen Unterschied zwischen den beiden Typen werdet ihr noch in der PSE (Programmierung und Softwareentwicklung) kennenlernen. + + Die Funktion \lstinline{neo.canMove()} zum Beispiel gibt den bool'schen Wert \lstinline{true} zurück wenn Neo eine Schritt in seine Blickrichtung gehen kann, also auf diesem Feld sind keine Hindernisse sind. Die \lstinline{canMove}-Methode hat also den Rückgabewert \lstinline{boolean}. - + \end{Infobox} \begin{Infobox}[IF-Verzweigung] Nun betrachten wir ein beispielhaftes IF-Statement: \begin{lstlisting}[breaklines=true, numbers=none] - if (player.canMove()) { - player.move(); - } + if (neo.canMove()) { + neo.move(); + } \end{lstlisting} - Das beispielhafte IF-Statement bedeutet informal, dass falls player.canMove() den bool'schen Wert \lstinline{true} hat, wird player.move() ausgeführt. Falls player.canMove() den bool'schen Wert \lstinline{false} hat wird der Code in den geschweiften Klammern übersprungen. + Das beispielhafte IF-Statement bedeutet informal, dass falls \lstinline{neo.canMove()} den bool'schen Wert \lstinline{true} hat, wird \lstinline{neo.move()} ausgeführt. Falls \lstinline{neo.canMove()} den bool'schen Wert \lstinline{false} hat wird der Code in den geschweiften Klammern übersprungen. \begin{lstlisting}[breaklines=true, numbers=none] -if (player.canMove()) { - player.move(); +if (neo.canMove()) { + neo.move(); } else { System.out.println("Morpheus: There is a difference between knowing the path and walking the path") } \end{lstlisting} - Nun wurde noch ein ELSE-Statement angehängt. Dadurch dient der Code als Verzweigung mit der Bedingung, falls etwas gilt mache etwas, falls nicht mache irgendwas anderes. In unserem Beispiel, falls player.canMove() den bool'schen Wert \lstinline{false} hat wird auf der Konsole der Text \enquote{\texttt{Morpheus: There is a difference between knowing the path and walking the path}} ausgegeben.\newline + Nun wurde noch ein ELSE-Statement angehängt. Dadurch dient der Code als Verzweigung mit der Bedingung, dass falls etwas gilt mache etwas, falls nicht mache irgendwas anderes. In unserem Beispiel, falls \lstinline{neo.canMove()} den bool'schen Wert \lstinline{false} hat wird auf der Konsole der Text ''Morpheus: There is a difference between knowing the path and walking the path'' ausgegeben.\\ Für sowohl das IF- als auch das ELSE-Statement gilt, dass in den geschweiften Klammern beliebig viel Code stehen kann, nicht nur eine Zeile wie in unserem Beispiel. \end{Infobox} @@ -59,7 +58,7 @@ \item Betrachte die Operation \lstinline{movement} der Klasse \lstinline{Sheet2Task4}.\\ Füge das obige IF-Statement an einer geeigneten Stelle ein und führe die Simulation erneut aus. Dabei sollten die dann noch vorhandenen \lstinline{.move()} Kommandos in den ersten Code-Block vom IF verschoben werden. - Der \lstinline{else} Code-Block soll erstmals leer bleiben. + Der \lstinline{else} Code-Block soll erstmal leer bleiben. \item Schließe nun das Fenster und öffne es erneut. Lösche die Wand in dem Spielfenster. Dazu musst du oben rechts das rote Minus auswählen und dann auf die Wand klicken. diff --git a/sheets/2/exercise-5.tex b/sheets/2/exercise-5.tex index d4428c51..591b1f1f 100644 --- a/sheets/2/exercise-5.tex +++ b/sheets/2/exercise-5.tex @@ -22,8 +22,8 @@ Das Verhalten von While Schleifen lässt sich einfach darstellen: \begin{enumerate} - \item[1:] Der Computer prüft als Erstes, ob die Bedienung \lstinline{palyer.canMove()} erfüllt ist, also das sich kein Hindernis im Weg befindet, wenn NEIN springe zu Punkt 4. - \item[2:] Das Schleifeninnere \lstinline{player.move()} wird ausgeführt. + \item[1:] Der Computer prüft als Erstes, ob die Bedienung \lstinline{neo.canMove()} erfüllt ist, also ob sich kein Hindernis im Weg befindet. Wenn ein Hindernis im Weg ist, springe zu Punkt 4. + \item[2:] Das Schleifeninnere \lstinline{neo.move()} wird ausgeführt. \item[3:] Springe zurück zu Punkt 1 \item[4:] Verlasse die Schleife \end{enumerate} @@ -51,7 +51,7 @@ Dafür kannst du eine der Schleifen von oben verwenden. \textbf{Hinweis}: Bei dieser Aufgabe ist das Spielfeld und die Anzahl der Münzen jedes mal anders. - \item Platziere jetzt alle Münzen auf dem rechten mittleren Spielfeld an der Wand. + \item Platziere jetzt alle Münzen auf dem rechten mittleren Spielfeld an der Wand. Hier kannst du dich wieder an den Beispielen oben orientieren. \item Zeichne mit den aufgehobenen Münzen eine Linie auf der mittleren Spur, beginnend auf dem Feld neben Neo. Auf jedem Feld in der mittleren Reihe sollte jetzt eine Münze liegen.\\ @@ -63,9 +63,10 @@ \textbf{Hinweis}: Hier sollte es ausreichen den Code-Block der Schleife aus der Teilaufgabe davor anzupassen. \item Platziere auf jedem zweiten Feld eine Münze.\\ - Also die Linie soll abwechselnd eine Münze und ein leeres Feld nacheinander haben. + Also die Linie soll abwechselnd eine Münze und ein leeres Feld nacheinander haben.\\ + \textbf{Hinweis}: Hier kannst du entweder die Abfolge direkt kodieren oder mit Variablen vom Typ \lstinline{boolean} und if-Verzweigungen aus Aufgabe 4 arbeiten. - \item \optional Lege auf jedem von Neo aus erreichbaren Feld genau eine Münze ab. + \item \optional Lege auf jedem von Neo aus erreichbaren Feld genau eine Münze ab. Beachte hierbei, dass die Wände auf der oberen und unteren Spur zufällig platziert werden. \textbf{Hinweis}: Hier musst du neben einer While Schleife auch IF-Statements verwenden.\\ diff --git a/sheets/2/exercise-6.tex b/sheets/2/exercise-6.tex index c9af9e6d..0a7c4e9c 100644 --- a/sheets/2/exercise-6.tex +++ b/sheets/2/exercise-6.tex @@ -7,7 +7,8 @@ \item Lasse Neo im Uhrzeigersinn an der Wand entlang laufen, bis er wieder an seinem Startpunkt angekommen ist.\\ Implementiere das Verhalten an der markierten Stelle in der Klasse \lstinline{Sheet2Task6}. Verwende die Konzepte welche du in den vorherigen Aufgaben kennengelernt hast um die Menge an zu kopierenden Code zu minimieren. \item Lasse nun Neo gegen den Uhrzeigersinn an der Wand entlang laufen, bis er wieder an seinem Startpunkt angekommen ist.\\ - Welche der beiden Varianten ist die schnellere? + Welche der beiden Varianten ist die schnellere?\\ + Welche hat weniger Code? \textbf{Hinweis}: Du kannst dir die Zeit des aktuellen Zeitpunktes der Simulation mit dem folgenden Programmcode auf der Konsole ausgeben lassen. @@ -59,7 +60,7 @@ Dieses Schlüsselwort kann ähnlich wie eine Variable verwendet werden. Es hat den Typen der Klasse in der es verwendet wird, z.B. in der Klasse Neo hat this den Typ Neo.\\ Ihr könnt den Wert von \lstinline{this} aber nicht selber bestimmen. - Java bestimmt den Wert von \lstinline{this} für euch (nämlich eine Referenz auf das aktuelle Objekt in der \lstinline{this} geschrieben wurde).\\ + Java bestimmt den Wert von \lstinline{this} für euch (nämlich eine Referenz auf das aktuelle Objekt der Klasse in der \lstinline{this} geschrieben wurde).\\ Innerhalb der ganzen Klasse \lstinline{Neo} und damit auch in der Operation \lstinline{turnAround()} könnt ihr mit \lstinline{this}. alle Operationen aufrufen, die ihr bisher über \lstinline{neo}. aufgerufen habt. diff --git a/sheets/2/exercise-7.tex b/sheets/2/exercise-7.tex index be1a5f74..3849e000 100644 --- a/sheets/2/exercise-7.tex +++ b/sheets/2/exercise-7.tex @@ -4,9 +4,9 @@ \begin{Infobox}[HowTo: Klassen und Objekte auseinander halten] Klassen kann man sich wie Baupläne für Objekte vorstellen.\\ - Während Objekte nach dem in den dazugehörigen Klassen definierten Bauplänen gebaute Instanzen.\\ + Während Objekte nach dem in den dazugehörigen Klassen definierten Bauplänen gebaute Instanzen sind.\\ - Beispiel: Wir haben eine Klasse Student. + \textbf{Beispiel:} Wir haben eine Klasse Student. Die Klasse definiert dabei, dass ein Student folgende Eigenschaften und Operationen haben soll aber befüllt die Eigenschaften noch nicht mit Werten: \begin{itemize} @@ -75,12 +75,12 @@ \item Identifiziere im folgenden Text drei vorkommende Klassen mit jeweils drei Eigenschaften: \begin{quotation} - Die BilligMöbel GmbH ist ein Unternehmen mit 1000 Mitarbeitern. - Die Akte jedes Mitarbeiters enthält seinen Namen und Alter sowie sein Gehalt und seine Kontonummer. + Die BilligMöbel GmbH ist ein Unternehmen mit 1000 Mitarbeitenden. + Die Akte jedes/jeder Mitarbeiter*in enthält seinen/ihren Namen und Alter sowie sein/ihr Gehalt und seine/ihre Kontonummer. Aufgrund von Massenproduktion kann das Unternehmen seine Möbel sehr billig verkaufen. So werden beispielsweise Stühle für 10€, Liegen für 15€ und Schränke für 32€ angeboten. Alle Möbelstücke sind aus Plastik oder Holz sowie in verschiedenen Farben erhältlich. - In einer Kundenkartei vermerkt das Unternehmen jeweils das Geschlecht und die Postleitzahl ihrer Kunden sowie die Kosten des letzten Einkaufs. + In einer Kundenkartei vermerkt das Unternehmen jeweils das Geschlecht und die Postleitzahl ihrer Kund*innen sowie die Kosten des letzten Einkaufs. \end{quotation} \end{enumerate} diff --git a/sheets/3/exercise-1.tex b/sheets/3/exercise-1.tex index 87f7a7ca..b1dc04af 100644 --- a/sheets/3/exercise-1.tex +++ b/sheets/3/exercise-1.tex @@ -43,7 +43,7 @@ Nur wenn sie den Wert \lstinline{true} zurück gibt, ist wird der Code-Block der Schleife ausgeführt.\newline Der Ausdruck \lstinline{i < 5} überprüft hier, ob der Wert der Variable \texttt{i} größer (echt) kleiner als die Ganzzahl \texttt{5} ist. - Bei \texttt{<} handelt es sich also wie schon bei \texttt{+},\texttt{-},\texttt{/}, \texttt{*} und \texttt{\%} um eine Operator - genauer einen Vergleichsoperator - der in den meisten Programmiersprachen vorhanden ist. + Bei \texttt{<} handelt es sich also wie schon bei \texttt{+},\texttt{-},\texttt{/} und \texttt{*} um eine Operator - genauer einen Vergleichsoperator - der in den meisten Programmiersprachen vorhanden ist. Weiter Vergleichsoperatoren sind \texttt{>} für \enquote{Ist $\langle$links$\rangle$ (echt) kleiner als $\langle$rechts$\rangle$?}, \texttt{<=}, \texttt{>=}, \texttt{!=} und \texttt{==}. Genaueres erfährst du hierzu noch in Aufgabe 2.\newline @@ -52,7 +52,7 @@ Das \lstinline{i++} ist also nichts anderes als eine Abkürzung für das Kommando \lstinline{i = i + 1}.\newline Die obige Schleife wird 5 Mal ausgeführt. - Beachte, dass \lstinline{i} mit dem Wert \lstinline{0} beginnt und die Schleifenbedingung auf \lstinline{i < 5} und nicht \lstinline{i <= 5} prüft. + Beachte, dass \lstinline{i} mit dem Wert \lstinline{0} beginnt und die Schleifenbedingung auf \lstinline{i < 5} und nicht \lstinline{i <= 5} (<= bedeuted i < 5 oder i == 5 gilt) prüft. Im letzten Schleifendurchlauf hat \lstinline{i} den Wert \lstinline{4}, wird dann nach der Ausführung des Rumpfes um eins erhöht, wodurch die Bedingung zu \lstinline{flase} ausgewertet wird und der Rumpf nicht weiter ausgeführt wird. \end{Infobox} @@ -75,7 +75,7 @@ Hebe alle Münzen auf Neo's Startposition auf. Laufe nun 5 Schritte mit einer For-Schleife und lege jeden Schritt so viele Münzen ab, wie du schon Schritte gelaufen bist. - Hinweis: Dafür musst du eine For-Schleife in der For-Schleife verwenden. + \textbf{Hinweis:} Dafür musst du eine For-Schleife in der For-Schleife verwenden. Du kannst die Variable \lstinline{i} der äußeren For-Schleife in der Schleifenbedingung (an der 2. Stelle im Schleifenkopf) der inneren For-Schleife benutzen. Überlege Dir, welcher Vergleichsoperator hier am besten passt. @@ -84,22 +84,11 @@ Laufe 10 Schritte und hebe dabei maximal 5 Münzen pro Feld auf. - Hinweis: In dieser Aufgabe kannst du if-Statements oder (etwas schwieriger) eine While-Schleife mit einer Zählvariable und 2 Bedingungen verwenden. - Damit letzteres funktioniert, musst du die beiden Bedingungen mit einem \lstinline{\&\&} (=also und-verknüpfen) verbinden. - Dadurch wird der Rumpf der Schleife nur ausgeführt, wenn die beiden Bedingungen links und rechts vom \lstinline{&&} zu \lstinline{true} ausgewertet werden. - All das wird in den Infoboxen der nächsten Aufgabe genauer erklärt. - - \begin{lstlisting} -if (neoG.canCollectCoin()) { - neoG.collectCoin(); -} - \end{lstlisting} - \item Verwende für diese Teilaufgabe den Spieler/Neo in der Variable \lstinline{neoH}. Laufe 10 Schritte und hebe dabei alle Münzen auf den Feldern auf. - Hinweis: Hier musst du eine For- und eine While-Schleife verwenden. + \textbf{Hinweis:} Hier musst du eine For- und eine While-Schleife verwenden. \end{enumerate} \newpage diff --git a/sheets/3/exercise-2.tex b/sheets/3/exercise-2.tex index b50e985a..bfdcc315 100644 --- a/sheets/3/exercise-2.tex +++ b/sheets/3/exercise-2.tex @@ -62,7 +62,7 @@ \begin{Infobox}[\lstinline{==} und die \lstinline{equals()}-Methode] - Vorsicht: Mit dem Vergleichsoperator \enquote{\lstinline{==}} sollte man in der Regel nur primitive Datentypen (= etwa Werte vom Typ \lstinline{int}, Fließkommazahlen wie \lstinline{double} und ein paar andere Typen die wir der Einfachheit halber hier weglassen) vergleichen!\newline + \textbf{Vorsicht:} Mit dem Vergleichsoperator \enquote{\lstinline{==}} sollte man in der Regel nur primitive Datentypen (= etwa Werte vom Typ \lstinline{int}, Fließkommazahlen wie \lstinline{double} und ein paar andere Typen die wir der Einfachheit halber hier weglassen) vergleichen!\newline Zum Vergleichen von zwei Objekten sollte immer die \lstinline{equals}-Methode, die auf jedem Objekt definiert ist, verwendet werden: @@ -182,7 +182,7 @@ Er soll aufhören zu laufen oder Münzen einzusammeln, wenn er schon 20 Münzen gesammelt hat oder wenn er auf einem Feld mit exakt 9 Münzen ankommt. Mit \lstinline{neo.getCoinsInWallet()} kannst du die Anzahl der Münzen in Neo's Inventory abfragen. - \textit{Tipp}: Hierfür kannst du entweder das Argument der Endlosschleife ändern oder \lstinline{break} Verwenden. + \textbf{Tipp:} Hierfür kannst du entweder das Argument der Endlosschleife ändern oder \lstinline{break} Verwenden. Falls du die Entscheidung, was Neo auf einem Feld machen soll, mit einem \lstinline{if-else}-Verzweigung implementiert hast, kannst du hier ein \lstinline{else if(...)} einführen. \end{enumerate} \newpage diff --git a/sheets/3/exercise-3.tex b/sheets/3/exercise-3.tex index a2e2ebde..d6cb3b0d 100644 --- a/sheets/3/exercise-3.tex +++ b/sheets/3/exercise-3.tex @@ -72,7 +72,7 @@ \textbf{Achtung:} Wenn in der \lstinline{moveTwiceAndTurn}-Methode wieder \lstinline{this.moveTwiceAndTurn(...)} aufgerufen wird, entsteht eine sogenannte endlose Rekursion. Die Methode würde sich dadurch theoretisch unendlich oft immer wieder selber aufrufen, was aufgrund von technischen Details nach einigen (tausenden?) Aufrufen automatisch abgebrochen werden würde. - Wenn du mehr über Rekursion wissen wollt, dann sucht am besten im Internet \href{https://www.google.de/search?q=recursion}{danach}. + Rekursion wird auf dem Extra Blatt und der PSE Vorlesung noch genauer erklärt. \end{Infobox} diff --git a/sheets/3/exercise-6.tex b/sheets/3/exercise-6.tex index 4113eeb3..7f43252c 100644 --- a/sheets/3/exercise-6.tex +++ b/sheets/3/exercise-6.tex @@ -25,7 +25,7 @@ } \end{lstlisting} -Das Beispiel sagt also aus, dass \lstinline{GreedyNeo} alle Funktionen von Neo verwenden kann.\newline +Das Beispiel sagt also aus, dass \lstinline{SpeedyNeo} alle Funktionen von Neo verwenden kann.\newline Kindklassen können Funktionen ihrer Elternklasse mit der Annotation \lstinline{@Override} über der Neu-Definition der Methode in der Kindklasse überschreiben. \begin{lstlisting}[xleftmargin=0.5cm] @@ -53,7 +53,7 @@ \item Überschreibe nun die \lstinline{collectCoin()} Funktion der \lstinline{GreedyNeo} Klasse, sodass \lstinline{GreedyNeo} immer alle Münzen auf einem Feld einsammelt, wenn die Funktion aufgerufen wird. Teste diese Funktionalität indem du in \lstinline{Sheet3Task6} 5 Münzen auf \lstinline{GreedyNeo} Feld platzierst und einmal \lstinline{collectCoin()} ausführst. -Tipp: schaue die dazu die \lstinline{collectCoin()} Funktion der \lstinline{Neo} Klasse genauer an. +\textbf{Tipp:} schaue die dazu die \lstinline{collectCoin()} Funktion der \lstinline{Neo} Klasse genauer an. \item Nun wollen wir Morpheus in die Matrix laden. @@ -73,8 +73,6 @@ Finde den Codeteil der dieses Verhalten bewirkt. Im Projekt ist noch eine Mario Textur hinterlegt. -Versuche die Textur von Morpheus durch die von Mario zu ersetzten. - -Wenn Dir danach immer noch langweilig sein sollte, kannst du versuchen den Matrix-Simulator zu zweckentfremden und ein kleines, automatisches Jump-and-Run in ihm zu bauen. +Versuche die Textur von GreedyNeo durch die von Mario zu ersetzten. \end{enumerate} diff --git a/sheets/4/exercise-1.tex b/sheets/4/exercise-1.tex index bc8fc41c..deb07f09 100644 --- a/sheets/4/exercise-1.tex +++ b/sheets/4/exercise-1.tex @@ -52,7 +52,7 @@ Die Line Klasse erwartet eine Startposition und auch eine Endposition.\\ Ebenso solltest du in der Dokumentation von der \lstinline{PlayfieldModifier} Klasse nachschauen welche Operation du jetzt benutzen musst um mehrere Entitäten an mehreren Positionen zu erzeugen.\\ - Übrigens: In dem Paket \texttt{de.unistuttgart.informatik.fius.jvk.provided.shapes} findest du die anderen Shapes aus unserer Shape Sammlung. + \textbf{Übringens:} In dem Paket \texttt{de.unistuttgart.informatik.fius.jvk.provided.shapes} findest du die anderen Shapes aus unserer Shape Sammlung. \begin{lstlisting} // Beispiel: eine Reihe von der Position (0,0) bis (5,0) diff --git a/sheets/4/exercise-3.tex b/sheets/4/exercise-3.tex index a7b6a2e2..4285e294 100644 --- a/sheets/4/exercise-3.tex +++ b/sheets/4/exercise-3.tex @@ -10,7 +10,7 @@ Als Beispiel könntest du eine neue Form erstellen, welche dir ein ausgefülltes Rechteck oder eine Diagonale zeichnet. Natürlich ist der Kreativität hier keine Grenze gesetzt. - Tipp: Es gibt bereits Shapes die wir im Paket \lstinline{de.unistuttgart.informatik.fius.jvk.provided.shapes} erstellt haben. + \textbf{Tipp:} Es gibt bereits Shapes die wir im Paket \lstinline{de.unistuttgart.informatik.fius.jvk.provided.shapes} erstellt haben. \item Nun da wir Shapes etwas genauer kennengelernt haben, können wir damit Spielfelder frei bauen. diff --git a/sheets/4/exercise-4.tex b/sheets/4/exercise-4.tex index 178c7b96..f910b157 100644 --- a/sheets/4/exercise-4.tex +++ b/sheets/4/exercise-4.tex @@ -3,7 +3,7 @@ \begin{enumerate} \item Passe die Main Operation an die Aufgabe an. Verwende \lstinline{Sheet4Task4}, auch in dieser Aufagbe gibt es keinen Verifier. - Diese Aufgaben sind mehr als ''Ideensammlung'' zu verstehen und werden nicht überprüft. + Diese Aufgabe ist mehr als ''Ideensammlung'' zu verstehen und wird nicht überprüft. Spiele mit den Konzepten, die eingeführt wurden. \item Erzeuge ein Programm, das Neo geradeaus laufen lässt, bis er keine Schritte mehr machen kann. \end{enumerate} @@ -46,7 +46,7 @@ \begin{enumerate}\setcounter{enumi}{2} \item Löse einige der Aufgaben auf vorangegangenen Arbeitsblättern mit Programmen. - Tipp: Du kannst auch Programme in anderen Programmen verwenden. + \textbf{Tipp:} Du kannst auch Programme in anderen Programmen verwenden. \item Schreibe ein Programm, das eine vertikale Wand umgeht und dann auf derselben y-Koordinate landet. \item \optional \emph{Schwer!} Kannst du dieses Programm ohne eine Schleife schreiben? \end{enumerate} diff --git a/sheets/extra/exercise-1.tex b/sheets/extra/exercise-1.tex index ee08ba80..7f6afedb 100644 --- a/sheets/extra/exercise-1.tex +++ b/sheets/extra/exercise-1.tex @@ -1,3 +1,5 @@ + +\textbf{Hinweis:} Alle Aufgaben auf diesem Blatt sind Optional und dementsprechend schwerer als die vorherigen Aufgaben.\\ \excercise{Neo im Labyrinth} Die Agenten haben es geschafft, Neo in einem Labyrinth einzusperren. Um zu entkommen, muss er die einzige Telefonzelle finden. diff --git a/sheets/extra/jvk-extra.tex b/sheets/extra/jvk-extra.tex index 1fca7093..9e1e5198 100644 --- a/sheets/extra/jvk-extra.tex +++ b/sheets/extra/jvk-extra.tex @@ -1,5 +1,5 @@ \documentclass{../vorkurs} -\def\sheetNumber{extra} +\def\sheetNumber{Extra} \makedocument