Hier werden die Unterschiede zwischen der gewählten und der aktuellen Version gezeigt.
| start:info:11if:05_ablaufsteuerung 02.11.2008 23:08 | start:info:11if:05_ablaufsteuerung 13.04.2018 08:41 aktuell | ||
|---|---|---|---|
| Zeile 41: | Zeile 41: | ||
| </code> | </code> | ||
| - | Jetzt könnte man fragen: Wie entscheidet Java diesen Prozess? Wenn die Bedingung in den runden Klamern nach dem ''if'' erfüllt wird, dann wird der Block ''{ ... }'' – direkt unter dem ''if'' – ausgeführt, ansonsten der Block ''{ ... }'' nach dem ''else''. Wenn wir eine Struktur wie bei dem ersten Beispiel haben – d.h. kein ''else'' Block – wird die Ausführung des Programms nach der schließenden geschweiften ''}'' fortgesetzt. Dazu können wir den unten stehenden Code näher anschauen: | + | Jetzt könnte man fragen: Wie entscheidet Java diesen Prozess? Wenn die Bedingung in den runden Klammern nach dem ''if'' erfüllt wird, dann wird der Block ''{ ... }'' – direkt unter dem ''if'' – ausgeführt, ansonsten der Block ''{ ... }'' nach dem ''else''. Wenn wir eine Struktur wie bei dem ersten Beispiel haben – d.h. kein ''else'' Block – wird die Ausführung des Programms nach der schließenden geschweiften ''}'' fortgesetzt. Dazu können wir den unten stehenden Code näher anschauen: |
| <code java> | <code java> | ||
| Zeile 52: | Zeile 52: | ||
| Wenn die Variable ''counter'' einen Wert kleiner 10 hat, werden die Befehle zwischen den geschweiften Klammer ''{'' und''}'' ausgeführt. Wenn der Wert größer oder gleich 10 ist, wird dieser Block übersprungen und nach dem ''}'' fortgesetzt. Das bedeutet, dass dann der Befehl ''System.out.println("Fertig");'' ausgeführt wird.\\ | Wenn die Variable ''counter'' einen Wert kleiner 10 hat, werden die Befehle zwischen den geschweiften Klammer ''{'' und''}'' ausgeführt. Wenn der Wert größer oder gleich 10 ist, wird dieser Block übersprungen und nach dem ''}'' fortgesetzt. Das bedeutet, dass dann der Befehl ''System.out.println("Fertig");'' ausgeführt wird.\\ | ||
| - | Aber nicht missverstehen: Selbst wenn die Variable ''counter'' einen Wert kleiner als 10 hat, wird – nachdem die Befehle im Block solange ausgeführt wurden, bis der Wert 10 erreicht hat - im Programm fortgesetzt, sprich: ''System.out.println("Fertig");'' wird ausgeführt. Und wie sieht's aus, wenn man ein ''else''-Block hinzufügt? So wie oben, aber (natürlich) mit kleinen Unterschieden. Guck dir dazu die Beispiele an und führe sie aus. Dazu kannst du verschieden Zahlen eingeben und sehen, wie's funktioniert. | + | Aber nicht missverstehen: Selbst wenn die Variable ''counter'' einen Wert kleiner als 10 hat, wird – nachdem die Befehle im Block solange ausgeführt wurden, bis der Wert 10 erreicht hat - im Programm fortgesetzt, sprich: ''System.out.println("Fertig");'' wird ausgeführt. Und wie sieht's aus, wenn man einen ''else''-Block hinzufügt? So wie oben, aber (natürlich) mit kleinen Unterschieden. Guck dir dazu die Beispiele an und führe sie aus. Dazu kannst du verschieden Zahlen eingeben und sehen, wie's funktioniert. |
| <code java> | <code java> | ||
| Zeile 297: | Zeile 297: | ||
| {{:start:info:11if:switch.gif?610|Fallauswahl}}\\ | {{:start:info:11if:switch.gif?610|Fallauswahl}}\\ | ||
| - | Dieses Programm gibt eine Zeichenkette aus, die der eingegebenen Zensur(Zahl) entspricht. D.h. es wird die eingegebene Zahl überprüft:\\ | + | Dieses Programm gibt eine Zeichenkette aus, die der eingegebenen Zensur (Zahl) entspricht. D.h. es wird die eingegebene Zahl überprüft:\\ |
| * Wenn sie 1 ist, wird "sehr gut" | * Wenn sie 1 ist, wird "sehr gut" | ||
| Zeile 311: | Zeile 311: | ||
| ===== Aufgabe 1 ===== | ===== Aufgabe 1 ===== | ||
| - | Schreibe dieses Programm nun mit Hilfe von Java und den bisher gelernten if-Bedingungen; baue zusätzlich eine Sperre ein, die eine Fehlermeldung ausgibt, wenn die eingegebene Zahl größer als 6 oder kleiner als 1 ist. | + | Schreibe dieses Programm nun mit Hilfe von Java und den bisher gelernten ''if''-Bedingungen; baue zusätzlich eine Sperre ein, die eine Fehlermeldung ausgibt, wenn die eingegebene Zahl größer als 6 oder kleiner als 1 ist. |
| ====== Die switch/case Ablaufsteuerung ====== | ====== Die switch/case Ablaufsteuerung ====== | ||
| - | Am Nassi-Shneidermann-Diagramm erkennt man, dass hiermit eine neue Regel mit einer neuen Syntax eingeführt wird: Die switch-case-Anweisung.\\ | + | Am Nassi-Shneidermann-Diagramm erkennt man, dass hiermit eine neue Regel mit einer neuen Syntax eingeführt wird: Die ''switch-case''-Anweisung.\\ |
| - | Warum überhaupt eine switch-case-Anweisung, die ja theoretisch völlig überflüssig ist, da es ja die if-else-Anweisungen gibt.\\ | + | Warum überhaupt eine ''switch-case''-Anweisung, die ja theoretisch völlig überflüssig ist, da es ja die ''if-else''-Anweisungen gibt.\\ |
| - | Das erkennt man, wenn man obige Aufgabe mit switch-case löst:\\ | + | Das erkennt man, wenn man obige Aufgabe mit ''switch-case'' löst:\\ |
| FIXME\\ | FIXME\\ | ||
| - | Praktisch gibt es in der Programmierung öfters Situationen oder Probleme, wo man eine Vielzahl von verschachtelten if-else-Anweisungen brauchen würde (s.o.) und ein Programm kann dadurch schnell sehr unübersichtlich werden und unnötig lang.\\ | + | <html> |
| + | <!-- | ||
| + | <code Java> | ||
| + | import Prog1Tools.IOTools; | ||
| + | |||
| + | public class If11 { | ||
| + | |||
| + | |||
| + | public static void main(String args[]) { | ||
| + | int note = IOTools.readInteger("Gib eine Note (1-6) ein: "); | ||
| + | |||
| + | switch (note) { | ||
| + | case 1: | ||
| + | System.out.println("sehr gut"); | ||
| + | break; | ||
| + | case 2: | ||
| + | System.out.println("gut"); | ||
| + | break; | ||
| + | case 3: | ||
| + | System.out.println("befriedigend"); | ||
| + | break; | ||
| + | case 4: | ||
| + | System.out.println("ausreichend"); | ||
| + | break; | ||
| + | case 5: | ||
| + | System.out.println("mangelhaft"); | ||
| + | break; | ||
| + | case 6: | ||
| + | System.out.println("ungenügend"); | ||
| + | break; | ||
| + | default: | ||
| + | System.out.println("ungültig."); | ||
| + | break; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | --> | ||
| + | </html> | ||
| + | |||
| + | Praktisch gibt es in der Programmierung öfters Situationen oder Probleme, wo man eine Vielzahl von verschachtelten ''if-else''-Anweisungen brauchen würde (s.o.) und ein Programm kann dadurch schnell sehr unübersichtlich werden und unnötig lang.\\ | ||
| Um diesen Aufwand zu umgehen oder zu vermindern, wurde die switch-case-Ablaufsteuerung in Java und anderen höheren Programmiersprachen eingeführt. | Um diesen Aufwand zu umgehen oder zu vermindern, wurde die switch-case-Ablaufsteuerung in Java und anderen höheren Programmiersprachen eingeführt. | ||
| Zeile 356: | Zeile 396: | ||
| * Der Ausdruck ''ausdruck'' wird vollständig ausgewertet. | * Der Ausdruck ''ausdruck'' wird vollständig ausgewertet. | ||
| * Wir eine Übereinstimmung mit ''case ausdruck_i'' gefunden, dann wird bei dieser Anweisung die Abarbeitung fortgesetzt. | * Wir eine Übereinstimmung mit ''case ausdruck_i'' gefunden, dann wird bei dieser Anweisung die Abarbeitung fortgesetzt. | ||
| + | * Achtung! Es werden bei Zutreffen eines case-Ausdrucks alle folgenden Anweisungen der restlichen case-Ausdrücke ebenfalls ausgeführt. Sollte dies nicht erwünscht sein, muss man den switch-case-Block mit der ''break''-Anweisung unterbrechen (siehe letzter Punkt). | ||
| * Wird keine Übereinstimmung gefunden, wird bei ''default:'' fortgefahren. | * Wird keine Übereinstimmung gefunden, wird bei ''default:'' fortgefahren. | ||
| * Gibt es kein ''default:'', wird der Anweisungsteil der ''switch''-Anweisung ignoriert. | * Gibt es kein ''default:'', wird der Anweisungsteil der ''switch''-Anweisung ignoriert. | ||
| Zeile 364: | Zeile 405: | ||
| * Es sind nur Vergleiche mit primitiven Datentypen möglich. | * Es sind nur Vergleiche mit primitiven Datentypen möglich. | ||
| * Es können keine größeren primitiven Typen (''long'', ''float'', ''double'') oder Objekte benutzt werden. | * Es können keine größeren primitiven Typen (''long'', ''float'', ''double'') oder Objekte benutzt werden. | ||
| - | * Es kann abgesehen von Gleichheit keine Beziehung geprüft werden. Verschachtelte if- Anweisungen sind dagegen auf jede Art der Prüfung und auf jeden Datentyp anwendbar. | + | * Es kann abgesehen von Gleichheit keine Beziehung geprüft werden. Verschachtelte ''if''- Anweisungen sind dagegen auf jede Art der Prüfung und auf jeden Datentyp anwendbar. |
| ===== Aufgabe 2 ===== | ===== Aufgabe 2 ===== | ||
| - | Schreibe nun das gleiche Programm nochmal, benutzt dieses Mal aber die switch/case Ablaufsteuerung.\\ | + | Schreibe nun das gleiche Programm nochmal((kommt an die Stelle von FIXME ([[#die_switchcase_ablaufsteuerung|s.o.]]) ;-) )), benutze dieses Mal aber die ''switch-case''-Ablaufsteuerung.\\ |
| Zeile 408: | Zeile 449: | ||
| **6.** Schreib ein Programm das den BMI(([[wpde>Body-Mass-Index|wat'n ditte?]])) ausrechnet. | **6.** Schreib ein Programm das den BMI(([[wpde>Body-Mass-Index|wat'n ditte?]])) ausrechnet. | ||
| + | |||
| + | <html> | ||
| + | <!-- | ||
| + | ====== Lösung ====== | ||
| + | zu 5: | ||
| + | |||
| + | <code java> | ||
| + | // Biblothek zum Einlesen von Zahlen und Buchstaben einbinden | ||
| + | import Prog1Tools.IOTools; | ||
| + | |||
| + | // Klasse Alter | ||
| + | public class Alter { | ||
| + | // Main-Methode | ||
| + | public static void main (String args []) { | ||
| + | // Variable initialisieren | ||
| + | int alter = IOTools.readInteger ("Wie alt bist du? "); | ||
| + | |||
| + | // if Anweisungen / Kommentar dazu | ||
| + | if (alter < 2) { | ||
| + | System.out.println ("Du bist ein Baby! "); | ||
| + | } else { | ||
| + | if (alter < 12) { | ||
| + | System.out.println ("Du bist ein Kind! "); | ||
| + | } else { | ||
| + | if (alter < 18) { | ||
| + | System.out.println ("Du bist ein Jugendlicher! "); | ||
| + | } else { | ||
| + | if (alter < 24) { | ||
| + | System.out.println ("Du bist ein junger Erwachsener! "); | ||
| + | } else { | ||
| + | if (alter < 40) { | ||
| + | System.out.println ("Du bist ein Erwachsener "); | ||
| + | } else | ||
| + | if (alter < 55) { | ||
| + | System.out.println ("Du bist im mittleren Alter! "); | ||
| + | } else | ||
| + | if (alter < 65) { | ||
| + | System.out.println ("Du bist im hohen Alter! "); | ||
| + | } else { | ||
| + | System.out.println ("Du lebst noch?! "); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | ...oder... | ||
| + | |||
| + | <code java> | ||
| + | // von: Björn F. | ||
| + | // Biblothek zum Einlesen von Zahlen und Buchstaben einbinden | ||
| + | import Prog1Tools.IOTools; | ||
| + | |||
| + | // Klasse Alter | ||
| + | public class Alter { | ||
| + | // Main-Methode | ||
| + | public static void main (String args []) { | ||
| + | // Variable initialisieren | ||
| + | int alter = IOTools.readInteger ("Wie alst bist du? "); | ||
| + | // if Anweisungen / Kommentar dazu | ||
| + | if (alter < 2) | ||
| + | System.out.println ("Du bist ein Baby! "); | ||
| + | |||
| + | if ((alter >= 2 )&&(alter < 12)) | ||
| + | System.out.println ("Du bist ein Kind! "); | ||
| + | |||
| + | if ((alter >= 12)&&(alter < 18)) | ||
| + | System.out.println ("Du bist ein Jugendlicher! "); | ||
| + | |||
| + | if ((alter >= 18)&&(alter < 24)) | ||
| + | System.out.println ("Du bist ein junger Erwachsener! "); | ||
| + | |||
| + | if ((alter >= 24)&&(alter < 40)) | ||
| + | System.out.println ("Du bist ein Erwachsener "); | ||
| + | |||
| + | if ((alter >= 40)&&(alter < 55)) | ||
| + | System.out.println ("Du bist im mittleren Alter! "); | ||
| + | |||
| + | if ((alter >= 55)&&(alter < 65)) | ||
| + | System.out.println ("Du bist im hohen Alter! "); | ||
| + | |||
| + | if (alter > 65) | ||
| + | System.out.println ("Du lebst noch?! "); | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | --> | ||
| + | </html> | ||