Hier werden die Unterschiede zwischen der gewählten und der aktuellen Version gezeigt.
start:info:11if:05_ablaufsteuerung 02.11.2008 23:02 | 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 ====== | ||
- | Warum überhaupt eine switch/case Anweisung die ja theoretisch völlig überflüssig ist, da es ja die if/else Anweisungen gibt.\\ | + | Am Nassi-Shneidermann-Diagramm erkennt man, dass hiermit eine neue Regel mit einer neuen Syntax eingeführt wird: Die ''switch-case''-Anweisung.\\ |
- | Praktisch aber gibt es in der Programmierung öfters Situationen oder Probleme, wo man eine Vielzahl von verschachtelten if/else Anweisungen brauchen würde, wie zum Beispiel bei eurem Programm, und ein Programm kann dadurch schnell sehr unübersichtlich werden und unnötig lang. | + | Warum überhaupt eine ''switch-case''-Anweisung, die ja theoretisch völlig überflüssig ist, da es ja die ''if-else''-Anweisungen gibt.\\ |
- | Um diesen Aufwand zu umgehen oder zu vermindern, wurde die switch/case Ablaufsteuerung in Java und anderen höheren Programmiersprachen eingeführt. | + | |
+ | Das erkennt man, wenn man obige Aufgabe mit ''switch-case'' löst:\\ | ||
+ | |||
+ | FIXME\\ | ||
+ | |||
+ | <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. | ||
====== Struktur der switch/case Anweisung ====== | ====== Struktur der switch/case Anweisung ====== | ||
Zeile 348: | Zeile 395: | ||
* Der Ausdruck ''ausdruck'' wird vollständig ausgewertet. | * Der Ausdruck ''ausdruck'' wird vollständig ausgewertet. | ||
- | * Wir eine Übereinstimmung mit case konstanter ''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. |
- | * Wird keine Übereinstimmung gefunden, wird bei default: fortgefahren. | + | * 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). |
- | * Gibt es kein default: wird der Anweisungsteil der switch-Anweisung ignoriert. | + | * Wird keine Übereinstimmung gefunden, wird bei ''default:'' fortgefahren. |
- | * Sowohl der Ausdruck ausdruck als auch die konstanten Ausdrücke müssen ganzzahlig (byte, char, short oder int) sein. | + | * Gibt es kein ''default:'', wird der Anweisungsteil der ''switch''-Anweisung ignoriert. |
- | * Die Reihenfolge der case- oder default-Anweisung ist beliebig. | + | * Sowohl der Ausdruck ''ausdruck'' als auch die konstanten Ausdrücke müssen ganzzahlig (''byte'', ''char'', ''short'' oder ''int'') sein. |
- | * Durch den Befehl break wird die switch-Anweisung sofort verlassen. | + | * Die Reihenfolge der ''case''- oder ''default''-Anweisung ist beliebig. |
+ | * Durch den Befehl break wird die ''switch''-Anweisung sofort verlassen. | ||
\\ | \\ | ||
* 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 401: | 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> |