如何在while循环中插入多个条件

时间:2019-07-11 05:46:53

标签: c# while-loop multiple-conditions

我想在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之前,这应该循环。问题是,如果即时消息仅使用一个条件,则我可以使它工作,但是当有两个条件时,则无法使它工作。还有如何将这些值等于另一个字符串?

例如:

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

我认为我对|| (OR) operator不了解。我读过一些解决方案,但我无法弄清楚。

4 个答案:

答案 0 :(得分:1)

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

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

所以,而不是

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

您应该写

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

代码的其余部分很好,可以正常工作。

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

答案 1 :(得分:1)

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

如果您想要“直到”逻辑循环,请使用while(true)并使用带有直到条件的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));

答案 2 :(得分:0)

您当前的代码是这样:

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相反。

答案 3 :(得分:0)

我建议使用无限循环 while(true) {...},我们在有效输入上break(请注意,int.TryParse而非Convert.ToInt32-我们不这样做)不想在"bla-bla-bla"这样的输入中出现 exception

// 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();