Methoden Definieren
Methoden
Man kann eine Menge von Befehlen in einer Methode zusammenfassen und parametrisieren. Was das bedeutet, soll am Beispiel des Parcours am Punkt A erläutert werden. An dieser Stelle muss der Kettenroboter eine Drehung um 90° nach rechts vollziehen. (190
sei beispielhaft der Wert, um die Drehung zu erreichen. Man muss ausprobieren [kalibrieren], bei welchem Wert der eigene Roboter wirklich um 90° dreht). Bislang würde man die Befehle in die Hauptmethode main schreiben:
import lejos.robotics.RegulatedMotor;
import lejos.hardware.motor.EV3LargeRegulatedMotor;
import lejos.hardware.port.MotorPort;
public class EV3Drehung1
{
static RegulatedMotor reMo = new EV3LargeRegulatedMotor(MotorPort.A);
static RegulatedMotor liMo = new EV3LargeRegulatedMotor(MotorPort.D);
public static void main(String[] args)
{
liMo.setSpeed(200);
reMo.setSpeed(200);
/* Beginn: eigentliche Drehung */
liMo.rotate(190,true);
reMo.rotate(-190);
/* Ende: eigentliche Drehung */
}
}
import lejos.nxt.Motor;
import lejos.nxt.NXTRegulatedMotor;
public class Drehung1
{
static NXTRegulatedMotor reMo = Motor.A;
static NXTRegulatedMotor liMo = Motor.B;
public static void main(String[] args)
{
liMo.setSpeed(200);
reMo.setSpeed(200);
/* Beginn: eigentliche Drehung */
liMo.rotate(500,true);
reMo.rotate(-500);
/* Ende: eigentliche Drehung */
}
}
Verbesserung
Jetzt wollen wir das Codefragment in eine Methode mit Namen rechts90()
auslagern und diese von der main-Methode aus aufrufen. Außerdem wollen wir den zu kalibrierenden Wert in einer Variable distanz90
definieren. Einmal geschrieben, kann man die Methode beliebig oft aufrufen und wiederverwenden!
import lejos.robotics.RegulatedMotor;
import lejos.hardware.motor.EV3LargeRegulatedMotor;
import lejos.hardware.port.MotorPort;
public class EV3Drehung2
{
static RegulatedMotor reMo = new EV3LargeRegulatedMotor(MotorPort.A);
static RegulatedMotor liMo = new EV3LargeRegulatedMotor(MotorPort.D);
static int distanz90 = 190; //zu kalibrieren
public static void main(String[] args)
{
liMo.setSpeed(200);
reMo.setSpeed(200);
// Aufruf der Methode
rechts90();
}
public static void rechts90()
{
/* Beginn: eigentliche Drehung */
liMo.rotate(distanz90,true);
reMo.rotate(-distanz90);
/* Ende: eigentliche Drehung */
}
}
import lejos.nxt.Motor;
import lejos.nxt.NXTRegulatedMotor;
public class Drehung2
{
static NXTRegulatedMotor reMo = Motor.A;
static NXTRegulatedMotor liMo = Motor.B;
static int distanz90 = 500; //zu kalibrieren
public static void main(String[] args)
{
liMo.setSpeed(200);
reMo.setSpeed(200);
// Aufruf der Methode
rechts90();
}
public static void rechts90()
{
/* Beginn: eigentliche Drehung */
liMo.rotate(distanz90,true);
reMo.rotate(-distanz90);
/* Ende: eigentliche Drehung */
}
}
Methoden haben einen Methodenkopf und einen Methodenrumpf. Im Rumpf (den geschweiften Klammern) befind, die ausgeführt werden sollen. Der Methodenkopf besteht aus:
public | static | void | rechts90 | () |
Erklärung:
- public
- Kapselung ist ein eigenes Thema, hier sei alles öffentlich
- static
- Objektorientierung ist ein eigenes Thema, hier sei alles statisch (Klassenvariablen und Klassenmethoden)
- void
- Rückgabewert: hier wird kein Ergebnis der Methode zurück an das Hauptprogramm geschickt.
- rechts90
- Methodenname/-bezeichner: ein zusammenhängendes Wort ohne Umlaute und ohne Sonderzeichen
- ()
- Platz fü einen/mehrere Parameter (nachfolgend behandelt).
Aufgaben - Methoden schreiben
- Schreibe eine Methode
links90()
und rufe sie in der main-Methode auf. - Erprobe einen vierfachen Aufruf von
links90()
, der Roboter sollte sich anschließend wieder in der Ausgangsposition befinden. - Schreibe eine Methode
rechts50()
mit neuer Variablen zur Kalibrierung. - Schreibe die Methoden
rechts180()
undlinks180()
unter Wiederverwendung bereits geschriebener Methoden.
...
public static void rechts90()
{
liMo.rotate(distanz90,true);
reMo.rotate(-distanz90);
}
public static void rechts180()
{
rechts90();
rechts90();
}
...