i

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

  1. Schreibe eine Methode links90() und rufe sie in der main-Methode auf.
  2. Erprobe einen vierfachen Aufruf von links90(), der Roboter sollte sich anschließend wieder in der Ausgangsposition befinden.
  3. Schreibe eine Methode rechts50() mit neuer Variablen zur Kalibrierung.
  4. Schreibe die Methoden rechts180() und links180() unter Wiederverwendung bereits geschriebener Methoden.
  ...
  public static void rechts90() 
  {  
    liMo.rotate(distanz90,true);
    reMo.rotate(-distanz90);
  }  
  public static void rechts180() 
  {  
    rechts90();
    rechts90();
  }  
  ...

Suche

v
13.2.3.4.1
dev.inf-schule.de/informatiksysteme/robotik/lejoseinstieg/wiederverwendung/methodendefinieren
dev.inf-schule.de/13.2.3.4.1
dev.inf-schule.de/@/page/esCf1gjsbTTR3hT3

Rückmeldung geben