Bài tập - Tạo lô-gic quyết định lồng nếu, nếu và khác

Hoàn thành

Trong đơn vị trước đó, bạn sử dụng nhiều if câu lệnh để thực thi các quy tắc của một trò chơi. Tuy nhiên, ở cuối đơn vị, if bạn nhận thấy rằng cần nhiều câu biểu cảm hơn để khắc phục một lỗi tinh tế trong mã của bạn.

Trong bài tập này, bạn sẽ sử ifdụng , và elseelse ifcác câu lệnh để cải thiện các tùy chọn phân nhánh trong mã của mình và khắc phục lỗi logic.

Sử dụng câu lệnh if và else thay vì hai câu lệnh if riêng biệt

Thay vì thực hiện hai kiểm tra để hiển thị thông báo "Bạn thắng!" hoặc "Rất tiếc, bạn thua", bạn sẽ sử dụng từ else khóa.

  1. Đảm bảo rằng mã Program.cs khớp với các mục sau:

    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.");
    }
    
    

    Đây là mã mà bạn đã hoàn thành trong đơn vị trước đó.

  2. Dành một phút để kiểm tra if hai câu lệnh ở cuối tệp:

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

    Lưu ý rằng cả hai if câu lệnh đều so total sánh với cùng một giá trị số. Đây là cơ hội hoàn hảo để sử dụng một tuyên else bố.

  3. Cập nhật hai if câu như sau:

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

    Ở đây, nếu total >= 15 là false thì khối mã theo sau từ khóa sẽ else thực thi. Vì hai kết quả này là những đối lập liên quan, đây là một kịch bản hoàn hảo cho từ else khóa.

  4. Tệp cập Program.cs của bạn phải chứa mã sau:

    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.");
    }
    
    

Sửa đổi mã để loại bỏ tiền thưởng xếp chồng cho bộ ba và đôi bằng cách sử dụng lồng

Trong đơn vị trước, bạn thấy rằng một lỗi logic tinh tế đã được đưa vào ứng dụng của bạn. Bạn có thể khắc phục sự cố đó bằng cách lồng các bản sao if kê của mình.

Lồng cho phép bạn đặt các khối mã bên trong các khối mã. Trong trường hợp này, ifelse bạn sẽ lồng một và tổ hợp (kiểm tra các số kép) if bên trong một câu lệnh khác (kiểm tra bộ ba) để ngăn không cho cả hai phần thưởng được thưởng.

  1. Sửa đổi mã của bạn để khớp với danh sách mã sau đây:

    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. Dành một phút để xem lại các câu lệnh lồng if nhau.

    if-else Mục tiêu là để tạo ra một cấu trúc bên trong, nơi hai kết quả là những đối lập liên quan, và sau đó sử dụng kết quả đối lập (if/true và else/false) để tặng điểm thưởng cho bộ ba và kép. Để đạt được mục tiêu này, bạn kiểm tra cho đôi trong câu lệnh bên if ngoài, và sau đó cho bộ ba trong câu lệnh bên if trong. Mẫu này đảm bảo rằng khi kiểm tra bên trong cho bộ ba trả về false, khối else mã của bạn có thể trao điểm cho tăng gấp đôi.

    Sắp tới, bạn sẽ "cứng mã" kết quả của ba cuộn của bạn để kiểm tra logic mã của bạn.

  3. Tạo dòng mã trống ở phía trên dòng nơi khai total báo và khởi tạo.

  4. Để kiểm tra một cuộn đôi, hãy nhập mã sau đây:

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

    Mã hóa cứng ba biến roll cho phép bạn kiểm tra mã mà không cần phải chạy ứng dụng hàng chục lần.

  5. Trên menu Tệp Mã Visual Studio, bấm Lưu.

  6. Trong dạng xem EXPLORER, để mở Một Thiết bị đầu cuối tại vị trí thư mục TestProject của bạn, hãy bấm chuột phải vào TestProject, rồi chọn Mở trong Đầu cuối Tích hợp.

    Một bảng điều khiển đầu cuối nên mở ra, và nên bao gồm một dấu nhắc lệnh cho thấy rằng thiết bị đầu cuối được mở vào vị trí thư mục TestProject của bạn.

  7. Tại dấu nhắc lệnh Thiết bị đầu cuối, để chạy mã của bạn, hãy dotnet chạy rồi nhấn Enter.

    Khi mã của bạn chạy, bạn sẽ thấy:

    Dice roll: 6 + 6 + 5 = 17
    You rolled doubles!  +2 bonus to total!
    You win!
    
    
  8. Để kiểm tra một cuộn bộ ba, hãy cập nhật các biến cuộn mã hóa cứng của bạn như sau:

    roll1 = 6;
    roll2 = 6;
    roll3 = 6;
    
  9. Trên menu Tệp Mã Visual Studio, bấm Lưu.

  10. Trong dạng xem EXPLORER, để mở Một Thiết bị đầu cuối tại vị trí thư mục TestProject của bạn, hãy bấm chuột phải vào TestProject, rồi chọn Mở trong Đầu cuối Tích hợp.

  11. Tại dấu nhắc lệnh Thiết bị đầu cuối, để chạy mã của bạn, hãy dotnet chạy rồi nhấn Enter.

    Khi mã của bạn chạy, bạn sẽ thấy:

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

Sử dụng if, else và else nếu câu lệnh trao giải thưởng thay vì tin nhắn thắng

Để làm cho trò chơi thú vị hơn, bạn có thể thay đổi các trò chơi từ "win-or-lose" để trao giải thưởng hư cấu cho mỗi điểm số. Bạn có thể đưa ra bốn giải thưởng. Tuy nhiên, người chơi chỉ nên giành một giải thưởng:

  • Nếu người chơi ghi bàn lớn hơn hoặc bằng 16, họ sẽ giành chiến thắng một chiếc xe mới.
  • Nếu người chơi ghi bàn lớn hơn hoặc bằng 10, họ sẽ giành chiến thắng một máy tính xách tay mới.
  • Nếu người chơi ghi chính xác 7 điểm, họ sẽ giành chiến thắng trong một chuyến đi.
  • Nếu không, người chơi thắng một chú mèo con.
  1. Sửa đổi mã từ các bước trước đó thành danh sách mã sau đây:

    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. Dành một phút để xem lại cấu trúc đã cập if-elseif-else nhật.

    , ifelse ifcâu lệnh cho else phép bạn tạo nhiều điều kiện độc quyền dưới dạng biểu thức Boolean. Nói cách khác, khi bạn chỉ muốn một kết quả để xảy ra, nhưng bạn có một số điều kiện và kết quả có thể, sử dụng như nhiều else if câu lệnh như bạn muốn. Nếu không có câu lệnh ifelse if nào được áp dụng, khối else mã cuối cùng sẽ được thực thi. Tùy else chọn này là tùy chọn, nhưng nó phải đến cuối cùng nếu bạn chọn bao gồm nó.

  3. Sử dụng kỹ thuật mã hóa tạm thời khó các biến roll để kiểm tra mỗi thư.

Tóm tắt

  • Kết hợp các câu if lệnh else và cho phép bạn kiểm tra một điều kiện, rồi thực hiện một trong hai kết quả. Khối mã cho biểu if thức sẽ được chạy khi biểu thức Boolean truelà , else và khối mã cho biểu thức sẽ được chạy khi biểu thức Boolean là false.
  • Bạn có thể lồng if các câu lệnh để thu hẹp một điều kiện khả thi. Tuy nhiên, thay vào đó, bạn nên cân ifnhắc sử dụng else if , elsevà các câu lệnh.
  • Sử dụng else if câu lệnh để tạo nhiều điều kiện dành riêng.
  • Tùy else chọn là tùy chọn, nhưng nó phải luôn đến cuối cùng khi được bao gồm.