繁体   English   中英

如何在这段代码中用 do-while 替换 while?

[英]How to replace while with do-while in this code?

有没有什么简单的方法可以将“do”添加到这个程序中? 在我的作业中需要有一个“做”:)

namespace Uppgift_1___Gissa_talet
{
    class Program
    {
        static void Main(string[] args)
        {
            Random randomerare = new Random();
            int slump_tal = randomerare.Next(1, 101);

            Console.WriteLine("Minigame: Gissa talet!");
            Console.WriteLine();
            Console.WriteLine("Skriv in ett tal mellan 1 och 100:");

            string str = Console.ReadLine();
            int tal = Convert.ToInt32(str);
            while (tal != slump_tal)
            {
                if (tal < slump_tal) //Är det mindre?
                {
                    Console.WriteLine("Fel! Större!");//Säg då att det ska vara större
                }
                else if (tal > slump_tal)
                {
                    Console.WriteLine("Fel! Mindre!");
                }
                tal = Convert.ToInt32(Console.ReadLine());//Läs in nästa gissning

            }
            Console.WriteLine("Grattis! Du gissade rätt!");
            Console.WriteLine("Tryck på en tangent för att avsluta...");
            Console.ReadLine();
        }
    }
}
namespace Uppgift_1___Gissa_talet
{
    class Program
    {
        static void Main(string[] args)
        {
        Random randomerare = new Random();
        int slump_tal = randomerare.Next(1, 101);

        Console.WriteLine("Minigame: Gissa talet!");
        Console.WriteLine();
        Console.WriteLine("Skriv in ett tal mellan 1 och 100:");

        string str = Console.ReadLine();
        int tal = Convert.ToInt32(str);
        do //You start the loop before the test expression is checked
        {
            if (tal < slump_tal) //Är det mindre?
            {
                Console.WriteLine("Fel! Större!");//Säg då att det ska vara större
            }
            else if (tal > slump_tal)
            {
                Console.WriteLine("Fel! Mindre!");
            }
            tal = Convert.ToInt32(Console.ReadLine());//Läs in nästa gissning

        }while(tal != slump_tal); // The test expression is checked here.

        Console.WriteLine("Grattis! Du gissade rätt!");
        Console.WriteLine("Tryck på en tangent för att avsluta...");
        Console.ReadLine();
        }
       }
}

您所要做的就是将while移动到块的末尾(后跟一个分号)并在块的开头添加一个do

此外,这允许您将用户输入完全移动到循环内,而不是将其写入两次。 唯一的问题是tal必须在循环外定义,因为它用于while条件:

private static void Main(string[] args)
{
    int slump_tal = new Random().Next(1, 101);
    int tal;

    Console.WriteLine("Minigame: Gissa talet!\n");
    Console.WriteLine("Skriv in ett tal mellan 1 och 100:");

    do
    {
        tal = Convert.ToInt32(Console.ReadLine());

        if (tal < slump_tal)
        {
            Console.WriteLine("Fel! Större!");
        }
        else if (tal > slump_tal)
        {
            Console.WriteLine("Fel! Mindre!");
        }
    } while (tal != slump_tal);

    Console.WriteLine("Grattis! Du gissade rätt!");
    Console.WriteLine("Tryck på en tangent för att avsluta...");
    Console.ReadLine();

    GetKeyFromUser("\nDone! Press any key to exit...");
}

您可以进行的另一个改进是包含一个辅助方法,该方法验证用户输入实际上是一个数字,这样如果他们输入类似“2”而不是“2”的内容,您就不会抛出异常。 下面的方法接受一个“提示”字符串(用户的问题),并使用一个循环,其中条件使用int.TryParse来验证条目是一个整数,并继续循环直到它返回true ,然后返回用户输入的整数:

private static int GetIntFromUser(string prompt)
{
    int input;

    do
    {
        Console.Write(prompt);
    } while (!int.TryParse(Console.ReadLine(), out input));

    return input;
}

现在我们可以利用这个方法来获取用户输入:

private static void Main(string[] args)
{
    int slump_tal = new Random().Next(1, 101);
    int tal;
    var prompt = "Skriv in ett tal mellan 1 och 100: ";

    Console.WriteLine("Minigame: Gissa talet!\n");

    do
    {
        tal = GetIntFromUser(prompt);

        prompt = tal < slump_tal
            ? "Fel! Det numret är för litet. Försök igen: "
            : "Fel! Det numret är för stort. Försök igen: ";
    } while (tal != slump_tal);

    Console.WriteLine("Grattis! Du gissade rätt!");
    Console.WriteLine("Tryck på valfri tangent för att avsluta...");
    Console.ReadLine();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM