Lernpfad:Lerntheke Marsrover/34: Unterschied zwischen den Versionen
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 8: | Zeile 8: | ||
while( pAnzahl > 0 ) { | while( pAnzahl > 0 ) { | ||
fahre(); | fahre(); | ||
pAnzahl -= 1; | |||
} | } | ||
} | } | ||
Zeile 26: | Zeile 27: | ||
# Implementiere eine Anfrage <code>public boolean markeNebenan(String pRichtung)</code>, die den Rover prüfen lässt, ob in der übergebenen Richtung ("links" oder "rechts") eine Marke liegt. (Der Rover muss dazu ein Feld in die angegebene Richtung fahren.) | # Implementiere eine Anfrage <code>public boolean markeNebenan(String pRichtung)</code>, die den Rover prüfen lässt, ob in der übergebenen Richtung ("links" oder "rechts") eine Marke liegt. (Der Rover muss dazu ein Feld in die angegebene Richtung fahren.) | ||
{{Aufgabe:End}} | {{Aufgabe:End}} | ||
{{Lösung:Start | {{Lösung:Start|analysiereGesteine}} | ||
<syntaxhighlight lang="Java"> | <syntaxhighlight lang="Java"> | ||
public void analysiereGesteine( int pAnzahl ) { | public void analysiereGesteine( int pAnzahl ) { | ||
Zeile 39: | Zeile 39: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{ | {{Lösung:End}} | ||
{{Lösung: | {{Lösung:Start|markeNebenan}} | ||
<syntaxhighlight lang="Java"> | <syntaxhighlight lang="Java"> | ||
public boolean markeNebenan(String pRichtung) { | public boolean markeNebenan(String pRichtung) { | ||
Zeile 48: | Zeile 48: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{ | {{Lösung:End}} | ||
{{Kasten|Diese Karte ist leichter, wenn du schon etwas über {{Pfad|20|Variablen}} weißt. Mit den Hilfen kannst du aber auch versuchen die Karte so zu lösen.|Farbe={{Farbe:Info}}}} | |||
{{Aufgabe:Start|Icon=Greenfoot Rover.png}} | {{Aufgabe:Start|Icon=Greenfoot Rover.png}} | ||
# Erweitere Aufgabe 2 so, dass der Rover die Gesteine nicht nur auf einer Gerade sucht, sondern die gesamte Karte absucht. (Überleg dir zunächst eine ''Suchstrategie'', nach der der Rover vorgehen kann.) Du kannst die Karte <code>"karte34_gesteine_suchen"</code> laden. | # Erweitere Aufgabe 2 so, dass der Rover die Gesteine nicht nur auf einer Gerade sucht, sondern die gesamte Karte absucht. (Überleg dir zunächst eine ''Suchstrategie'', nach der der Rover vorgehen kann.) Du kannst die Karte <code>"karte34_gesteine_suchen"</code> laden. | ||
# Erweitere Aufgabe 3 so, dass der Rover auf seine ursprüngliche Position zurückkehrt. | # Erweitere Aufgabe 3 so, dass der Rover auf seine ursprüngliche Position zurückkehrt. | ||
{{Aufgabe:End}} | {{Aufgabe:End}} | ||
{{Lösung: | {{Lösung:Start|analysiereGesteine}} | ||
Verschiedene Lösungen möglich. Hier Fährt der Rover, bis er einen Huegel erreicht, wechselt dann nach links in die nächste Zeile und wiederholt das Ganze. Am Ende muss er diesmal allerdings nach rechts wechseln. | Verschiedene Lösungen möglich. Hier Fährt der Rover, bis er einen Huegel erreicht, wechselt dann nach links in die nächste Zeile und wiederholt das Ganze. Am Ende muss er diesmal allerdings nach rechts wechseln. | ||
<syntaxhighlight lang="Java"> | <syntaxhighlight lang="Java"> | ||
Zeile 82: | Zeile 83: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{ | {{Lösung:End}} | ||
{{Lösung: | {{Lösung:Start|markeNebenan}} | ||
<syntaxhighlight lang="Java"> | <syntaxhighlight lang="Java"> | ||
public boolean markeNebenan(String pRichtung) { | public boolean markeNebenan(String pRichtung) { | ||
Zeile 97: | Zeile 98: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{Lösung:End}} | |||
{{Inhalt/Lerntheke}} | {{Inhalt/Lerntheke}} |
Aktuelle Version vom 1. Dezember 2020, 09:07 Uhr
Parameter sind eine besondere Art von Variablen, also ein Platzhalter für einen Wert, den man immer wieder benutzen kann. Parametervariablen werden im Kopf einer Methode deklariert. Das bedeutet, die Festlegung eines Datentyps und eines Bezeichners findet beim erstellen einer Methode statt. Die Initialisierung - also das erste Festlegen eines Wertes - findet erst beim Aufruf der Methode statt. Wird die Methode mehrfach aufgerufen, dann kann jedes Mal ein anderer Wert für den Parameter übergeben werden.
Hier wird zum Beispiel ein Parameter mit dem Bezeichner pAnzahl
und dem Datentyp int
(Zahl) deklariert.
public void fahreMehrfach( int pAnzahl ) {
while( pAnzahl > 0 ) {
fahre();
pAnzahl -= 1;
}
}
Um Parameter schnell im Quelltext erkennen zu können, benennen wir sie immer mit einem kleinen "p" am Anfang. Das ist aber nicht notwendig, damit das Programm funktioniert, sondern dient nur der besseren Übersicht.
Du hast Methoden mit einem Parameter schon mehrfach benutzt, z.B.:
drehe("rechts");
huegelVorhanden("vorne");
"rechts"
und "vorne"
sind die Werte, die dem Parameter der Methode übergeben wurden. Du kannst aber zum Beispielk auch drehe("links"):
benutzen, also einen anderen Wert übergeben. Im Beispiel oben würdest du die Methode mit einer Zahl aufrufen: fahreMehrfach(5);
oder fahreMehrfach(13);
.
- Übernimm die Methode
public void fahreMehrfach( int pAnzahl )
in deinen Rover und probiere sie aus. - Implementiere einen Auftrag
public void analysiereGesteine( int pAnzahl )
, die den Rover vorwärts fahren lässt, bis erpAnzahl
Gesteine analysiert hat oder er einen Hügel erreicht. - Implementiere eine Anfrage
public boolean markeNebenan(String pRichtung)
, die den Rover prüfen lässt, ob in der übergebenen Richtung ("links" oder "rechts") eine Marke liegt. (Der Rover muss dazu ein Feld in die angegebene Richtung fahren.)
public void analysiereGesteine( int pAnzahl ) {
while( pAnzahl > 0 && !huegelVorhanden("vorne") ) {
fahre();
if( gesteinVorhanden() ) {
analysiereGestein();
pAnzahl -= 1;
}
}
}
public boolean markeNebenan(String pRichtung) {
drehe(pRichtung);
fahre();
return markeVorhanden();
}
Diese Karte ist leichter, wenn du schon etwas über Variablen weißt. Mit den Hilfen kannst du aber auch versuchen die Karte so zu lösen.
- Erweitere Aufgabe 2 so, dass der Rover die Gesteine nicht nur auf einer Gerade sucht, sondern die gesamte Karte absucht. (Überleg dir zunächst eine Suchstrategie, nach der der Rover vorgehen kann.) Du kannst die Karte
"karte34_gesteine_suchen"
laden. - Erweitere Aufgabe 3 so, dass der Rover auf seine ursprüngliche Position zurückkehrt.
Verschiedene Lösungen möglich. Hier Fährt der Rover, bis er einen Huegel erreicht, wechselt dann nach links in die nächste Zeile und wiederholt das Ganze. Am Ende muss er diesmal allerdings nach rechts wechseln.
public void analysiereGesteine( int pAnzahl ) {
boolean wechseleNachLinks = true;
while( pAnzahl > 0 ) {
if( huegelVorhanden("vorne") ) {
if( wechseleNachLinks ) {
drehe("links");
fahre();
drehe("links");
wechseleNachLinks = false;
} else {
drehe("rechts");
fahre();
drehe("rechts");
wechseleNachLinks = true;
}
}
fahre();
if( gesteinVorhanden() ) {
analysiereGestein();
pAnzahl -= 1;
}
}
}
public boolean markeNebenan(String pRichtung) {
boolean marke = false;
drehe(pRichtung);
fahre();
marke = markeVorhanden();
drehe("rechts");
drehe("rechts");
fahre();
drehe(pRichtung);
return marke;
}
Das ist Greenfoot | Der Mars-Rover | Die Welt des Mars-Rover | Das ist Java | Die Rover-Arena | Greenfoot benutzen | Java Syntax | Variablen | Methoden | Bedingte Anweisungen | Schleifen | Objekte | Arrays | Die Fähigkeiten des Rovers | Steine analysieren I | Steine analysieren II | Strukturiertes programmieren | Programme strukturieren I | Programme strukturieren II | Fallunterscheidungen I | Anfragen | Fallunterscheidungen II | Variablen | Objektvariablen | Wiederholungen I | Wiederholungen II | Rover-Liebe | Steine analysieren III | Gefangen im Labyrinth I | Marken-Maler | Fleißige Rover | Gefangen im Labyrinth II | In der Rover-Arena | Parameter