gpt4 book ai didi

c# - 我如何使声明遵循与以前相同的 "if"规则

转载 作者:行者123 更新时间:2023-11-30 14:21:33 28 4
gpt4 key购买 nike

我正在尝试编写一个小测验,我希望“再试一次”按钮遵循与“else”之前的“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 block 中的 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 并返回一个 bool)。

这样,您可以创建一个验证方法并将其(连同用户提示)传递给从用户那里获取整数的方法。

请注意,我们正在使用 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;
});

关于c# - 我如何使声明遵循与以前相同的 "if"规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54581697/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com