所以我有这个检查方法,如果满足所有参数则返回true,否则返回false。我的问题是......为什么(c< =' a'& c> =' z' || c ==' /&# 39;)当输入:
时等于假fiddler 01010100 10011100 / ro ?
*行标记为
public static bool check(string action)
{
string[] arguments = action.Split(' ');
if (arguments.Length > 3)
{
string[] time = { arguments[1], arguments[2] };
for (int i = 1; i < time.Length; i++)
{
if (i == 1 || i == 2)
foreach (char c in time[i])
{
if (c >= '0' && c <= '9') { }
else return false;
}
else break;
}
for (int i = arguments.Length - 1; i >= 3; i--)
{
if (i != 1 || i != 2 && arguments[i] != "")
{
foreach (char c in arguments[i])
{
>>> >>> >>> if (c <= 'a' && c >= 'z' || c == '/') { }
else return false;
}
if (arguments[i] == " " || arguments[i] == null || call.arguments.Contains(arguments[i]) == true) { }
else return false;
}
}
}
else if (arguments.Length == 3)
{
for (int i = 1; i <= arguments.Length; i++)
{
if (i == 1 || i == 2)
{
foreach (char c in arguments[i])
{
if (c >= '0' && c <= '9') { }
else return false;
}
}
else
{
foreach (char c in arguments[i].ToUpper())
{
if (c <= 'a' && c >= 'z' || c == '/') { }
else return false;
}
if (arguments[i] == " " || arguments[i] == null || call.arguments.Contains(arguments[i]) == true) { }
else return false;
}
}
}
else return false;
return true;
}
答案 0 :(得分:2)
在您的代码中,表达式为c <= 'a' && c >= 'z'
它们不能同时为true,因此始终为false。你可能想写c >= 'a' && c <= 'z'
答案 1 :(得分:1)
您的代码有很多错误。
首先,在这部分代码中:
string[] time = { arguments[1], arguments[2] };
for (int i = 1; i < time.Length; i++)
{
if (i == 1 || i == 2)
i
永远不等于2
,因为(2 >= time.Length
)。你应该用这个:
for (int i = 0; i < time.Length; i++)
没有任何检查。
其次,这部分:
for (int i = arguments.Length - 1; i >= 3; i--)
{
if (i != 1 || i != 2 && arguments[i] != "")
i
永远不等于1
或2
,因为此检查已经在for
声明中。您应该删除此检查以清除代码。
第三,此检查c <= 'a' && c >= 'z'
始终为false,因为'z' > 'a'
。您可能应该使用此c >= 'a' && c <= 'z'
。
祝你好运,并且会更加小心!