For-silmukka
Silmukka mahdollistaa koodin suorittamisen niin monta kertaa kuin haluamme. Silmukoita on erilaisia tyyppejä. C#:ssa, jos haluamme suorittaa koodin tietyn määrän kertoja, käytämme for loop.
For-silmukan malli (syntaksi) on seuraava:
main.cs
123for(initiation; condition; operation) { // code to execute }
Tarkastellaan esimerkkiä, jossa käytämme tätä syntaksia:
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // Output "Hello World" ten times. for(int i = 0; i < 10; i++) { Console.WriteLine("Hello World"); } } } }
Huomio
i++on sama kuini = i + 1. Se kasvattaa muuttujan arvoa yhdellä (1). Vastaavastii--pienentää arvoa yhdellä (1).
int i = 0on alustusosa. Alustus tapahtuu, kun silmukka käynnistyy. Silmukan alussa luodaan uusi väliaikainen muuttuja nimeltäija alustetaan arvolla0;i < 10on ehto. Ehto tarkistetaan jokaisella silmukan kierroksella (toistolla). Silmukka suorittaa sisäisen koodilohkon niin kauan kuin ehto on tosi;i++on toimenpide, joka suoritetaan jokaisen kierroksen jälkeen. Toimenpide on yleensä inkrementointi tai dekrementointi. Koskaiarvoa kasvatetaan jokaisen kierroksen jälkeen, ehtoi < 10muuttuu epätodeksi kymmenen kierroksen jälkeen ja silmukka päättyy.
On tärkeää ymmärtää, että kaikki kolme for-silmukan osaa — initialization, condition ja operation — ovat valinnaisia. Voit jättää minkä tahansa niistä pois, mutta tämä voi muuttaa silmukan toimintaa.
Vaikka sitä ei suositella, voit määritellä silmukan muuttujan silmukan ulkopuolella ja jättää initialization-osan tyhjäksi. Tämä tarkoittaa, että silmukka toimii edelleen, mutta sinun tulee olla varovainen, sillä tämä voi johtaa odottamattomiin tuloksiin, jos sitä ei käsitellä oikein.
main.cs
12345678910111213141516using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10; i++) { Console.WriteLine("Hello World"); } } } }
Voimme myös poistaa operation-osan ja sijoittaa sen silmukan koodilohkon loppuun. Silmukka toimii samalla tavalla kuin aiemmin, koska muuttujaa i kasvatetaan edelleen jokaisen iteraation jälkeen.
main.cs
1234567891011121314151617using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10;) { Console.WriteLine("Hello World"); i++; } } } }
Huomaa, että yllä olevassa koodissa sijoitimme silmukan syntaksissa puolipisteen (;) kohtaan, jossa int i = 0 yleensä olisi. Tämä puolipiste on aina oltava paikallaan, riippumatta siitä, luodaanko silmukkamuuttuja vai ei.
Myös silmukan ehtolauseen poistaminen on mahdollista, mutta tällöin silmukka jatkuu loputtomasti, ellei sitä päätetä manuaalisesti (tähän palaamme myöhemmissä luvuissa).
main.cs
1234567891011121314151617using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // In this case the variable `i` is useless so we don't create it. // The loop never ends for(;;) { Console.WriteLine("Hello World"); } } } }
Huom
Pidimme silmukan syntaksissa molemmat puolipisteet
for(;;), nämä ovat välttämättömiä, muuten kääntäjä antaa virheilmoituksen.
Koska i-arvo muuttuu jokaisella iteraatiolla, voimme hyödyntää tätä. Ymmärtääksemme tämän tarkemmin, tarkastellaan yksinkertaista ohjelmaa, joka tulostaa i-arvon jokaisella iteraatiolla:
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 0; i < 10; i++) { Console.WriteLine(i); } } } }
Huomaa, että se päättyy arvoon 9, koska se alkaa numerosta 0. Iteraatioiden kokonaismäärä oli kymmenen. Voimme muokata aloitusta, ehtoa ja operaatiota tulostaaksemme kymmenen parillista lukua väliltä 2–20.
Huomio
Parilliset luvut ovat lukuja, jotka ovat jaollisia luvulla
2. Esimerkiksi 2, 4, 6, 8, 10 jne. Parillisiin lukuihin kuuluu myös luku0, mutta näissä esimerkeissä käsittelemme vain0suurempia parillisia lukuja.
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 2; i <= 20; i += 2) { Console.WriteLine(i); } } } }
Huom
i += 2on lyhyempi tapa kirjoittaai = i + 2. Tämä syntaksi toimii myös muiden operaattoreiden kanssa, esimerkiksii -= 2,i *= 2,i /= 2,i %= 2jne.
Silmukka alkaa arvosta 0 ja kasvattaa muuttujan i arvoa 2 jokaisella iteraatiolla. Muutimme ehtoa muotoon i <= 20, jotta silmukka pysähtyy arvoon 20.
Yllä oleva logiikka oli tarkoitettu for-silmukan toiminnan ymmärtämiseen. Voimme käyttää paljon yksinkertaisempaa logiikkaa tulostaaksemme ensimmäiset kymmenen parillista lukua:
main.cs
1234567891011121314using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 10; i++) { Console.WriteLine(i * 2); } } } }
Tässä tapauksessa ehto on paljon yksinkertaisempi. Esimerkiksi, jos haluamme ensimmäiset 27 parillista lukua, meidän täytyy tietää mikä on 27. parillinen luku voidaksemme muodostaa ehdon edellisellä menetelmällä, mutta tässä tapauksessa meidän tarvitsee vain muuttaa ehtoa muotoon i <= 27:
main.cs
1234567891011121314using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 27; i++) { Console.WriteLine(i * 2); } } } }
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you explain more about the different types of loops in C#?
What happens if I omit all three components in the for loop?
Can you show an example of a for loop that runs infinitely?
Mahtavaa!
Completion arvosana parantunut arvoon 1.67
For-silmukka
Pyyhkäise näyttääksesi valikon
Silmukka mahdollistaa koodin suorittamisen niin monta kertaa kuin haluamme. Silmukoita on erilaisia tyyppejä. C#:ssa, jos haluamme suorittaa koodin tietyn määrän kertoja, käytämme for loop.
For-silmukan malli (syntaksi) on seuraava:
main.cs
123for(initiation; condition; operation) { // code to execute }
Tarkastellaan esimerkkiä, jossa käytämme tätä syntaksia:
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // Output "Hello World" ten times. for(int i = 0; i < 10; i++) { Console.WriteLine("Hello World"); } } } }
Huomio
i++on sama kuini = i + 1. Se kasvattaa muuttujan arvoa yhdellä (1). Vastaavastii--pienentää arvoa yhdellä (1).
int i = 0on alustusosa. Alustus tapahtuu, kun silmukka käynnistyy. Silmukan alussa luodaan uusi väliaikainen muuttuja nimeltäija alustetaan arvolla0;i < 10on ehto. Ehto tarkistetaan jokaisella silmukan kierroksella (toistolla). Silmukka suorittaa sisäisen koodilohkon niin kauan kuin ehto on tosi;i++on toimenpide, joka suoritetaan jokaisen kierroksen jälkeen. Toimenpide on yleensä inkrementointi tai dekrementointi. Koskaiarvoa kasvatetaan jokaisen kierroksen jälkeen, ehtoi < 10muuttuu epätodeksi kymmenen kierroksen jälkeen ja silmukka päättyy.
On tärkeää ymmärtää, että kaikki kolme for-silmukan osaa — initialization, condition ja operation — ovat valinnaisia. Voit jättää minkä tahansa niistä pois, mutta tämä voi muuttaa silmukan toimintaa.
Vaikka sitä ei suositella, voit määritellä silmukan muuttujan silmukan ulkopuolella ja jättää initialization-osan tyhjäksi. Tämä tarkoittaa, että silmukka toimii edelleen, mutta sinun tulee olla varovainen, sillä tämä voi johtaa odottamattomiin tuloksiin, jos sitä ei käsitellä oikein.
main.cs
12345678910111213141516using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10; i++) { Console.WriteLine("Hello World"); } } } }
Voimme myös poistaa operation-osan ja sijoittaa sen silmukan koodilohkon loppuun. Silmukka toimii samalla tavalla kuin aiemmin, koska muuttujaa i kasvatetaan edelleen jokaisen iteraation jälkeen.
main.cs
1234567891011121314151617using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10;) { Console.WriteLine("Hello World"); i++; } } } }
Huomaa, että yllä olevassa koodissa sijoitimme silmukan syntaksissa puolipisteen (;) kohtaan, jossa int i = 0 yleensä olisi. Tämä puolipiste on aina oltava paikallaan, riippumatta siitä, luodaanko silmukkamuuttuja vai ei.
Myös silmukan ehtolauseen poistaminen on mahdollista, mutta tällöin silmukka jatkuu loputtomasti, ellei sitä päätetä manuaalisesti (tähän palaamme myöhemmissä luvuissa).
main.cs
1234567891011121314151617using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // In this case the variable `i` is useless so we don't create it. // The loop never ends for(;;) { Console.WriteLine("Hello World"); } } } }
Huom
Pidimme silmukan syntaksissa molemmat puolipisteet
for(;;), nämä ovat välttämättömiä, muuten kääntäjä antaa virheilmoituksen.
Koska i-arvo muuttuu jokaisella iteraatiolla, voimme hyödyntää tätä. Ymmärtääksemme tämän tarkemmin, tarkastellaan yksinkertaista ohjelmaa, joka tulostaa i-arvon jokaisella iteraatiolla:
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 0; i < 10; i++) { Console.WriteLine(i); } } } }
Huomaa, että se päättyy arvoon 9, koska se alkaa numerosta 0. Iteraatioiden kokonaismäärä oli kymmenen. Voimme muokata aloitusta, ehtoa ja operaatiota tulostaaksemme kymmenen parillista lukua väliltä 2–20.
Huomio
Parilliset luvut ovat lukuja, jotka ovat jaollisia luvulla
2. Esimerkiksi 2, 4, 6, 8, 10 jne. Parillisiin lukuihin kuuluu myös luku0, mutta näissä esimerkeissä käsittelemme vain0suurempia parillisia lukuja.
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 2; i <= 20; i += 2) { Console.WriteLine(i); } } } }
Huom
i += 2on lyhyempi tapa kirjoittaai = i + 2. Tämä syntaksi toimii myös muiden operaattoreiden kanssa, esimerkiksii -= 2,i *= 2,i /= 2,i %= 2jne.
Silmukka alkaa arvosta 0 ja kasvattaa muuttujan i arvoa 2 jokaisella iteraatiolla. Muutimme ehtoa muotoon i <= 20, jotta silmukka pysähtyy arvoon 20.
Yllä oleva logiikka oli tarkoitettu for-silmukan toiminnan ymmärtämiseen. Voimme käyttää paljon yksinkertaisempaa logiikkaa tulostaaksemme ensimmäiset kymmenen parillista lukua:
main.cs
1234567891011121314using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 10; i++) { Console.WriteLine(i * 2); } } } }
Tässä tapauksessa ehto on paljon yksinkertaisempi. Esimerkiksi, jos haluamme ensimmäiset 27 parillista lukua, meidän täytyy tietää mikä on 27. parillinen luku voidaksemme muodostaa ehdon edellisellä menetelmällä, mutta tässä tapauksessa meidän tarvitsee vain muuttaa ehtoa muotoon i <= 27:
main.cs
1234567891011121314using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 27; i++) { Console.WriteLine(i * 2); } } } }
Kiitos palautteestasi!