Drucken

Programmstrukturen


1. if-else-Struktur (Selektion)

Programmverzweigungen auf Grund von bestimmten Bedingungen gehören zu den Grundstrukturen jeder Programmiersprache.

    if (Bedingung)
  {
    Anweisungen  
  } 
  else
  {
    Anweisungen
  }   
  Die Anweisungen nach if werden nur dann ausgeführt, wenn die Bedingung stimmt, ansonsten werden die Anweisungen nach else ausgeführt. Häufig wird nur der if-Block verwendet, um Bedingungen zu überprüfen.

Beispiel 1: Links oder rechts?
Der Crab entscheidet sich nach jedem Schritt zufällig, ob er nach links oder rechts schwimmen soll. Mit Klick auf die Schaltfläche Reset kann das Programm noch einmal ausgeführt werden.

Mit der Methode move() bewegt sich ein Objekt in eine der 8 benachbarten Zellen.

setDirection() setzt die Richtung neu.

In unserem Beispiel wird zufällig zwischen der Richtung 45° und 135° gewählt.

 

Beispiel im Online-Editor bearbeiten

App installieren auf Smartphone oder Tablet

QR-Code

Sources downloaden (AndroidEx5.zip)

 

// AndroidEx5.java

package app.ex5;

import ch.aplu.android.*;

public class AndroidEx5 extends GameGrid
{
  public AndroidEx5()
  {
    super(8, 8, cellZoom(62), GRAY, "reef"true);
  }

  public void main()
  {
    Crab crab = new Crab();
    addActor(crab, new Location(3, 0));
    doRun();
  }
}

class Crab extends Actor
{
  public Crab()
  {
    super("crab");
  }

  public void act()
  {
    double randomNumber = Math.random();
    if (randomNumber > 0.5)
     setDirection(45);
    else
     setDirection(135);
    if (isMoveValid())
      move();
  }
}

Erklärungen zum Programmcode:

double randomNumber = Math.random() Die Methode Math.random() liefert eine zufällige Dezimalzahl
if (randomNumber > 0.5) Mit der Wahrscheinlichkeit 0.5 bewegt sich der crab nach rechts oder nach links
if (isMoveValid())
   move()
Die Methode isMoveValid() gibt true zurück, wenn der nächste Bewegungsschritt innerhalb des Fensters liegt.

 

2. switch-Struktur (mehrfache Selektion)

Stehen bei der Selektion mehrere Möglichkeiten zur Auswahl, wird die switch-Struktur verwendet.

    switch (variable)
  {
    case wert1:
      Anweisungen;
      break;
    case wert2:
      Anweisungen;
      break;
    .....
    default:
      Anweisungen;  
  }

Beispiel 2: Links, rechts, nach oben oder nach unten
Der Crab wechselt nach jedem Schritt zufällig die Bewegungsrichtung. Wenn er eine der Randzellen erreicht hat, schwimmt er in der entgegengesetzten Richtung weiter.

Beispiel im Online-Editor bearbeiten

App installieren auf Smartphone oder Tablet

QR-Code

Sources downloaden (AndroidEx5a.zip)

 

// AndroidEx5a.java

package app.ex5a;

import ch.aplu.android.*;

public class AndroidEx5a extends GameGrid
{
  public AndroidEx5a()
  {
    super(8, 8, cellZoom(62), GRAY, "reef"falsefalse);
  }

  public void main()
  {
    Crab crab = new Crab();
    addActor(crab, new Location(3, 0));
    doRun();
  }
}

class Crab extends Actor
{
  public Crab()
  {
    super("crab");
  }

  public void act()
  {
    int randomNumber = (int)(Math.random() * 4);
    switch (randomNumber)
    {
      case 0:
        setDirection(0);
         break;
      case 1:
        setDirection(90);
        break;
      case 2:
        setDirection(180);
        break;
      case 3:
        setDirection(270);
        break;
    }
    if (!isMoveValid())
      turn(180);
    move();
  }
}

Erklärungen zum Programmcode:

(int)(Math.random() * 4) Erzeugt zufällig ganze Zahlen 0, 1, 2 oder 3
isMoveValid() Die Methode isMoveValid() gibt true zurück, falls die nächste Zellenposition innerhalb des sichtbaren Gitters liegt
break break in jedem case bewirkt, dass das Programm die switch-Struktur verlässt, sobald der passende Fall eingetroffen ist

 

3. for-Struktur (Iteration / Mehrfaches Ausführen von Anweisungen)


i = 0 : Startwert
i < n : Abbruchbedingung
i++ : Wertänderung

Beispiel 3: In einer for-Struktur mehrere Crabs erzeugen.
Mit Hilfe einer for-Schleife werden 10 Crabs an zufälligen Positionen erzeugt. Da die Methode act() in der Klasse Crab implementiert ist, werden die Anweisungen in der Methode act() für alle Crab-Objekte ausgeführt - alle Craben wissen, wie sie sich bewegen müssen..

Gelangt ein Crab in eine Randzelle, dreht er sich um 90°. Da er sich danach immer noch in einer Randzelle befindet, muss er sich noch einmal um 90° drehen.  

Beispiel im Online-Editor bearbeiten

App installieren auf Smartphone oder Tablet

QR-Code

Sources downloaden (AndroidEx6.zip)

 

// AndroidEx6.java

package app.ex6;

import ch.aplu.android.*;

public class AndroidEx6 extends GameGrid
{
  public AndroidEx6()
  {
    super(8, 8, cellZoom(62), GRAY, "reef"false);
  }

  public void main()
  {
    for (int = 0; i < 8; i++)
      addActor(new Crab(), getRandomEmptyLocation());
    doRun();
  }
}

class Crab extends Actor
{
  public Crab()
  {
    super("crab");
  }

  public void act()
  {
    if (isMoveValid())
      move();
    if (isNearBorder())
      turn(90);
  }
}

Erklärungen zum Programmcode:

int  i  =  0

Deklaration und Initialisierung der Zählervariable i

i  <  10

Schleifen-Bedingung. So lange die Bedingung erfüllt ist, werden die Anweisungen im Schleifenblock wiederholt ausgeführt

i++

Ist gleichwertig mit i = i + 1
Der Wert der Variable i wird um 1 vergrössert

addActor(new Crab(), getRandomEmptyLocation())

Erzeugt eine neue Crab-Instanz in einer zufällig gewählten, freien Zelle

 

4. Verschachtelte for-Schleifen


Beispiel 4: Mehrere Crab-Objekte mit Hilfe von verschachtelten for-Schleifen erzeugen

Allgemeine Form:

    for (int x = 0; x < n; x++)
  {
    for (int y = 0; y < m; y++)
    {
      Anweisungen;
    }
  }  

Mit zwei for-Schleifen kann man alle Wertepaare (x, y) durchlaufen. Lässt man im folgenden Beispiel die if-Struktur, welche prüft, ob die Summe x + y eine gerade Zahl ist, weg, wird in jeder Zelle ein neuer Crab erstellt.

Beispiel im Online-Editor bearbeiten

App installieren auf Smartphone oder Tablet

QR-Code

Sources downloaden (AndroidEx7.zip)

 

// AndroidEx7.java

package app.ex7;

import ch.aplu.android.*;

public class AndroidEx7 extends GameGrid
{
  public AndroidEx7()
  {
    super(8, 8, cellZoom(62), GRAY, "reef"false);
  }

  public void main()
  {
    for (int = 0; x < 8; x++)
      for (int = 0; y < 8; y++)
      {
        if ((x + y% == 0)
          addActor(new Crab(), new Location(x, y));
      }
    doRun();
  }
}

class Crab extends Actor
{
  public Crab()
  {
    super("crab");
  }

  public void act()
  {
    if (isMoveValid())
      move();
    if (isNearBorder())
      turn(90);
  }
}

Erklärungen zum Programmcode:

if ((x + y) % 2 == 0)

% ist eine Modulodivision, die den Rest nach der Division (x + y)/2 ergibt. Diese Funktion braucht man häufig, um zu testen, ob eine Zahl gerade oder ungerade ist. Wenn die Summe von x und y eine gerade Zahl ist, wird an der Location(x, y) ein Crab erzeugt

 

5. while-Struktur (Iteration)

Allgemeine Form:

    int i = 0;           
    while (< n)    
    {
      Anweisungen;    
      i++;           
    }
  Die while-Struktur wird in allen Programmiersprachen zur Wiederholung von Programmblöcken sehr oft verwendet. In JDroidLib werden nach Drücken der Schaltfläche Run oder dem Aufruf von doRun() die act-Methoden aller Actoren in einer while-Struktur periodisch aufgerufen. Dadurch wird in diesem Lehrgang die while-Struktur nur selten verwendet.