【问题标题】:Why is this returning false?为什么这返回错误?
【发布时间】:2014-05-09 12:35:48
【问题描述】:

所以我有这个检查方法,如果所有参数都满足,则返回 true,否则返回 false。我的问题是......为什么 (c = 'z' || c == '/') 等于 false 当输入:

提琴手 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;
}

【问题讨论】:

  • 你的帖子和你的代码不匹配 - 你有 2 个相反的表达式 - 确保你有正确的一个 (c &gt;= 'a' &amp;&amp; c &lt;= 'z' || c == '/')(c &lt;= 'a' &amp;&amp; c &gt;= 'z' || c == '/')
  • 你能准备一个关于你的问题的最有价值的例子吗?我认为整个方法在这里并不重要,因为您要询问代码的特定部分。
  • c &lt;= 'a' &amp;&amp; c &gt;= 'z' 这永远不会是真的。除非我遗漏了什么,否则这与比较 c &lt;=1 &amp;&amp; c &gt;= 26 是一样的,这是没有意义的
  • 知道 C# 中的数组是从零开始的,而不是从 1 开始的?
  • 这段代码有太多问题了,我建议你专注于一个问题,每个问题问一个问题。

标签: c# boolean logic


【解决方案1】:

在您的代码中,表达式为c &lt;= 'a' &amp;&amp; c &gt;= 'z' 它们不能同时为真,因此它始终为假。你可能是想写c &gt;= 'a' &amp;&amp; c &lt;= 'z'

【讨论】:

  • 很抱歉回复晚了,并接受了正确的答案。毕竟生活问题占了上风。感谢您纠正我的错误!
【解决方案2】:

你的代码有很多错误。

首先,在这部分代码中:

string[] time = { arguments[1], arguments[2] };
for (int i = 1; i < time.Length; i++)
{
     if (i == 1 || i == 2)

i 永远不会等于 2,因为 (2 &gt;= 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 永远不会等于12,因为这种检查已经在for 语句中。您应该删除此检查以清除您的代码。

第三,这个检查c &lt;= 'a' &amp;&amp; c &gt;= 'z'总是假的,因为'z' &gt; 'a'。你可能应该使用这个c &gt;= 'a' &amp;&amp; c &lt;= 'z'

祝你好运,以后会更加小心!

【讨论】:

  • 感谢您纠正我的愚蠢错误......我不敢相信我真的写了那个。
猜你喜欢
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多