我想在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
不了解。我读过一些解决方案,但我无法弄清楚。
答案 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....while
与do...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 == 1
或n1 == 2
,则循环应重复/继续。您真正想要的是重复n1
不等于它们两个的地方:
while (n1 != 1 && n1 != 2)
这表明如果n1
不是1
,而n1
不是2
,则它应该循环。如果此语句不正确,则循环将退出,您的代码将继续移至Console.WriteLine(n1);
。
请注意,n1 != 1 && n1 != 2
与n1 == 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();