Unterschiede

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>
start/info/11if/05_ablaufsteuerung.1225663354.txt.gz · Zuletzt geändert: 23.10.2013 10:12 (Externe Bearbeitung)
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0