我有一个控制台程序,它根据用户输入的长度和宽度绘制一个形状。完成后。我想询问用户是否要绘制另一种形状,如果是的话。它应该重启程序。此外,当要求用户输入Y表示是或N表示否。我想确保用户不能在这两个字母之外输入。我目前在我的主要方法中使用它。
DrawShape mn = new DrawShape();
mn.ans = "y";
while (mn.ans.ToLower() == "y")
{
try
{
mn.Lenght();
Console.WriteLine();
mn.Breadth();
Console.WriteLine();
mn.Draw();
Console.WriteLine("\n");
mn.Remark();
Console.WriteLine("\n\nDO YOU WANT TO REDRAW A SHAPE? \nPRESS Y - YES or N - NO");
mn.ans = Console.ReadLine();
Console.WriteLine();
while (mn.ans.ToLower() != "y" || mn.ans.ToLower() != "n")
{
Console.WriteLine("\nPLEASE PRESS Y - YES or N - NO");
mn.ans = Console.ReadLine();
}
}
catch (Exception e)
{
Console.WriteLine("\n" + e.Message);
Console.WriteLine();
}
}
这不起作用,因为这是我得到的输出
这表明无论我输入什么,仍会显示错误消息。
请问我做错了什么?
答案 0 :(得分:4)
您使用了错误的运算符,请使用&&
代替||
:
while (mn.ans.ToLower() != "y" && mn.ans.ToLower() != "n") {
Console.WriteLine("\nPLEASE PRESS Y - YES or N - NO");
mn.ans = Console.ReadLine();
}
或者这个:
while (!(mn.ans.ToLower() == "y" || mn.ans.ToLower() == "n")) {
Console.WriteLine("\nPLEASE PRESS Y - YES or N - NO");
mn.ans = Console.ReadLine();
}
注意:您应该将mn.ans.ToLower()
存储到变量中以避免重复的代码。
您还可以尝试使用Equals
方法,该方法支持通过传入的StringComparison.CurrentCultureIgnoreCase
对字符串不区分大小写进行比较。