
Grundwissen
Im letzten Kapitel hast Du gelernt, wie man durch Methodenaufrufe den Objektzustand in Java manipulieren kann. Nun wäre eine Möglichkeit interessant, Methodenaufrufe (oder Wertzuweisungen) nur unter bestimmten Bedinungen durchzuführen.
Java bietet uns hierfür die Bedingte Anweisung. Bedingte Anweisungen können überall dort stehen, wo Code ausgeführt wird: also in Methodenrümpen und im Konstruktorrumpf. Die Bedingte Anweisung hat folgende Struktur:
if( BEDINGUNG )
{
AUSZUFÜHRENDER CODE
}
Beispiel:
In einer Klasse gebe es ein Attribut koerperGroesse, welches eine Mindesgröße überprüft (z.B. für das Anwensungsszenario „Kinderkarussell“):
if( koerperGroesse < 110 )
{
kindDarfFahren = false;
}
Das Attribut kindDarfFahren (Datentyp boolean) wird also nur auf false gesetzt,
wenn das Kind kleiner als 110cm ist.
Java bietet uns auch die Möglichkeit der so genannten zweiseitigen bedingten Anweisung.
Hierbei wird auch das logische Gegenteil der abgefragten Bedinung berücksichtigt.
if( BEDINGUNG )
{
AUSZUFÜHRENDER CODE
}
else
{
ALTERNATIVER CODE FÜR NICHT
ERFÜLLTE BEDINGUNG;
}
Für unser Beispiel wäre denkbar:
if( koerperGroesse < 110 )
{
kindDarfFahren = false;
}
else
{
kindDarfFahren = true;
}
Außerdem erlaubt noch feinere Unterscheidungen:
if( BEDINGUNG )
{
AUSZUFÜHRENDER CODE
}
else if(BEDINGUNG_2)
{
ALTERNATIVER CODE FÜR NICHT ERFÜLLTE
VON BEDINGUNG ABER ERFÜLLUNG VON BEDINGUNG_2
}
Unser Beispiel:
if( koerperGroesse < 110 )
{
kindDarfFahren = false;
}
else if( alter < 10 )
{
kindDarfFahren = true;
kindBrauchtBegleiter = true;
}
else
{
kindDarfFahren = true;
kindBrauchtBegleiter = false;
}
Für die Formulierung der Bedinung brauchen wir so genannte Vergleichsoperatoren:
- < Der „Kleiner als“-Operator
- > Der „Größer als“-Operator
- <= Der „Kleiner oder Gleich“-Operator
- >= Der „Größer oder Gleich“-Operator
- == Der Gleichheitsoperator (AUFPASSEN! ZWEI MAL = )
- != Der Ungleichheitsoperator („Ist nicht gleich“)
Woher Dir den Unterschied zwischen einem „=“ und zwei „==“!
Eselsbrücke:
Der =-Operator ist ein Ausrufezeichen: Setze die Variable auf einen neuen Wert!!!
Der ==-Operator ist ein Fragezeichen: Ist der Wert einer Variablen gleich dem Vergleichswert???
MERKE: Jede Methode welche einen Wahrheitswert zurück liefert, kann als Bedingung eingesetzt werden:
if( mindestGroesseErfuellt() == true )
{
kindDarfFahren = false;
}
else
{
kindDarfFahren = true;
}
Du weißt aus der 9. Klasse, dass man Bedingungen verunden, verodern oder
verneinen kann.
Verundung in Java: if( bedingung1 && bedingung2 )
Veroderung in Java: if( bedingung1 || bedingung2 )
Verneinung in Java: mit Ausrufezeichen !true ist false
Aufgaben
Arbeitsblatt zu den Grundlagen (Klassenkarte <–> Klassendefinition)
- Betrachte das Projekt GF-04-SpaceShuttle von letzter Stunde. Überprüfe was geschieht, wenn Du für die Rotation einen Wert KLEINER als Null übergibst! Ziel ist es, zu vermeiden, dass der Benutzer Eingaben kleiner null macht. Vorsicht! An zwei Stellen wird das Attribut mit einem neuen Wert versehen: Im Konstruktor und in der Methode attributeNeuSetzen. Falls der Nutzer Eingaben kleiner null mach, z.B. -5, dann sollst Du stattdessen das positive „Gegenstück“ setzen, also im Beispiel +5!
- Lege ein neues Greenfoot-Projekt mit Namen „GF-Konto“ an! Schreibe eine Klasse Konto mit den Attributen nutzername, passwort und kontostand! Der Konstruktor initialisiert den Nutzernamen und das Passwort! Der Kontostand wird im Konstruktor auf null gesetzt. Ergänze die Methode kontostandAbrufen(String nutzer, String pwt), die Methode einzahlen(double betrag) und die Methode abheben(String nutzer, String pwt, double betrag)!
- In der 9. Klasse hast Du gelernt, dass man Bedingungen mit logischen Funktionen verknüpfen kann. Du erinnerst Dich an die Verneinung, die Veroderung und die Verundung. Im Grundwissensbereich dieser Seite findest Du, wie man in Java diese logischen Verknüpfungen codiert.
– Öffne Dein Mathe-Fuchs-Projekt. Stelle mit einer bedingten Anweisung sicher, dass die Eingabe des Radius vom Benutzer größer oder gleich Null ist aber kleiner als 1000!
– Ergänze den MatheFuchs um eine Methode nenneEinenGrossenMathematiker() welche vom Nutzer als Parameter einen String übergeben bekommen. Die Methode soll den String“Gut gemacht!“ zurückgeben, wenn der vom Nutzer übergebene String „Pythagoras“ lautet. Ebenfalls soll „Gut gemacht!“ zurückgegeben werden wenn der Nutzer „Gauß“ eingibt. Für alle anderen Fälle (else!) soll der String „Schlechte Allgemeinbildung!“ zurück gegeben werden! - Nun wollen wir als Bedingungen (das was in den Klammern steht) für das if-Statement eine Methode mit boolean-Rückgabe verwenden. Lade Dir hierzu das Projekt GF-05-Trick-the-turtle. Ziel ist es die Turtle-Klasse so zu programmieren, dass Turtle-Objekte am Rand der World abprallen. Dazu implementierst Du die Methode act() der Klasse Turtle. Eine Hilfklasse stellt uns ein paar hilfreiche Methoden zur Verfügung – schau einfach mal in die Klasse Animal und analysiere, welche Methoden sie für uns anbietet. All die dort definierten Methoden kannst Du in Unterklassen verwenden! (Ach ja: die Methode zum drehen eines Actors kennst Du ja schon: turn(int grad) )
- Lade nun das Projekt GF-06-Little-Crab herunter. Versuche zunächst die Spielidee zu verstehen. Untersuche dann den Code und entdecke die Hilfsmethoden, welche uns die Klasse Greenfoot zur Verfügung stellt. Du sollst den Code verstehen!!!