当前位置 : 主页 > 编程语言 > c语言 >

c# – 如何使声明遵循与以前相同的“if”规则

来源:互联网 收集:自由互联 发布时间:2021-06-25
我正在尝试编写一个迷你测验,我希望“再试一次”按钮遵循与“其他”之前的“if”语句相同的规则 using System;public class Program{ public static void Main() { int x; x = int.Parse(Console.ReadLine()); Co
我正在尝试编写一个迷你测验,我希望“再试一次”按钮遵循与“其他”之前的“if”语句相同的规则

using System;

public class Program
{
    public static void Main()
    {
        int x;
        x = int.Parse(Console.ReadLine());
        Console.WriteLine("Find a number that can be divided by both 7 and 12");
        if ((x % 7 == 0) && (x % 12 == 0))
        {
            Console.WriteLine("well done, " +x+ " can be divided by 7 and 12");
        }
        else
        {
            Console.WriteLine("Wrong, try again.");
            Console.ReadLine();
        }
    }
}

我希望else语句之后的ReadLine遵循与之前的“if”语句相同的规则,但它需要一个全新的语句,并且复制粘贴语句似乎是一个低效的解决方案.

通常,这种处理是在while循环中完成的,循环继续循环直到用户正确回答.因此关键是创建一个条件,当有正确答案时,该条件将变为false.

请注意,我们还将x变量重新分配给else块中的Console.ReadLine()方法,否则我们总是比较x的旧值,循环永远不会结束.

例如:

bool answeredCorrectly = false;

while (!answeredCorrectly)
{
    if ((x % 7 == 0) && (x % 12 == 0))
    {
        Console.WriteLine("well done, " + x + " can be divided by 7 and 12");
        answeredCorrectly = true; // This will have us exit the while loop
    }
    else
    {
        Console.WriteLine("Wrong, try again.");
        x = int.Parse(Console.ReadLine());
    }
}

如果你想对它真的很棘手,你可以编写一个方法来获取用户的整数,并且它接受可用于验证输入是否正确的函数(任何接受int的方法并返回一个布尔).

这样,您可以创建验证方法并将其(以及用户的提示)传递给从用户获取整数的方法.

请注意,我们使用int.TryParse方法尝试从字符串输入中获取整数.这个方法非常方便,因为它做了两件事:首先,如果解析成功则返回true,第二,它返回out参数中的int值.这样我们就可以使用返回值来确保它们输入一个数字,我们可以使用输出参数来查看数字是否符合我们的条件:

private static int GetIntFromUser(string prompt, Func<int, bool> validator = null)
{
    int result = 0;
    bool answeredCorrectly = false;

    while (!answeredCorrectly)
    {
        // Show message to user
        Console.Write(prompt);

        // Set to true only if int.TryParse succeeds and the validator returns true
        answeredCorrectly = int.TryParse(Console.ReadLine(), out result) &&
                            (validator == null || validator.Invoke(result));

        if (!answeredCorrectly) Console.WriteLine("Incorrect, please try again");
    }

    return result;
}

有了这个方法,我们现在可以随意使用我们的main方法调用它,无论我们喜欢什么样的验证,我们不需要每次都重写所有的循环代码:

int x = GetIntFromUser("Enter a number that can be divided by both 7 and 12: ",
    i => i % 7 == 0 && i % 12 == 0);

x = GetIntFromUser("Enter a negative number: ", i => i < 0);

x = GetIntFromUser("Enter a number between 10 and 20: ", i => i > 10 && i < 20);

您甚至可以使用它来创建一个只需几行代码的数字猜谜游戏!

int randomNumber = new Random().Next(1, 101);

int x = GetIntFromUser("I'm thinking of a number from 1 to 100. Try to guess it: ", i =>
{
    Console.WriteLine(i < randomNumber
        ? $"{i} is too low - guess a larger number."
        : i > randomNumber ? $"{i} is too high - guess a smaller number." : "Correct!");
    return i == randomNumber;
});
网友评论