Tässä artikkelissa opitaan while ja do… while -silmukassa C #: ssa, kuinka niitä käytetään ja kuinka niiden välillä on ero.
Ohjelmoinnissa halutaan usein suorittaa tietty lausejoukko tietyn määrän kertoja. Mahdollinen ratkaisu on kirjoittaa nämä lauseet tarvittavaan määrään kertoja. Toistojen lukumäärä ei kuitenkaan välttämättä ole tiedossa etukäteen (kokoamisajan aikana) tai ehkä riittävän suuri (esimerkiksi 10000).
Paras ratkaisu tällaiseen ongelmaan on silmukka. Silmukoita käytetään ohjelmoinnissa toistamaan tietty lause lause, kunnes jokin ehto täyttyy.
Tässä artikkelissa opitaan käyttämään silmukoita C #: ssä.
C # silmukka
Kun avainsanaa käytetään luomaan samalla silmukka C #. While-silmukan syntaksi on:
while (testi-lauseke) (// while-kappale)
Kuinka silmukka toimii?
- C # kun taas silmukka koostuu a: sta
test-expression
. - Jos
test-expression
testataan jottatrue
,- while-silmukan sisällä olevat lauseet suoritetaan.
- suorituksen jälkeen,
test-expression
arvioidaan uudelleen.
- Jos
test-expression
arvoksi arvioidaanfalse
, while-silmukka päättyy.
kun taas silmukka vuokaavio
Esimerkki 1: Silmukka
using System; namespace Loop ( class WhileLoop ( public static void Main(string() args) ( int i=1; while (i<=5) ( Console.WriteLine("C# For Loop: Iteration (0)", i); i++; ) ) ) )
Kun suoritamme ohjelmaa, tulos on:
C # Silmukka: Iteraatio 1 C # Silmukka: Iteraatio 2 C # Silmukka: Iteraatio 3 C # Silmukka: Iteraatio 4 C # Silmukka: Iteraatio 5
Aluksi i: n arvo on 1.
Kun ohjelma saavuttaa while-lauseen,
- testilauseke
i <=5
arvioidaan. Koska i on 1 ja1 <= 5
ontrue
, se suorittaa while-silmukan rungon. Tällöin viiva tulostetaan näytölle Iteration 1: llä, ja i: n arvoa kasvatetaan yhdellä tullakseen 2. - Nyt testilauseke (
i <=5
) arvioidaan uudelleen. Myös tällä kertaa lauseke palaatrue
(2 <= 5), joten viiva tulostetaan näytölle ja i: n arvo kasvaa nyt arvoon 3… - Tämä jatkuu ja while-silmukka suoritetaan, kunnes minusta tulee 6. Tässä vaiheessa testi-lauseke arvioi
false
ja siten silmukka päättyy.
Esimerkki 2: while-silmukka viiden ensimmäisen luonnollisen luvun summan laskemiseksi
using System; namespace Loop ( class WhileLoop ( public static void Main(string() args) ( int i=1, sum=0; while (i<=5) ( sum += i; i++; ) Console.WriteLine("Sum = (0)", sum); ) ) )
Kun suoritamme ohjelmaa, tulos on:
Summa = 15
Tämä ohjelma laskee viiden ensimmäisen luonnollisen luvun summan.
- Alun perin summan arvo alustetaan arvoon 0.
- Jokaisella iteraatiolla summan arvo päivitetään
sum+i
arvoon ja i: n arvoa lisätään 1: llä. - Kun i: n arvo saavuttaa 6, testilauseke
i<=5
palauttaa epätosi ja silmukka päättyy.
Katsotaanpa, mitä tietyssä ohjelmassa tapahtuu jokaisella iteraatiolla.
Aluksi i = 1, summa = 0
Vaikka silmukan toteutus vaiheetToisto | I: n arvo | i <= 5 | Summan arvo |
---|---|---|---|
1 | 1 | totta | 0 + 1 = 1 |
2 | 2 | totta | 1 + 2 = 3 |
3 | 3 | totta | 3 + 3 = 6 |
4 | 4 | totta | 6 + 4 = 10 |
5 | 5 | totta | 10 + 5 = 15 |
6 | 6 | väärä | Silmukka päättyy |
Joten summan lopullinen arvo on 15.
C # tehdä … silmukan aikana
Do ja kun avainsanaa käytetään luomaan do … taas silmukka. Se on samanlainen kuin while-silmukka, mutta niiden välillä on kuitenkin suuri ero.
In while -silmukassa kunto tarkistetaan ennen rungon suorittamista. Se on täsmälleen päinvastainen do do… while -silmukassa, eli kunto tarkistetaan rungon suorituksen jälkeen.
Siksi, do do … kun taas -silmukka suorittaa ainakin kerran testilausekkeesta riippumatta.
Syntaksi do… while -silmukalle on:
do (// body of do while loop) while (testilauseke);
Kuinka… vaikka silmukka toimii?
- Do … kun taas silmukka suoritetaan aluksi.
- Sitten
test-expression
arvioidaan. - Jos
test-expression
ontrue
, silmukan runko suoritetaan. - Kun
test-expression
onfalse
, tee… kun silmukka päättyy.
tee … kun taas silmukka vuokaavio
Esimerkki 3: tee… silmukka
using System; namespace Loop ( class DoWhileLoop ( public static void Main(string() args) ( int i = 1, n = 5, product; do ( product = n * i; Console.WriteLine("(0) * (1) = (2)", n, i, product); i++; ) while (i <= 10); ) ) )
Kun suoritamme ohjelmaa, tulos on:
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 5 * 6 = 30 5 * 7 = 35 5 * 8 = 40 5 * 9 = 45 5 * 10 = 50
As we can see, the above program prints the multiplication table of a number (5).
- Initially, the value of i is 1. The program, then enters the body of do… while loop without checking any condition (as opposed to while loop).
- Inside the body, product is calculated and printed on the screen. The value of i is then incremented to 2.
- After the execution of the loop’s body, the test expression
i <= 10
is evaluated. In total, the do… while loop will run for 10 times. - Finally, when the value of i is 11, the test-expression evaluates to
false
and hence terminates the loop.
Infinite while and do… while loop
If the test expression in the while and do… while loop never evaluates to false
, the body of loop will run forever. Such loops are called infinite loop.
For example:
Infinite while loop
while (tosi) (// while-silmukka)
Ääretön tehdä … kun taas silmukka
do (// silmukan body) while (true);
Ääretön silmukka on hyödyllinen, kun tarvitsemme silmukan toimimaan niin kauan kuin ohjelmamme toimii.
Esimerkiksi, jos ohjelmasi on animaatio, sinun on suoritettava sitä jatkuvasti, kunnes se pysäytetään. Tällöin animaation jatkuva toistaminen edellyttää ääretöntä silmukkaa.