加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:28:35 所属栏目:百科 来源:网络整理
导读:我正在尝试编写一个迷你测验,我希望“再试一次”按钮遵循与“其他”之前的“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
我正在尝试编写一个迷你测验,我希望“再试一次”按钮遵循与“其他”之前的“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;
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读