FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren 7 DECISIONS – IF AND SWITCH 7 DECISIONS – IF AND SWITCH Mit Hilfe von Entscheidungen kann der Programmablauf von Resultaten abhängig gemacht werden. 1 Elementarer Datentyp boolean Eine Variable vom Datentyp boolean kann nur die Wahrheitswerte true (wahr) oder false (falsch) annehmen. Solche Variablen speichern typisch bestimmte Zustände. Boolesche Operatoren: logisches UND (AND): && logisches ODER (OR): || logisches NICHT (NOT): ! Vergleichsoperatoren (z.B. für float, double, int, long, char) liefern als Ergebnis ebenfalls einen Wert vom Typ boolean: <, >, ==, !=, <=, >= Achtung: Der Vergleich eines float- oder double-Wertes mit Null ist sehr gefährlich (z.B. temperature == 0.0)! Wieso wohl? Ein extrem kleiner Wert ist ungleich Null! Es empfiehlt sich, mit Hilfe von runden Klammern Missverständnisse bei booleschen Ausdrücke auszuschliessen, z.B.: !((a > 10) && (x == 0)) 7 Decisions - if and switch.doc, V48 © H. Diethelm Seite 1/9 Abteilung Informatik, Fach Programmieren FHZ Hochschule Technik+Architektur Luzern 7 DECISIONS – IF AND SWITCH 2 IF-Anweisung Struktogramm: boolescher Ausdruck true false Anweisung oder Block 1 Anweisung oder Block 2 UML-Aktivitätsdiagramm: Syntax: if (geschwindigkeit <= 120) { g.drawString("Gratuliere!", 50, 50); g.drawString("Tempo i.O.", 50, 70); } else { g.drawString("Sie Raser!", 50, 50); g.drawString("zu schnell", 50, 70); } Der else-Teil ist nicht zwingend. 7 Decisions - if and switch.doc, V48 © H. Diethelm Seite 2/9 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren 7 DECISIONS – IF AND SWITCH 2.1 Beispiel "Dice2" NEU: boolean, if, Button, ActionListener, actionPerformed() Es gewinnt, wer zwei gleiche Zahlen würfelt. Die Methode Math.random() liefert einen "Zufallswert" vom Datentyp double im Bereich 0.0 bis 0.9999999... . import java.awt.*; import java.applet.Applet; import java.awt.event.*; public class Dice2 extends Applet implements ActionListener { private Button throwDice; private boolean thrown = false; int die1 = 0; int die2 = 0; public void init() { throwDice = new Button("Throw"); add (throwDice); throwDice.addActionListener(this); } public void actionPerformed(ActionEvent e){ thrown = true; die1 = (int)(Math.random() * 6)+1; 7 Decisions - if and switch.doc, V48 © H. Diethelm Seite 3/9 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren 7 DECISIONS – IF AND SWITCH die2 = (int)(Math.random() * 6)+1; repaint(); } public void paint(Graphics g) { if(thrown) { g.drawString("The dice are die1 + " and " + die2, 20, if (die1 == die2) g.drawString ("a win", else g.drawString ("sorry", } } " + 40); 20, 60); 20, 60); } 2.2 Beispiel "Little and Large" NEU: Event-Quelle ausfindig machen (getSource()) Mit Hilfe von 2 Buttons die Kreisgrösse verändern. 7 Decisions - if and switch.doc, V48 © H. Diethelm Seite 4/9 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren 7 DECISIONS – IF AND SWITCH import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class LittleAndLarge extends Applet implements ActionListener { private int diameter=20; private Button little, large; public void init() { little = new Button("Little"); add (little); little.addActionListener(this); large = new Button("Large"); add (large); large.addActionListener(this); } public void paint(Graphics g) { g.drawOval (25,25, diameter, diameter); } public void actionPerformed(ActionEvent e){ if (e.getSource() == little) diameter = diameter - 10; if (e.getSource() == large) diameter = diameter + 10; repaint(); } } 7 Decisions - if and switch.doc, V48 © H. Diethelm Seite 5/9 Abteilung Informatik, Fach Programmieren FHZ Hochschule Technik+Architektur Luzern 7 DECISIONS – IF AND SWITCH 3 Switch-Anweisung Anstelle von verschachtelten IF-Anweisungen ist in der Regel eine Switch-Anweisung wesentlich besser lesbar. Struktogramm: Der Ausdruck muss einen ganzzahligen Wert repräsentieren oder vom Datentyp char sein! UML-Aktivitätsdiagramm: 7 Decisions - if and switch.doc, V48 © H. Diethelm Seite 6/9 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren 7 DECISIONS – IF AND SWITCH Syntax: switch (note) { case 6: g.drawString("sehr gut!", 50, 50); break; case 5: g.drawString("gut", 50, 50); break; case 4: g.drawString("befriedigend",50,50); break; default: g.drawString("ungenügend", 50,50); } Der default-Teil ist nicht zwingend. ACHTUNG: Ohne break's ändert die Semantik!! Alle nachfolgenden case's werden ausgeführt!! 3.1 Beispiel "Resistor" NEU: switch, TextField, ActionListener, actionPerformed(), Konvertierung nach int Via Textfeld Farbcode für eine Ziffer bestimmen. 7 Decisions - if and switch.doc, V48 © H. Diethelm Seite 7/9 FHZ Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren 7 DECISIONS – IF AND SWITCH import java.applet.*; import java.awt.*; import java.awt.event.*; public class Resistor extends Applet implements ActionListener { private TextField numberField; private int number = 10; public void init() { Label label = new Label("Ziffer:"); add(label); numberField = new TextField(10); add(numberField); numberField.addActionListener(this); } public void actionPerformed(ActionEvent e){ if (e.getSource() == numberField) number = Integer.parseInt (numberField.getText()); repaint(); } public void paint (Graphics g) { int x = 150; int y = 50; switch (number) { case 0: g.drawString("= schwarz", x, y); break; case 1: g.drawString("= braun", x, y); break; case 2: g.drawString("= rot", 7 Decisions - if and switch.doc, V48 © H. Diethelm Seite 8/9 Abteilung Informatik, Fach Programmieren FHZ Hochschule Technik+Architektur Luzern 7 DECISIONS – IF AND SWITCH x, y); break; case 3: g.drawString("= orange", x, y); break; case 4: g.drawString("= gelb", x, y); break; case 5: g.drawString("= grün", x, y); break; case 6: g.drawString("= blau", x, y); break; case 7: g.drawString("= violett", x, y); break; case 8: g.drawString("= grau", x, y); break; case 9: g.drawString("= weiss", x, y); break; default: g.drawString("falsche Ziffer!", x, y); } } } 7 Decisions - if and switch.doc, V48 © H. Diethelm Seite 9/9