Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Continue und break innerhalb if-Anweisung
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule Continue und break innerhalb if-Anweisung
MarsMission
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 18.08.2019
Mitteilungen: 44
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2019-09-01


Hey es geht darum zu überprüfen ob der Code im Anhang terminiert. Daneben befindet sich eine Musterlösung.

Meine Fragen beziehen sich auf break; und continue; innerhalb der if Anweisung. Wenn sich break und continue innerhalb von if-Anweisungen befinden die sich wiederum innerhalb einer while- Schleife bzw for schleife- befinden, wie ist das break und continue zu behandeln. Gilt das rot- bzw. blaumarkierte was ich markiert habe? Als Erstgedanke dachte ich nicht, da ich erst der Vermutung war das break die Anweisung innerhalb der if-Abfrage dann dort beendet bei break; und ein Continue die if-Abfrage neu startet. Das sollte aber nicht korrekt sein, wieso aber?




Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 1086
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2019-09-01


2019-09-01 14:00 - MarsMission im Themenstart schreibt:
Das sollte aber nicht korrekt sein, wieso aber?

Weil sich break und continue auf umgebende Scheifen beziehen. Ein if-Statement ist kein Schleife.

Solche Dinge kann man auch nachlesen, etwa hier: A continue statement with no label attempts to transfer control to the innermost enclosing while, do, or for statement of the immediately enclosing method, constructor, or initializer; this statement, which is called the continue target, then immediately ends the current iteration and begins a new one.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Diophant
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.01.2019
Mitteilungen: 3915
Aus: Rosenfeld, BW
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, eingetragen 2019-09-01

\(\begingroup\)\(\newcommand{\ba}{\begin{aligned}} \newcommand{\ea}{\end{aligned}} \newcommand{\bpm}{\begin{pmatrix}} \newcommand{\epm}{\end{pmatrix}} \newcommand{\bc}{\begin{cases}} \newcommand{\ec}{\end{cases}}\)
Hallo,

theoretisch springt das Programm bei einem break dorthin, wo du es mit dem roten Pfeil markiert hast. Aber: das passiert niemals, da die Bedingung \(x=5\) nicht eintritt.

Die continue-Anweisung wird jedoch beim ersten Durchgang ausgeführt, eben genau so, wie du es mit dem blauen Pfeil angedeutet hast. Bei den nächsten Bedingungen jedoch nicht mehr, da dann der Ausdruck \(y<10\) den Wert false hat.

Beide Anweisungen beziehen sich jeweils auf das innerste Schleifenkonstrukt, in dem sie vorkommen. Die if-Struktur ist jedoch keine Schleife.


Gruß, Diophant

[Die Antwort wurde vor Beitrag No.1 begonnen.]
\(\endgroup\)


Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
MarsMission
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 18.08.2019
Mitteilungen: 44
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, vom Themenstarter, eingetragen 2019-09-01


Vielen dank!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
MarsMission
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 18.08.2019
Mitteilungen: 44
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, vom Themenstarter, eingetragen 2019-09-01


Also ich habe hier eine ähnliche Aufgabe, wobei ich mir folgende fragen stelle.

1) Das y` in der ersten Zeile aus der Lösung ist falsch oder? Eigentlich müsste es aufgrund von case 0: y`=y=3+1=4 sein anstatt 5 oder?

2)Was ist der unterschied ob das case Szenario mit oder ohne break endet? In beiden Fällen überspringt er doch alles was innerhalb {} steht bzgl. switch(Zahl){...}




Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Diophant
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.01.2019
Mitteilungen: 3915
Aus: Rosenfeld, BW
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, eingetragen 2019-09-01


Hallo,

2019-09-01 14:50 - MarsMission in Beitrag No. 4 schreibt:
Also ich habe hier eine ähnliche Aufgabe, wobei ich mir folgende fragen stelle.

1) Das y` in der ersten Zeile aus der Lösung ist falsch oder? Eigentlich müsste es aufgrund von case 0: y`=y=3+1=4 sein anstatt 5 oder?

Das sehe ich auch so.

EDIT: auch hier habe ich mich geirrt. Siehe den Beitrag von rlk.

2019-09-01 14:50 - MarsMission in Beitrag No. 4 schreibt:
2)Was ist der unterschied ob das case Szenario mit oder ohne break endet? In beiden Fällen überspringt er doch alles was innerhalb {} steht bzgl. switch(Zahl){...}



Hier ist wiederum die switch-Struktur keine Schleife. Ein break bricht also die do/while-Schleife ab. Dein roter Pfeil muss also auf den Befehl nach dem while bzw. ans Programmende zeigen.

Sorry, das durchgestrichene war falsch. Dein roter Pfeil ist richtig gesetzt: die break-Anweisung führt zu einem Sprung aus der switch/case-Struktur.


Gruß, Diophant



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
MarsMission
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 18.08.2019
Mitteilungen: 44
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, vom Themenstarter, eingetragen 2019-09-01


Hey vielen dank! Ich habe noch einige Unsicherheiten ....

1) Also kann ich mir merken das

switch-case-Abfragen bzw. if-Abfragen, die ein break enthalten und sich innerhalb einer Schleife der folgenden Form befinden

do-while-loop
while-loop
for-loop

das break die komplette Schleife überspringt?

2) In der switch-case Abfrage was passiert wenn am Ende eines cases kein break vorhanden ist z.b. auch wenn das switch case szenario nicht in einer loop ist? Ich vermute mal das wenn case (n): Anweisung; KEIN BREAK VORHANDEN das darauffolgende case (n+1): Anweisung; break; ausführt unabhängig ob am Anfang switch(n+1) stattgefunden hat?



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Diophant
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.01.2019
Mitteilungen: 3915
Aus: Rosenfeld, BW
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, eingetragen 2019-09-01


Hallo,

EDIT: hier stand Unsinn: siehe den nächsten Beitrag von rlk.

(Ich hatte leider das fehlende break übersehen).


Gruß, Diophant



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
rlk
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.03.2007
Mitteilungen: 10772
Aus: Wien
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, eingetragen 2019-09-01


Hallo MarsMission,
2019-09-01 14:50 - MarsMission in Beitrag No. 4 schreibt:
Also ich habe hier eine ähnliche Aufgabe, wobei ich mir folgende fragen stelle.

1) Das y` in der ersten Zeile aus der Lösung ist falsch oder? Eigentlich müsste es aufgrund von case 0: y`=y=3+1=4 sein anstatt 5 oder?
y'=5 ist richtig.
2019-09-01 14:50 - MarsMission in Beitrag No. 4 schreibt:
2)Was ist der unterschied ob das case Szenario mit oder ohne break endet? In beiden Fällen überspringt er doch alles was innerhalb {} steht bzgl. switch(Zahl){...}
Wegen der fehlenden break-Anweisung in Zeile 6 wird Zeile 7 ausgeführt und y auf 5 gesetzt. Diese Eigenschaft von switch wird als fall through bezeichnet und ist in den meisten Fällen unerwünscht. Die danach folgende break-Anweisung beendet die switch-Anweisung, der rote Pfeil ist richtig.

Verwendest Du Java, wie zippy in Beitrag No. 1 vermutet hat, oder eine andere Sprache?

Servus,
Roland




[Die Antwort wurde nach Beitrag No.5 begonnen.]



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
MarsMission
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 18.08.2019
Mitteilungen: 44
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.9, vom Themenstarter, eingetragen 2019-09-01


Hey vielen dank für deine Antwort rlk. Ja ich benutze Java.

Also kann man sagen, dass wenn kein break; nach einem case(g): Anweisung; vorhanden ist, man diesen Code einfach überspringt und gar nicht beachtet sofern g eintritt? Weil so wie ich es verstanden habe wird alles wieder zurückgesetzt da kein break vorhanden ist und einfach die nächste Anweisung vom nächsten case(g+1) ausgeführt wird. Das geht alles solange weiter bis ein break vorhanden ist. Das break beendet dann das switch-case-Szenrio



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 1086
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.10, eingetragen 2019-09-01


2019-09-01 15:37 - MarsMission in Beitrag No. 9 schreibt:
Also kann man sagen, dass wenn kein break; nach einem case(g): Anweisung; vorhanden ist, man diesen Code einfach überspringt und gar nicht beachtet sofern g eintritt?

Nein, das kann man nicht sagen, denn der Code kann ja Seiteneffekte haben (er kann z.B. eine Variable hochzählen).



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
MarsMission
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 18.08.2019
Mitteilungen: 44
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.11, vom Themenstarter, eingetragen 2019-09-01


Und wie kommt man dann auf y=5? Anders kann ich mir das nicht erklären ...
Es geht um das y` in der ersten Reihe.
lg




Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Diophant
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.01.2019
Mitteilungen: 3915
Aus: Rosenfeld, BW
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.12, eingetragen 2019-09-01

\(\begingroup\)\(\newcommand{\ba}{\begin{aligned}} \newcommand{\ea}{\end{aligned}} \newcommand{\bpm}{\begin{pmatrix}} \newcommand{\epm}{\end{pmatrix}} \newcommand{\bc}{\begin{cases}} \newcommand{\ec}{\end{cases}}\)
Hallo MarsMission,

2019-09-01 15:46 - MarsMission in Beitrag No. 11 schreibt:
Und wie kommt man dann auf y=5? Anders kann ich mir das nicht erklären ...
Es geht um das y` in der ersten Reihe.
lg



Nun, zwischen diesen beiden Zeilen:
Java
case 0: y=x+1;
case 1: y=x+2; break;

ändert x seinen Wert ja nicht. Insofern läuft in der ersten Zeile die Rechnung \(y=3+1=4\) und in der zweiten Zeile eben \(y=3+2=5\) ab.

Denn wie gesagt: der ersten Zeile fehlt hier ein break.


Gruß, Diophant
\(\endgroup\)


Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 1086
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.13, eingetragen 2019-09-01


2019-09-01 15:46 - MarsMission in Beitrag No. 11 schreibt:
Und wie kommt man dann auf y=5?

Es ist vor dem Eintritt in das case-Statement $x=1+2=3$. Dann wird zuerst der "case 0"-Fall ausgeführt, der zu $y:=3+1=4$ führt, und danach der Code bis zum nächsten break, der zu $y:=3+2=5$ führt.

In diesem Fall hat der Code, der zu dem "case 0"-Fall gehört, tatsächlich keine Folgen, da seine Wirkung auf $y$ von dem nach nachfolgende Code vollständig überschrieben wird.

Das muss aber nicht immer so sein. Deshalb ist dein "Merksatz", dass man den Code "einfach überspringt und gar nicht beachtet" nicht korrekt (auch wenn er in diesem Spezialfall zum richtigen Ergebnis führt).

[Die Antwort wurde nach Beitrag No.11 begonnen.]



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
MarsMission hat die Antworten auf ihre/seine Frage gesehen.
MarsMission hatte hier bereits selbst das Ok-Häkchen gesetzt.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2020 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]