[java] switch: hvorfor skal jeg "break;" ved default??

Her kan du få hjælp og stille spørgsmål til andre programmeringssprog!
Besvar
skills jokes
Nørd
Nørd
Indlæg:125
Tilmeldt:12. sep 2013, 17:03
[java] switch: hvorfor skal jeg "break;" ved default??

Indlæg af skills jokes » 9. mar 2014, 21:12

hej,
jeg tænkte bare over hvorfor nogle skriver "break;" efter "default :" i et switch statement
fks:

Kode: Vælg alt

switch (tal){
case 1:
System.out.println("tallet er 1");
break;

case 2:
System.out.println("tallet er 2");
break;

default:
System.out.println("jeg kender ikke tallets værdi");
break;
}
altså det jeg forstår ved at skriver default er at hvis tallet ikke er 1 eller 2 (i det her eksempel) så skriver den bare hvad der står i default...
og det jeg forstår ved "break;" er at når den har fundet tallets værdi fks 2 og den har fundet "case 2:" så gør den det der står og når den ser "break;" stopper den med at læse switch statementet

men hvis default er det sidste den gør, i et switch statement (fordi jeg går ud fra at computeren tester for alt andet inden den går i default) hvorfor skal man så break den?
fordi hvis default er det sidste den gør hvorfor så skrive "break;" og få den til at stoppe med at læse switch statementet hvis den allerede havde læst det hele og var nået ned i bunden til defaulten.

- så kan nogle fortælle mig hvorfor nogle skriver "break;" efter default?

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: [java] switch: hvorfor skal jeg "break;" ved default??

Indlæg af cristian » 9. mar 2014, 21:48

Prøv noget i still med

Kode: Vælg alt

boolean run = true;

while(run) {
switch (tal){
case 1:
System.out.println("tallet er 1");
break;

case 2:
System.out.println("tallet er 2");
break;

default:
System.out.println("jeg kender ikke tallets værdi");
break;
}
}
Prøv at fjerne de forskellige breaks og se hvordan koden reagerer.
Hvis du fjerner break i case 1 så skulle den gerne eksekverer case 1 plus case 2 hvis tallet er 1.

Hvis du fjerner break i case 2 og tallet er 2, så skulle den gerne eksekverer case 2 plus default.

Hvis du har en break i case 1 og 2 men fjerner break i default, så er der nogle der siger at den ender i en uendelig løkke hvor den eksekverer default.
Fordi den ikke kan finde ud af at break den. Hvor den så skriver

Kode: Vælg alt

jeg kender ikke tallets værdi
jeg kender ikke tallets værdi
jeg kender ikke tallets værdi
jeg kender ikke tallets værdi
jeg kender ikke tallets værdi
Indtil du stopper den.
Another point of interest is the break statement. Each break statement terminates the enclosing switch statement. Control flow continues with the first statement following the switch block. The break statements are necessary because without them, statements in switch blocks fall through: All statements after the matching case label are executed in sequence, regardless of the expression of subsequent case labels, until a break statement is encountered. The program SwitchDemoFallThrough shows statements in a switch block that fall through. The program displays the month corresponding to the integer month and the months that follow in the year:
Jeg indrømmer gerne at jeg aldrig selv har testet det du spøger om :)

Det er også muligt at lave en switch inde i en switch hvis du ville eksperimenterer med det.

skills jokes
Nørd
Nørd
Indlæg:125
Tilmeldt:12. sep 2013, 17:03

Re: [java] switch: hvorfor skal jeg "break;" ved default??

Indlæg af skills jokes » 10. mar 2014, 14:39

vil det så sige at hvis jeg havde et stort program og et sted i programmed bruger jeg et switch statement, så hver gang jeg starter programmet vil den starte med at læse koden men hvis jeg ikke laver et "break;" i default så vil den blive ved med at læse defaulten selvom man ikke kan se det, samtidig med at den læser alt det andet kode?
så programmet ville blive en lille smugle langsommere?

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: [java] switch: hvorfor skal jeg "break;" ved default??

Indlæg af cristian » 10. mar 2014, 18:13

skills jokes skrev:vil det så sige at hvis jeg havde et stort program og et sted i programmed bruger jeg et switch statement, så hver gang jeg starter programmet vil den starte med at læse koden men hvis jeg ikke laver et "break;" i default så vil den blive ved med at læse defaulten selvom man ikke kan se det, samtidig med at den læser alt det andet kode?
så programmet ville blive en lille smugle langsommere?
Da du ikke har lavet multi-threading så kan dit program ikke mere end en ting af gangen.
Men prøv at teste det, prøv at fjern break; fra default og gør dit program med den kode snippet som jeg lagde op i går.

Besvar