|
15 | 15 | Laufe mit Totoro bis zum ersten Feld mit einer Nuss und gib die Anzahl der Nüsse unter Totoro auf der Konsole aus.\newline
|
16 | 16 |
|
17 | 17 | \textbf{Wichtig}: Mit der Operation \lstinline{totoro.getCurrentlyCollectableNuts();} bekommt man eine Liste aller Nuss-Objekte, die auf Totoro's aktuellem Feld liegen.
|
18 |
| - Du kannst die den Datentyp List wie eine Sequenz (Aneinanderreihung) von Objekten desselben Typs - in diesem Fall des Typs \lstinline{Nut} - vorstellen. |
19 |
| - Eine Liste hat eine Länge die angibt wie viele Elemente in ihr enthalten sind. |
| 18 | + Du kannst dir den Datentyp List wie eine Sequenz (Aneinanderreihung) von Objekten desselben Typs, in diesem Fall des Typs \lstinline{Nut}, e vorstellen. |
| 19 | + Eine Liste hat eine Länge, die angibt wie viele Elemente in ihr enthalten sind. |
20 | 20 | Diese Länge kann mit der \lstinline{size()}-Methode auf Listen-Objekten abgefragt werden.
|
21 | 21 | \end{enumerate}
|
22 | 22 |
|
|
64 | 64 | \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
|
65 | 65 |
|
66 | 66 | Zum Vergleichen von zwei Objekten sollte immer die \lstinline{equals}-Methode, die auf jedem Objekt definiert ist, verwendet werden:
|
67 |
| - |
| 67 | + |
68 | 68 | \begin{lstlisting}[numbers=none]
|
69 | 69 | if (totoro.getPosition().equals(new Position(1, 1))){
|
70 | 70 | System.out.println("Totoro is on Position (1, 1)");
|
|
86 | 86 | Nun wollen wir daran arbeiten möglichst viele Nüsse auf dem Spielfeld einzusammeln.
|
87 | 87 |
|
88 | 88 | Dazu wollen wir Totoro erstmals so lange geradeaus laufen lasse, bis sich unter ihm eine oder mehrere Nüsse befinden.
|
89 |
| - Wenn Totoro auf eine Nuss trifft, sollst du erst mal anhalten. |
| 89 | + Wenn Totoro auf eine Nuss trifft, sollte er erst mal anhalten. |
90 | 90 | \end{enumerate}
|
91 | 91 |
|
92 | 92 |
|
93 | 93 | \begin{Infobox}[Endlosschleifen und \lstinline{break}]
|
94 | 94 | Eine While-Schleife, in der die Schleifenbedingung \lstinline{true} ist, nennt man eine Endlosschleife.
|
95 |
| - Das heißt, dass die Schleife niemals aufhören wird den Code im Schleifenrumpf auszuführen, wenn das nicht durch eine Exception oder den Stop der Ausführung des Programms verhindert wird! |
96 |
| - Deshalb kann es passieren, dass du den Stopp Knopf in der Eclipse Konsole brauchst, um die Schleife wieder abzubrechen.\newline |
| 95 | + Das heißt, dass die Schleife niemals aufhören wird, den Code im Schleifenrumpf auszuführen, wenn das nicht durch eine Exception oder den Stop der Ausführung des Programms verhindert wird! |
| 96 | + Deshalb kann es passieren, dass du den Stopp Knopf in der IntelliJ Konsole benötigst, um die Schleife wieder abzubrechen.\newline |
97 | 97 |
|
98 |
| - Endlosschleifen möchte man in der Regel wann immer möglich vermeiden. |
99 |
| - Aber man kann auch eine \lstinline{while(true)}-Schleife planmäßig im Quellcode und ohne das Auslösen von Exceptions beenden. |
| 98 | + Endlosschleifen möchte man wenn möglich immer vermeiden. |
| 99 | + Man kann jedoch auch eine \lstinline{while(true)}-Schleife planmäßig in den Quellcode einbauen und ohne das Auslösen von Exceptions beenden. |
100 | 100 | Dafür braucht man das Schlüsselwort \lstinline{break}.\newline
|
101 | 101 |
|
102 | 102 | Wenn du im Rumpf einer Schleife \lstinline{break;} aufrufst, dann wird die Schleife sofort unterbrochen.
|
103 | 103 | Auch die Schleifenbedingung wird dann nicht mehr überprüft und der Code nach der Schleife wird weiter ausgeführt.
|
104 |
| - Das funktioniert auch in For-Schleifen, ist aber hier eher untypisch, da man dort meistens die Zählvariablen zur Begrenzung der Wiederholungen benutzt. |
| 104 | + Das funktioniert auch in For-Schleifen, ist aber hier eher untypisch, da dort meistens die Zählvariablen zur Begrenzung der Wiederholungen benutzt wird. |
105 | 105 |
|
106 | 106 | \begin{lstlisting}[numbers=none]
|
107 | 107 | while(true){
|
|
117 | 117 |
|
118 | 118 | \begin{enumerate}\setcounter{enumi}{3}
|
119 | 119 | \item
|
120 |
| - Mit dem neuen Wissen wollen wir nun an unserem Code aus Teilaufgabe c) weiterarbeiten. |
| 120 | + Mit diesem neuen Wissen wollen wir nun an unserem Code aus Teilaufgabe c) weiterarbeiten. |
121 | 121 |
|
122 |
| - Wenn Totoro also auf einem Feld mit genau einer Nuss steht, soll er die Nuss aufsammeln, sich dann nach rechts drehen und einen weiteren Schritt machen. |
| 122 | + Wenn Totoro also auf einem Feld mit genau einer Nuss steht, soll er die Nuss aufsammeln und |
| 123 | + sich dann nach rechts drehen und einen weiteren Schritt machen. |
123 | 124 | Wenn sich mehr als eine Nuss unter Totoro befinden, soll er die Schleife erstmals mit einem \lstinline{break} verlassen.
|
124 |
| - Dann soll der wieder anfangen zu laufen, bis unter ihm wieder eine oder mehrere Nüsse auftauchen. |
125 |
| - |
| 125 | + Dannach soll er wieder weiter laufen, bis er Nüsse findet. |
126 | 126 | \item
|
127 |
| - Wenn sich jetzt mehr als eine Nuss unter Totoro befinden sollten, dann soll Totoro genau eine Nuss aufsammeln, sich nach links drehen und dann wieder einen Schritt nach vorne machen. |
| 127 | + Wenn sich jetzt mehr als eine Nuss unter Totoro befinden, |
| 128 | + soll Totoro genau eine Nuss aufsammeln, und sich dann nach links drehen und wieder einen Schritt nach vorne machen. |
128 | 129 |
|
129 |
| - Momentan soll Totoro noch nicht alle Nüsse aufgesammelt bekommen, ohne gegen einen Busch zu laufen. |
| 130 | + Momentan sollte Totoro noch nicht in der Lage sein, alle Nüsse aufzusammlen, ohne gegen einen Busch zu laufen. |
130 | 131 | \end{enumerate}
|
131 | 132 |
|
132 | 133 | \begin{Infobox}[Logische Operatoren]
|
|
155 | 156 |
|
156 | 157 | \begin{lstlisting}[numbers=none]
|
157 | 158 | if (!totoro.canMove() && totoro.getCurrentlyCollectableNuts().size() == 7) {
|
158 |
| - //totoro hat genau 7 Nüsse UND kann sich NICHT nach vorne gehen. |
| 159 | + //totoro hat genau 7 Nüsse UND kann sich NICHT nach vorne bewegen. |
159 | 160 | }
|
160 | 161 | \end{lstlisting}
|
161 | 162 |
|
|
176 | 177 | Dafür musst du vor jedem \lstinline{move()} Kommando prüfen, ob Totoro sich überhaupt nach vorne bewegen kann.
|
177 | 178 |
|
178 | 179 | \item
|
179 |
| - Jetzt wollen wir, dass Totoro auch irgendwann aufhört. |
180 |
| - Er soll aufhören zu laufen oder Nüsse einzusammeln, wenn er schon 20 Nüsse gesammelt hat oder wenn er auf einem Feld mit exakt 9 Nüssen ankommt. |
| 180 | + Totoro's Taschen sind leider relativ klein, daher soll er |
| 181 | + aufhören zu laufen oder Nüsse einzusammeln, wenn er schon 20 Nüsse gesammelt hat oder er auf einem Feld mit exakt 9 Nüssen ankommt. |
181 | 182 | Mit \lstinline{totoro.getNutsInPocket()} kannst du die Anzahl der Nüsse in Totoro's Inventory abfragen.
|
182 | 183 |
|
183 |
| - \textbf{Tipp:} Hierfür kannst du entweder das Argument der Endlosschleife ändern oder \lstinline{break} Verwenden. |
| 184 | + \textbf{Tipp:} Hierfür kannst du entweder das Argument der Endlosschleife ändern oder \lstinline{break} verwenden. |
184 | 185 | Falls du die Entscheidung, was Totoro auf einem Feld machen soll, mit einem \lstinline{if-else}-Verzweigung implementiert hast, kannst du hier ein \lstinline{else if(...)} einführen.
|
185 | 186 | \end{enumerate}
|
186 | 187 | \newpage
|
0 commit comments