แบบฝึกหัด - สร้างตรรกะการตัดสินใจที่ซ้อนกันด้วยถ้า และอื่น ๆ

เสร็จสมบูรณ์เมื่อ

ในหน่วยก่อนหน้า คุณใช้คําสั่งหลาย if รายการเพื่อใช้กฎของเกม อย่างไรก็ตาม ในตอนท้ายของหน่วย คุณสังเกตเห็นว่าจําเป็นต้องมีคําสั่งที่แสดงออก if มากขึ้นในการแก้ไขบักที่ละเอียดอ่อนในโค้ดของคุณ

ในแบบฝึกหัดนี้ คุณจะใช้ ifคําสั่ง , elseและ else if เพื่อปรับปรุงตัวเลือกการโยงสาขาในโค้ดของคุณและแก้ไขบักเชิงตรรกะ

ใช้คําสั่ง if และ else แทนคําสั่งแยกต่างหากสองคําสั่งถ้า

แทนที่จะดําเนินการตรวจสอบสองรายการเพื่อแสดงข้อความ "คุณชนะ!" หรือ "ขออภัย คุณแพ้" คุณจะใช้ else คําสําคัญนี้

  1. ตรวจสอบให้แน่ใจว่าโค้ด Program.cs ของคุณตรงกับรายการต่อไปนี้:

    Random dice = new Random();
    
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    
    int total = roll1 + roll2 + roll3;
    
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    
    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
    {
        Console.WriteLine("You rolled doubles! +2 bonus to total!");
        total += 2;
    }
    
    if ((roll1 == roll2) && (roll2 == roll3)) 
    {
        Console.WriteLine("You rolled triples! +6 bonus to total!");
        total += 6;
    }
    
    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    
    if (total < 15)
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    

    นี่คือรหัสที่คุณดําเนินการให้เสร็จสิ้นในหน่วยก่อนหน้า

  2. ใช้เวลาสักครู่ในการตรวจสอบคําสั่งสอง if ฉบับที่ส่วนท้ายของไฟล์:

    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    
    if (total < 15)
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    

    โปรดสังเกตว่าคําสั่งทั้งสอง if เปรียบเทียบ total กับค่าตัวเลขเดียวกัน นี่เป็นโอกาสที่สมบูรณ์แบบที่จะใช้ else คําสั่ง

  3. อัปเดตคําสั่งสอง if รายการดังนี้:

    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    else 
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    

    ที่นี่หาก total >= 15 เป็นเท็จบล็อกรหัสที่ตามด้วย else คําสําคัญจะดําเนินการ เนื่องจากผลลัพธ์ทั้งสองจะตรงกันข้ามกัน นี่คือสถานการณ์ที่สมบูรณ์แบบสําหรับ else คําสําคัญ

  4. ไฟล์ Program.cs ที่อัปเดตแล้วของคุณควรมีโค้ดต่อไปนี้:

    Random dice = new Random();
    
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    
    int total = roll1 + roll2 + roll3;
    
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    
    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
    {
        Console.WriteLine("You rolled doubles!  +2 bonus to total!");
        total += 2;
    }
    
    if ((roll1 == roll2) && (roll2 == roll3))
    {
        Console.WriteLine("You rolled triples!  +6 bonus to total!");
        total += 6;
    }
    
    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    else 
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    

ปรับเปลี่ยนโค้ดเพื่อลบโบนัสการเรียงซ้อนสําหรับสองเท่าและสามเท่าโดยใช้การซ้อน

ในหน่วยก่อนหน้า คุณเห็นว่ามีการนําบักเชิงตรรกะที่ละเอียดอ่อนเข้ามาในแอปพลิเคชันของคุณ คุณสามารถแก้ไขปัญหานี้ได้โดยการซ้อนคําสั่งของคุณif

การซ้อนช่วยให้คุณสามารถวางบล็อกโค้ดภายในบล็อกโค้ดได้ ในกรณีนี้ คุณจะซ้อน if ชุดข้อมูลและ else (ตรวจสอบรายการซ้ํา) ภายในคําสั่งอื่น if (ตรวจสอบสามครั้ง) เพื่อป้องกันไม่ให้ได้รับรางวัลโบนัสทั้งสองรายการ

  1. ปรับเปลี่ยนโค้ดของคุณให้ตรงกับรายการโค้ดต่อไปนี้:

    Random dice = new Random();
    
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    
    int total = roll1 + roll2 + roll3;
    
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    
    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
    {
        if ((roll1 == roll2) && (roll2 == roll3))
        {
            Console.WriteLine("You rolled triples!  +6 bonus to total!");
            total += 6;
        }
        else
        {
            Console.WriteLine("You rolled doubles!  +2 bonus to total!");
            total += 2;
        }
    }
    
    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    else 
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    
  2. ใช้เวลาสักครู่ในการตรวจสอบคําสั่งที่ if ซ้อนกัน

    เป้าหมายคือเพื่อสร้างโครงสร้างภายใน if-else ที่ผลลัพธ์สองรายการตรงกันข้ามกัน จากนั้นใช้ผลลัพธ์ที่ตรงกันข้าม (หาก/ จริงและอื่น ๆ / เท็จ) เพื่อมอบคะแนนโบนัสสําหรับสามเท่าและสองเท่า เพื่อให้บรรลุเป้าหมายนี้ คุณต้องตรวจสอบค่าสองเท่าในคําสั่งภายนอก if จากนั้นจึงตรวจสอบสามในงบภายในif รูปแบบนี้ช่วยให้มั่นใจได้ว่าเมื่อการตรวจสอบภายในสําหรับส่งกลับ falseสามครั้ง บล็อกโค้ดของ else คุณสามารถให้คะแนนเป็นสองเท่า

    จะเกิดขึ้นคุณจะ "โค้ดที่ยาก" ผลลัพธ์ของสามม้วนของคุณเพื่อทดสอบตรรกะโค้ดของคุณ

  3. สร้างบรรทัดรหัสว่างเหนือบรรทัดที่มีการ total ประกาศและเตรียมใช้งาน

  4. หากต้องการทดสอบม้วนสองเท่า ให้ป้อนโค้ดต่อไปนี้:

    roll1 = 6;
    roll2 = 6;
    roll3 = 5;
    

    การเขียนโค้ดอย่างหนักตัวแปรสาม roll ตัวช่วยให้คุณสามารถทดสอบรหัสได้โดยไม่ต้องเรียกใช้แอปพลิเคชันหลายสิบครั้ง

  5. บนเมนู ไฟล์ของ Visual Studio Code ให้คลิก บันทึก

  6. ในมุมมอง EXPLORER เมื่อต้องการเปิดเทอร์มินัลที่ตําแหน่งที่ตั้งโฟลเดอร์ TestProject ของคุณ ให้คลิกขวาที่ TestProject จากนั้นเลือกเปิดในเทอร์มินัลรวม

    แผงเทอร์มินัลควรเปิดขึ้น และควรมีพร้อมท์คําสั่งที่แสดงว่าเทอร์มินัลเปิดอยู่ไปยังตําแหน่งที่ตั้งโฟลเดอร์ TestProject ของคุณ

  7. ที่พร้อมท์คําสั่งเทอร์มินัล เพื่อเรียกใช้โค้ดของคุณ ให้พิมพ์ dotnet run แล้วกด Enter

    เมื่อโค้ดของคุณทํางาน คุณควรเห็น:

    Dice roll: 6 + 6 + 5 = 17
    You rolled doubles!  +2 bonus to total!
    You win!
    
    
  8. หากต้องการทดสอบการใช้งานสามรายการ ให้อัปเดตตัวแปรม้วนที่เขียนโค้ดแบบตายตัวดังนี้:

    roll1 = 6;
    roll2 = 6;
    roll3 = 6;
    
  9. บนเมนู ไฟล์ของ Visual Studio Code ให้คลิก บันทึก

  10. ในมุมมอง EXPLORER เมื่อต้องการเปิดเทอร์มินัลที่ตําแหน่งที่ตั้งโฟลเดอร์ TestProject ของคุณ ให้คลิกขวาที่ TestProject จากนั้นเลือกเปิดในเทอร์มินัลรวม

  11. ที่พร้อมท์คําสั่งเทอร์มินัล เพื่อเรียกใช้โค้ดของคุณ ให้พิมพ์ dotnet run แล้วกด Enter

    เมื่อโค้ดของคุณทํางาน คุณควรเห็น:

    Dice roll: 6 + 6 + 6 = 18
    You rolled triples!  +6 bonus to total!
    You win!
    
    

ใช้ หาก เป็นอย่างอื่น และอื่นถ้าข้อความแจ้งเพื่อมอบรางวัลแทนที่จะเป็นข้อความ win-lose

เพื่อทําให้เกมสนุกขึ้น คุณสามารถเปลี่ยนเกมจาก "ชนะหรือแพ้" เพื่อมอบรางวัลที่สมมุติขึ้นสําหรับแต่ละคะแนน คุณสามารถเสนอสี่รางวัล อย่างไรก็ตาม ผู้เล่นควรได้รับรางวัลเดียวเท่านั้น:

  • หากผู้เล่นมีคะแนนมากกว่าหรือเท่ากับ 16 พวกเขาจะได้รถคันใหม่
  • หากผู้เล่นให้คะแนนมากกว่าหรือเท่ากับ 10 พวกเขาจะชนะแล็ปท็อปเครื่องใหม่
  • ถ้าผู้เล่นได้คะแนน 7 พวกเขาจะชนะการเดินทาง
  • มิฉะนั้นผู้เล่นจะชนะลูกแมว
  1. ปรับเปลี่ยนโค้ดจากขั้นตอนก่อนหน้าเป็นรายการโค้ดต่อไปนี้:

    Random dice = new Random();
    
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    
    int total = roll1 + roll2 + roll3;
    
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    
    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
    {
        if ((roll1 == roll2) && (roll2 == roll3))
        {
            Console.WriteLine("You rolled triples!  +6 bonus to total!");
            total += 6;
        }
        else
        {
            Console.WriteLine("You rolled doubles!  +2 bonus to total!");
            total += 2;
        }
    
        Console.WriteLine($"Your total including the bonus: {total}");
    }
    
    if (total >= 16)
    {
        Console.WriteLine("You win a new car!");
    }
    else if (total >= 10)
    {
        Console.WriteLine("You win a new laptop!");
    }
    else if (total == 7)
    {
        Console.WriteLine("You win a trip for two!");
    }
    else
    {
        Console.WriteLine("You win a kitten!");
    }
    
    
  2. ใช้เวลาสักครู่เพื่อตรวจสอบโครงสร้างที่อัปเดต if-elseif-else แล้ว

    คําสั่ง if, else ifและ else ช่วยให้คุณสามารถสร้างเงื่อนไขพิเศษหลายเงื่อนไขเป็นนิพจน์บูลีนได้ กล่าวอีกนัยหนึ่งเมื่อคุณต้องการให้ผลลัพธ์หนึ่งเกิดขึ้นเท่านั้น แต่คุณมีเงื่อนไขและผลลัพธ์ที่เป็นไปได้หลายอย่างให้ใช้คําสั่งมาก else if เท่าที่คุณต้องการ ถ้าไม่มีคําสั่ง if และ else if จะถูกดําเนินการบล็อกโค้ดสุดท้ายelse elseเป็นทางเลือก แต่จะต้องมาล่าสุดถ้าคุณเลือกที่จะรวมเข้าไว้ด้วย

  3. ใช้เทคนิคการเขียนโค้ดอย่างหนักชั่วคราวสําหรับ roll ตัวแปรเพื่อทดสอบแต่ละข้อความ

สรุป

  • ชุดข้อมูลของ if คําสั่ง และ else ช่วยให้คุณสามารถทดสอบเงื่อนไขหนึ่งเงื่อนไข จากนั้นจึงดําเนินการหนึ่งในสองผลลัพธ์ บล็อกรหัสสําหรับ if จะเรียกใช้เมื่อนิพจน์บูลีนเป็น trueและบล็อกรหัสสําหรับ else จะเรียกใช้เมื่อนิพจน์บูลีนเป็นfalse
  • คุณสามารถซ้อน if คําสั่งเพื่อจํากัดเงื่อนไขที่เป็นไปได้ให้แคบลงได้ อย่างไรก็ตาม คุณควรพิจารณาใช้ ifคําสั่ง , else ifและ else แทน
  • ใช้ else if คําสั่งเพื่อสร้างเงื่อนไขเฉพาะหลายเงื่อนไข
  • เป็น else ทางเลือก แต่จะต้องมาล่าสุดเสมอเมื่อรวม