Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele For-silmukka | Silmukat
C# Perusteet

bookFor-silmukka

Silmukka mahdollistaa koodin suorittamisen niin monta kertaa kuin haluamme. Silmukoita on erilaisia. C#:ssa, jos haluamme suorittaa koodin tietyn määrän kertoja, käytämme for loop.

For-silmukan malli (syntaksi) on seuraava:

for(initiation; condition; operation) { 
    // code to execute
}


Tarkastellaan esimerkkiä, jossa käytämme tätä syntaksia:

main.cs

main.cs

copy
123456789101112131415
using 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"); } } } }

Huom

i++ on sama kuin i = i + 1. Se kasvattaa muuttujan arvoa yhdellä 1. Vastaavasti i-- pienentää arvoa yhdellä 1.

  • int i = 0 on alustusosa. Alustus tapahtuu, kun silmukka alkaa. Silmukan alussa luodaan uusi väliaikainen muuttuja nimeltä i ja alustetaan arvolla 0.
  • i < 10 on ehto. Ehto tarkistetaan jokaisella silmukan kierroksella (toistolla). Silmukka jatkaa sisäisen koodilohkon suorittamista niin kauan kuin ehto on tosi.
  • i++ on operaatio, joka suoritetaan jokaisen kierroksen jälkeen. Operaatio on yleensä inkrementointi tai dekrementointi. Koska i arvoa kasvatetaan jokaisen kierroksen jälkeen, ehto i < 10 muuttuu 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ä saattaa muuttaa silmukan toimintaa.

Vaikka sitä ei suositella, voit määritellä silmukkamuuttujan silmukan ulkopuolella ja jättää initialization-osan tyhjäksi. Silmukka toimii silti, mutta sinun tulee olla varovainen, sillä tämä voi johtaa odottamattomiin tuloksiin, jos sitä ei käsitellä oikein.

main.cs

main.cs

copy
12345678910111213141516
using 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 lohkon loppuun. Silmukka toimii samalla tavalla kuin aiemmin, sillä muuttujaa i kasvatetaan edelleen jokaisen kierroksen jälkeen.

main.cs

main.cs

copy
1234567891011121314151617
using 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 normaalisti olisi. Tämä puolipiste on aina oltava paikallaan, riippumatta siitä, luodaanko silmukkamuuttuja vai ei.

Myös silmukkaehdon poistaminen on mahdollista, mutta tällöin silmukka jatkuu loputtomasti, ellei sitä päätetä manuaalisesti (tähän palaamme tarkemmin myöhemmissä luvuissa).

main.cs

main.cs

copy
1234567891011121314151617
using 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"); } } } }

Huomio

Pidimme silmukan syntaksissa edelleen molemmat puolipisteet for(;;), nämä ovat välttämättömiä, muuten kääntäjä antaa virheilmoituksia.

Koska i:n arvo muuttuu jokaisella iteraatiolla, voimme hyödyntää sitä. Ymmärtääksemme tämän tarkastellaan yksinkertaista ohjelmaa, joka tulostaa i:n arvon jokaisella iteraatiolla:

main.cs

main.cs

copy
123456789101112131415
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 0; i < 10; i++) { Console.WriteLine(i); } } } }

Huomaa, että silmukka päättyy arvoon 9, koska se alkaa numerosta 0. Iteraatioiden kokonaismäärä oli kymmenen. Voimme muokata alustus-, ehto- ja operaatio-osia 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. Parilliset luvut sisältävät myös luvun 0, mutta käsittelemme näissä esimerkeissä vain lukuja, jotka ovat suurempia kuin 0.

main.cs

main.cs

copy
123456789101112131415
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 2; i <= 20; i += 2) { Console.WriteLine(i); } } } }

Huom

i += 2 on lyhyempi tapa kirjoittaa i = i + 2. Tämä syntaksi toimii myös muiden operaattoreiden kanssa, esimerkiksi i -= 2, i *= 2, i /= 2, i %= 2 jne.

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

main.cs

copy
1234567891011121314
using 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 aiemmalla menetelmällä, mutta tässä tapauksessa meidän tarvitsee vain muuttaa ehtoa muotoon i <= 27:

main.cs

main.cs

copy
1234567891011121314
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 27; i++) { Console.WriteLine(i * 2); } } } }
question mark

Mikä on seuraavan ohjelman tuloste? Muuttujan sum arvo kasvaa jokaisella iteraatiolla arvolla i, joten sen arvot neljän ensimmäisen iteraation aikana ovat: 1, 3, 6, 10.

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 1

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Awesome!

Completion rate improved to 1.59

bookFor-silmukka

Pyyhkäise näyttääksesi valikon

Silmukka mahdollistaa koodin suorittamisen niin monta kertaa kuin haluamme. Silmukoita on erilaisia. C#:ssa, jos haluamme suorittaa koodin tietyn määrän kertoja, käytämme for loop.

For-silmukan malli (syntaksi) on seuraava:

for(initiation; condition; operation) { 
    // code to execute
}


Tarkastellaan esimerkkiä, jossa käytämme tätä syntaksia:

main.cs

main.cs

copy
123456789101112131415
using 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"); } } } }

Huom

i++ on sama kuin i = i + 1. Se kasvattaa muuttujan arvoa yhdellä 1. Vastaavasti i-- pienentää arvoa yhdellä 1.

  • int i = 0 on alustusosa. Alustus tapahtuu, kun silmukka alkaa. Silmukan alussa luodaan uusi väliaikainen muuttuja nimeltä i ja alustetaan arvolla 0.
  • i < 10 on ehto. Ehto tarkistetaan jokaisella silmukan kierroksella (toistolla). Silmukka jatkaa sisäisen koodilohkon suorittamista niin kauan kuin ehto on tosi.
  • i++ on operaatio, joka suoritetaan jokaisen kierroksen jälkeen. Operaatio on yleensä inkrementointi tai dekrementointi. Koska i arvoa kasvatetaan jokaisen kierroksen jälkeen, ehto i < 10 muuttuu 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ä saattaa muuttaa silmukan toimintaa.

Vaikka sitä ei suositella, voit määritellä silmukkamuuttujan silmukan ulkopuolella ja jättää initialization-osan tyhjäksi. Silmukka toimii silti, mutta sinun tulee olla varovainen, sillä tämä voi johtaa odottamattomiin tuloksiin, jos sitä ei käsitellä oikein.

main.cs

main.cs

copy
12345678910111213141516
using 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 lohkon loppuun. Silmukka toimii samalla tavalla kuin aiemmin, sillä muuttujaa i kasvatetaan edelleen jokaisen kierroksen jälkeen.

main.cs

main.cs

copy
1234567891011121314151617
using 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 normaalisti olisi. Tämä puolipiste on aina oltava paikallaan, riippumatta siitä, luodaanko silmukkamuuttuja vai ei.

Myös silmukkaehdon poistaminen on mahdollista, mutta tällöin silmukka jatkuu loputtomasti, ellei sitä päätetä manuaalisesti (tähän palaamme tarkemmin myöhemmissä luvuissa).

main.cs

main.cs

copy
1234567891011121314151617
using 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"); } } } }

Huomio

Pidimme silmukan syntaksissa edelleen molemmat puolipisteet for(;;), nämä ovat välttämättömiä, muuten kääntäjä antaa virheilmoituksia.

Koska i:n arvo muuttuu jokaisella iteraatiolla, voimme hyödyntää sitä. Ymmärtääksemme tämän tarkastellaan yksinkertaista ohjelmaa, joka tulostaa i:n arvon jokaisella iteraatiolla:

main.cs

main.cs

copy
123456789101112131415
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 0; i < 10; i++) { Console.WriteLine(i); } } } }

Huomaa, että silmukka päättyy arvoon 9, koska se alkaa numerosta 0. Iteraatioiden kokonaismäärä oli kymmenen. Voimme muokata alustus-, ehto- ja operaatio-osia 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. Parilliset luvut sisältävät myös luvun 0, mutta käsittelemme näissä esimerkeissä vain lukuja, jotka ovat suurempia kuin 0.

main.cs

main.cs

copy
123456789101112131415
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 2; i <= 20; i += 2) { Console.WriteLine(i); } } } }

Huom

i += 2 on lyhyempi tapa kirjoittaa i = i + 2. Tämä syntaksi toimii myös muiden operaattoreiden kanssa, esimerkiksi i -= 2, i *= 2, i /= 2, i %= 2 jne.

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

main.cs

copy
1234567891011121314
using 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 aiemmalla menetelmällä, mutta tässä tapauksessa meidän tarvitsee vain muuttaa ehtoa muotoon i <= 27:

main.cs

main.cs

copy
1234567891011121314
using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 27; i++) { Console.WriteLine(i * 2); } } } }
question mark

Mikä on seuraavan ohjelman tuloste? Muuttujan sum arvo kasvaa jokaisella iteraatiolla arvolla i, joten sen arvot neljän ensimmäisen iteraation aikana ovat: 1, 3, 6, 10.

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 1
some-alt