While Loopar

While-loopar är som den envisaste personen du känner - de fortsätter bara tills de får som de vill! 😤

🎯 Efter denna artikel kommer du att:

  • Förstå while-loop logiken - “så länge detta är sant, fortsätt!” 🔄
  • Skriva säkra while-loopar - ingen evig loop-helvete! 🚫∞
  • Använda while praktiskt - input validation, menyer, spel-loopar 🎮
  • Debugga while-problem - när loops går snett 🐛

🔄 While Loop Syntax

Basic Structure


while (villkor)
{
    // Kod som körs så länge villkor är sant
    // VIKTIGT: Något måste ändra villkoret!
}

Anatomin av en While Loop


int count = 0;           // 1. Initialization (före loopen)
while (count < 5)        // 2. Condition (kollas före varje iteration)
{
    Console.WriteLine($"Count: {count}");  // 3. Loop body
    count++;             // 4. Update (MYCKET VIKTIGT!)
}

Memory trick: I-C-U = Initialization, Condition, Update! 🎯

⚠️ While Loop Gotchas (Vanliga Fällor)

💀 INFINITE LOOP - Dödens Loop!


// ❌ ALDRIG gör såhär:
int x = 0;
while (x < 10)
{
    Console.WriteLine(x);
    // x++ saknas - EVIG LOOP!
}

// ✅ Rätt sätt:
int x = 0;
while (x < 10)
{
    Console.WriteLine(x);
    x++;  // Glöm inte uppdatera!
}

Tecken på evig loop: Programmet “hänger sig” och skriver ut samma sak för evigt! 😵

🐛 Off-by-One Errors


// ❌ Fel: Skriver 0-10 (11 iterationer)
int i = 0;
while (i <= 10)  // <= istället för <
{
    Console.WriteLine(i);
    i++;
}

// ✅ Rätt: Skriver 0-9 (10 iterationer)
int i = 0;
while (i < 10)   // < ger korrekt antal
{
    Console.WriteLine(i);
    i++;
}

🚫 Never-Executes Loop


// Loop som aldrig körs:
int score = 10;
while (score < 5)  // score är redan 10, så villkor är falskt från början
{
    Console.WriteLine("Detta körs aldrig!");
}

🎯 Hands-On Övning: Bygg en Calculator


using System;

class CalculatorProgram
{
    static void Main()
    {
        Console.WriteLine("🧮 Enkel Kalkylator");
        Console.WriteLine("Kommandon: +, -, *, /, exit");

        string command = "";
        while (command.ToLower() != "exit")
        {
            Console.Write("\nVälj operation (+, -, *, /, exit): ");
            command = Console.ReadLine();

            if (command == "exit")
            {
                Console.WriteLine("👋 Hej då!");
                break;  // Alternativt sätt att avsluta loop
            }

            if (command == "+" || command == "-" || command == "*" || command == "/")
            {
                Console.Write("Första talet: ");
                double num1 = double.Parse(Console.ReadLine());

                Console.Write("Andra talet: ");
                double num2 = double.Parse(Console.ReadLine());

                double result = command switch
                {
                    "+" => num1 + num2,
                    "-" => num1 - num2,
                    "*" => num1 * num2,
                    "/" => num2 != 0 ? num1 / num2 : 0,
                    _ => 0
                };

                if (command == "/" && num2 == 0)
                {
                    Console.WriteLine("❌ Division med noll!");
                }
                else
                {
                    Console.WriteLine($"✅ Resultat: {num1} {command} {num2} = {result}");
                }
            }
            else
            {
                Console.WriteLine("❌ Ogiltigt kommando!");
            }
        }
    }
}

🎯 Debugging While Loops

🔍 Debug Strategies


int counter = 0;
int debugCount = 0;  // Debug counter för säkerhet

while (someComplexCondition())
{
    debugCount++;
    if (debugCount > 1000)  // Safety net!
    {
        Console.WriteLine("⚠️ Möjlig evig loop detekterad!");
        break;
    }

    // Din loop-kod här
    Console.WriteLine($"Debug: Iteration {debugCount}, counter = {counter}");
}

📊 Common Debug Info


while (condition)
{
    Console.WriteLine($"🔍 Loop start: condition = {condition}");

    // Loop body

    Console.WriteLine($"🔍 Loop end: updated condition = {condition}");
}

🎯 Checkpoint: While Loop Mastery

Kan du:

  • Förklara skillnaden mellan while och for loops
  • Skriva en while loop som inte blir evig
  • Använda while för input validation
  • Debugga en problematisk while loop
  • Förklara när while är bättre än for

Test dig själv: Skriv en while loop som frågar användaren efter tal tills de skriver “stop”, och räknar ut summan av alla tal.


💡 Marcus While Wisdom

“While loops är som att vara på gymmet - du fortsätter tills du når ditt mål. Men glöm inte att räkna repetitionerna, annars blir det evig träning utan resultat!” 💪

Real story: Första gången jag skrev en while loop (år 1997) skapade jag en evig loop som crashade hela datorsalen. Nu är jag expert på att undvika dem - genom att alltid dubbelkolla att något förändras i loopen! 😅

Pro tip: If i tveksam om loop-condition, sätt in Console.WriteLine statements för att se vad som händer. Better safe than infinite! 🛡️


Upp

Upp


Licens: Apache 2.0 | © 2023 Marcus Medina, Campus Mölndal. Alla rättigheter förbehållna.
Du får använda och modifiera detta verk enligt villkoren i Apache License, Version 2.0. Du får inte använda detta verk för kommersiella ändamål utan tillstånd från upphovsmannen.