【问题标题】:How to Insert multiple conditions in while loop in如何在while循环中插入多个条件
【发布时间】:2019-11-20 18:25:27
【问题描述】:

我想在while循环中使用多个条件:

Console.WriteLine("Select an action to perform\n");
int n1 = Convert.ToInt32(Console.ReadLine());
do
{
    Console.WriteLine("Insert a valid method\n");
    n1 = Convert.ToInt32(Console.ReadLine());
}
while ((n1 == 1) || (n1 == 2));

Console.WriteLine(n1);
Console.ReadKey();

在这里我想检查value n1 是否等于 1 或 2。直到用户输入 n1 或 2 这应该循环。问题是,如果我只使用一个条件,我可以让它工作,但当有 2 个条件时不能让它工作。另外如何将这些值与另一个字符串相等?

例如:

while ((n1 == "one") || (n1 =="two"))

我认为 || (OR) operator 有一些我不理解的地方。我阅读了一些解决方案,但我无法弄清楚。

【问题讨论】:

  • 您的代码正在执行预期的操作。只要n1 等于1 或n2 等于2,它就会继续循环。如果您想在用户输入 1 或 2 后停止循环,那么您需要否定您的表达式。 n1 != 1 || n1 != 2!(n1 == 1 || n1 == 2)
  • 将你感兴趣的值放在HashSet before 循环中。然后使用Contains。这样,无论您要检查多少个值,您都可以进行一次 Contains 检查。
  • n1 != 1 || n1 != 2!(n1 == 1 || n1 == 2) 不等效。 n1 != 1 && n1 != 2!(n1 == 1 || n1 == 2)

标签: c# while-loop multiple-conditions


【解决方案1】:

您希望它循环直到用户输入 1 或 2

但在代码中,您要求它循环当用户输入 1 或 2

所以,而不是

while ((n1 == 1) || (n1 == 2));

你应该写

while (!(n1 == 1 || n1 == 2));

剩下的部分代码很好,它会按预期工作。

在第 6 行将输入转换为 Int32 时,无需检查字符串“one”和“two”。 Convert.ToInt32(Console.ReadLine()) 无法将 string "one" 转换为 Integer '1'。

【讨论】:

  • 谢谢!!!我尝试做 while((n1 != 1) || (n1 != 2)) 但由于某种原因它没有工作。身份证。我只是想知道如果我想把它等同于一个字符串怎么办。
  • 字符串的东西更像是一个单独的问题。而不是等于一个 int 值如何用另一个字符串值检查它?字符串 s1 = Console.ReadLine(); while (!(s1 == "a" || s1 == "b"));
  • @lasith92 使用Equals。比如你可以写String s1 = Console.ReadLine(); while (!(s1.Equals("a") || s1.Equals("b")));这是你想要的吗?
【解决方案2】:

你当前的代码是这样的:

while ((n1 == 1) || (n1 == 2))

此代码指出,如果n1 == 1n1 == 2,则应重复/继续循环。你真正想要的是重复n1 不等于它们中的任何一个:

while (n1 != 1 && n1 != 2)

这表明如果n1 不是1,并且n1 不是2,那么它应该循环。如果此语句不正确,则循环将退出,您的代码将转到Console.WriteLine(n1);

注意n1 != 1 && n1 != 2n1 == 1 || n1 == 2 的反义词。

【讨论】:

  • && 都需要为真对吗​​?如果我想要 n1=1 或 2 它应该退出....如果我只想 1 为真它应该是 && 或 ||运营商?
  • 是的,这两个条件都必须为真。也就是说:如果n1 != 1返回false,n1 != 2返回false,则退出,否则返回Console.WriteLine("Insert a valid method\n");。请记住!= 的意思是“不等于”,所以用文字来表示“如果 n1 不等于 1,并且 n1 不等于 2,则继续循环”。
【解决方案3】:

您将do....whiledo...until 混淆了(后者不是c# 构造)。

如果您想要“直到”类型的逻辑循环,请使用 while(true) 并使用带有 until 条件的 if 语句来中断循环。

Console.WriteLine("Select an action to perform\n");
int n11 = Convert.ToInt32(Console.ReadLine());
while (true)
{
    Console.WriteLine("Insert a valid method\n");
    n1 = Convert.ToInt32(Console.ReadLine());
    if ((n1 == 1) || (n1 == 2)) break;
}

另一种方法是保留 while 构造但反转逻辑。这不是我最喜欢的答案,因为它可能会导致逻辑变得不那么清晰。

Console.WriteLine("Select an action to perform\n");
int n11 = Convert.ToInt32(Console.ReadLine());
do
{
    Console.WriteLine("Insert a valid method\n");
    n1 = Convert.ToInt32(Console.ReadLine());
}
while ((n1 != 1) && (n1 != 2));

【讨论】:

  • while ((n1 != 1) && (n1 != 2));你能解释一下你为什么在这里使用 && 吗?这澄清了问题。
  • 意思是“只有在用户没有输入 1 也没有输入 2 时才继续”。当你翻转布尔逻辑时,ors 变为 ands。
【解决方案4】:

我建议使用 无限循环 while(true) {...},我们 break 在有效输入上(请注意 int.TryParse 而不是 Convert.ToInt32 - 我们不希望 异常 em> 输入如"bla-bla-bla"):

// Let's be nice and show expected user response - 1 or 2
Console.WriteLine("Select an action to perform (1, 2)\n");

int n1;

while (true) {
  // If user input is a valid i.e.
  //   1. Input is valid integer - int.TryParse returns true
  //   2. User input is either 1 or 2
  // we break the loop and start business logic; otherwise keep asking  
  if (int.TryParse(Console.ReadLine(), out n1) && ((n1 == 1) || (n1 == 2)))
    break;

  // Again, let's be nice and help user
  Console.WriteLine("Insert a valid method (either 1 or 2)\n"); 
}

Console.WriteLine(n1);
Console.ReadKey();

【讨论】:

    猜你喜欢
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2015-12-16
    • 1970-01-01
    • 2020-05-26
    • 2016-04-08
    • 1970-01-01
    相关资源
    最近更新 更多