Dela via


C#- if instruktioner och -loopar – självstudie om villkorsstyrd logik

I den här självstudien lär du dig hur du skriver C#-kod som undersöker variabler och ändrar körningssökvägen baserat på dessa variabler. Du skriver C#-kod och ser resultatet av kompilering och körning av den. Självstudien innehåller en serie lektioner som utforskar förgrenings- och loopkonstruktioner i C#. Under serien får du lära dig grunderna i språket C#.

Tips

Om du vill klistra in ett kodfragment i fokusläget bör du använda kortkommandot (Ctrl + v eller cmd + v).

Förutsättningar

Självstudien förväntar sig att du har en dator konfigurerad för lokal utveckling. Se Konfigurera din lokala miljö för installationsinstruktioner och en översikt över programutveckling i .NET.

Om du föredrar att köra koden utan att behöva konfigurera en lokal miljö kan du läsa den interaktiva webbläsarversionen av den här självstudien.

Fatta beslut med instruktionen if

Skapa en katalog med namnet branch-tutorial. Gör det till den aktuella katalogen och kör följande kommando:

dotnet new console -n BranchesAndLoops -o .

Viktigt

C#-mallarna för .NET 6 använder toppnivåinstruktioner. Ditt program kanske inte matchar koden i den här artikeln om du redan har uppgraderat till .NET 6. Mer information finns i artikeln om nya C#-mallar som genererar instruktioner på toppnivå

.NET 6 SDK lägger också till en uppsättning implicitaglobal using direktiv för projekt som använder följande SDK:er:

  • Microsoft.NET.Sdk
  • Microsoft.NET.Sdk.Web
  • Microsoft.NET.Sdk.Worker

Dessa implicita global using direktiv innehåller de vanligaste namnrymderna för projekttypen.

Mer information finns i artikeln om implicit användning av direktiv

Det här kommandot skapar ett nytt .NET-konsolprogram i den aktuella katalogen. Öppna Program.cs i favoritredigeraren och ersätt innehållet med följande kod:

int a = 5;
int b = 6;
if (a + b > 10)
    Console.WriteLine("The answer is greater than 10.");

Prova den här koden genom att dotnet run skriva i konsolfönstret. Du bör se meddelandet "Svaret är större än 10." skrivs ut till konsolen. Ändra deklarationen av b så att summan är mindre än 10:

int b = 3;

Skriv dotnet run igen. Eftersom svaret är mindre än 10 skrivs ingenting ut. Villkoret du testar är falskt. Du har ingen kod att köra eftersom du bara har skrivit en av de möjliga grenarna för en if-instruktion: grenen om villkoret är sant.

Tips

När du utforskar C# (eller något annat språk) och skriver kod kommer du att göra misstag. Kompilatorn hittar och rapporterar felen. Titta närmare på felutdata och koden som genererade felet. Kompilatorfelet kan vanligtvis hjälpa dig att hitta problemet.

Det här första exemplet visar kraften if hos och booleska typer. Ett booleskt värde är en variabel som kan ha ett av två värden: true eller false. C# definierar en särskild typ för bool booleska variabler. Instruktionen if kontrollerar värdet hos en bool. När värdet är true körs instruktionen som följer efter if. Annars hoppas den över. Den här processen för att kontrollera villkor och köra instruktioner baserat på dessa villkor är kraftfull.

Få if och else att fungera tillsammans

Om du vill köra olika kod i true- och false-grenarna skapar du en else-gren som körs när villkoret du testar är falskt. Prova en else gren. Lägg till de två sista raderna i koden nedan (du bör redan ha de fyra första):

int a = 5;
int b = 3;
if (a + b > 10)
    Console.WriteLine("The answer is greater than 10");
else
    Console.WriteLine("The answer is not greater than 10");

Instruktionen efter nyckelordet else körs bara när villkoret som testas har värdet false. Att kombinera if och else med booleska villkor ger all den kraft du behöver för att hantera både ett true och ett false villkor.

Viktigt

Indraget under instruktionerna if och else gör koden enklare att läsa för människor. C#-språket behandlar inte indrag eller blanksteg som betydande. Instruktionen efter nyckelorden if och else körs baserat på villkoret. Alla exempel i den här självstudien följer en vanlig metod för att dra in rader baserat på kontrollflödet för instruktioner.

Eftersom indrag inte är betydande måste du använda { och } ange när du vill att fler än en -instruktion ska ingå i blocket som körs villkorsstyrt. C#-programmerare använder normalt sådana klamrar för alla if- och else-satser. Följande exempel är detsamma som det du skapade. Ändra koden ovan så att den matchar följande kod:

int a = 5;
int b = 3;
if (a + b > 10)
{
    Console.WriteLine("The answer is greater than 10");
}
else
{
    Console.WriteLine("The answer is not greater than 10");
}

Tips

I resten av den här självstudien innehåller kodexemplen alla klammerparenteser, enligt godkända metoder.

Du kan testa mer komplicerade villkor. Lägg till följande kod efter den kod som du har skrivit hittills:

int c = 4;
if ((a + b + c > 10) && (a == b))
{
    Console.WriteLine("The answer is greater than 10");
    Console.WriteLine("And the first number is equal to the second");
}
else
{
    Console.WriteLine("The answer is not greater than 10");
    Console.WriteLine("Or the first number is not equal to the second");
}

Symbolen == testar likhet. Med används == skiljer testet för likhet från tilldelning, som du såg i a = 5.

&& representerar ”och”. Det innebär att båda villkoren måste vara sanna om instruktionen i true-grenen ska köras. I de här exemplen ser du även att du kan ha flera instruktioner i varje villkorad gren, förutsatt att du sätter dem inom { och }. Du kan också använda || för att representera "eller". Lägg till följande kod efter det du har skrivit hittills:

if ((a + b + c > 10) || (a == b))
{
    Console.WriteLine("The answer is greater than 10");
    Console.WriteLine("Or the first number is equal to the second");
}
else
{
    Console.WriteLine("The answer is not greater than 10");
    Console.WriteLine("And the first number is not equal to the second");
}

Ändra värdena aför , boch c och växla mellan && och || för att utforska. Du får mer förståelse för hur operatorerna && och || fungerar.

Du har slutfört det första steget. Innan du börjar nästa avsnitt ska vi flytta den aktuella koden till en separat metod. Det gör det enklare att börja arbeta med ett nytt exempel. Placera den befintliga koden i en metod som heter ExploreIf(). Anropa det överst i programmet. När du har slutfört ändringarna bör koden se ut så här:

ExploreIf();

void ExploreIf()
{
    int a = 5;
    int b = 3;
    if (a + b > 10)
    {
        Console.WriteLine("The answer is greater than 10");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
    }

    int c = 4;
    if ((a + b + c > 10) && (a > b))
    {
        Console.WriteLine("The answer is greater than 10");
        Console.WriteLine("And the first number is greater than the second");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
        Console.WriteLine("Or the first number is not greater than the second");
    }

    if ((a + b + c > 10) || (a > b))
    {
        Console.WriteLine("The answer is greater than 10");
        Console.WriteLine("Or the first number is greater than the second");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
        Console.WriteLine("And the first number is not greater than the second");
    }
}

Kommentera ut anropet till ExploreIf(). Det gör utdata mindre röriga när du arbetar i det här avsnittet:

//ExploreIf();

Startar // en kommentar i C#. Kommentarer är all text som du vill behålla i källkoden, men som inte körs som kod. Kompilatorn genererar ingen körbar kod från kommentarer.

Använda slingor till att upprepa åtgärder

I det här avsnittet använder du loopar för att upprepa instruktioner. Lägg till den här koden efter anropet till ExploreIf:

int counter = 0;
while (counter < 10)
{
    Console.WriteLine($"Hello World! The counter is {counter}");
    counter++;
}

-instruktionen while kontrollerar ett villkor och kör instruktionen eller instruktionsblocket whileefter . Den kontrollerar villkoret upprepade gånger och kör dessa instruktioner tills villkoret är falskt.

En annan ny operator används i det här exemplet. ++ efter variabeln counter är en ökande operator. Den lägger till 1 i värdet counter för och lagrar värdet i variabeln counter .

Viktigt

Kontrollera att loopvillkoret while ändras till false när du kör koden. Annars skapar du en oändlig slinga där körningen av programmet aldrig slutar. Det visas inte i det här exemplet eftersom du måste tvinga programmet att sluta med CTRL-C eller på annat sätt.

I slingan while utvärderas villkoret innan koden efter while körs. I slingan do ... while körs koden först, och därefter utvärderas villkoret. Do While-loopen visas i följande kod:

int counter = 0;
do
{
    Console.WriteLine($"Hello World! The counter is {counter}");
    counter++;
} while (counter < 10);

Den här do loopen och den tidigare while loopen genererar samma utdata.

Arbeta med slingan for

for-loopen används ofta i C#. Testa den här koden:

for (int index = 0; index < 10; index++)
{
    Console.WriteLine($"Hello World! The index is {index}");
}

Föregående kod utför samma arbete som loopen while och loopen do som du redan har använt. Instruktionen for har tre delar som styr funktionen.

Den första delen är for initializer: int index = 0; deklarerar som index är loopvariabeln och anger dess ursprungliga värde till 0.

Den mellersta delen är for-villkoret: index < 10 deklarerar att den här for loopen fortsätter att köras så länge värdet för räknaren är mindre än 10.

Den sista delen är for iterator: index++ anger hur du ändrar loopvariabeln efter att blocket har körts efter -instruktionen for . Här anges att index ska ökas med 1 varje gång blocket körs.

Experimentera själv. Prova var och en av följande varianter:

  • Ändra initieraren till något annat värde.
  • Ändra villkoret så att körningen stoppas vid ett annat värde.

När du är färdig går vi vidare så att du får skriva egen kod och använda det du lärt dig.

Det finns en annan looping-instruktion som inte beskrivs i den här självstudien: -instruktionen foreach . -instruktionen foreach upprepar instruktionen för varje objekt i en sekvens med objekt. Den används oftast med samlingar, så den beskrivs i nästa självstudie.

Skapade kapslade loopar

En while- , do- eller for -loop kan kapslas i en annan loop för att skapa en matris med hjälp av kombinationen av varje objekt i den yttre loopen med varje objekt i den inre loopen. Vi gör det för att skapa en uppsättning alfanumeriska par som representerar rader och kolumner.

En for loop kan generera raderna:

for (int row = 1; row < 11; row++)
{
    Console.WriteLine($"The row is {row}");
}

En annan loop kan generera kolumnerna:

for (char column = 'a'; column < 'k'; column++)
{
    Console.WriteLine($"The column is {column}");
}

Du kan kapsla en loop i den andra för att bilda par:

for (int row = 1; row < 11; row++)
{
    for (char column = 'a'; column < 'k'; column++)
    {
        Console.WriteLine($"The cell is ({row}, {column})");
    }
}

Du kan se att den yttre loopen ökar en gång för varje fullständig körning av den inre loopen. Ångra rad- och kolumnkapslingen och se ändringarna själv. När du är klar placerar du koden från det här avsnittet i en metod med namnet ExploreLoops().

Kombinera grenar och slingor

Nu när du har sett instruktionen if och olika slingor i språket C# ska vi se om du kan skriva C#-kod som hittar summan av alla heltal mellan 1 och 20 som är delbara med 3. Här är några tips:

  • Operatorn % ger dig resten vid en division.
  • Du kan använda instruktionen if till att se om ett tal ska ingå i summan.
  • Du kan använda slingan for till att upprepa en serie steg för alla tal mellan 1 och 20.

Testa själv. Kontrollera sedan resultatet. Du borde få 63 för ett svar. Du kan se ett möjligt svar genom att visa den färdiga koden på GitHub.

Du har slutfört självstudien "grenar och loopar".

Du kan fortsätta med självstudien Matriser och samlingar i din egen utvecklingsmiljö.

Du kan lära dig mer om dessa begrepp i följande artiklar: