-4

我有一些奇怪的逻辑问题。

x=false;

这个不起作用

while (R2.TS("a") && R2.TL("b") && (s=R2.SL().Trim()).Length > 0) 
{
    x=true;
}

结果:x=false;

这个确实有效:

while (R2.TS("a") && R2.TL("b")) 
{
    if((s=R2.SL().Trim()).Length > 0) 
    {
        x=true;
    }
}

结果:x=true;

此外,也许知道这些函数只有在以正确的顺序执行时才会返回 true,例如 R2.TS("a") 然后 R2.TL("b") 然后 ((s=R2.SL().Trim ()).长度 > 0)。

输入是相同的,但这里肯定有问题。有任何想法吗 ?

提前致谢。

4

4 回答 4

3

是的,循环做了两个不同的事情。

我认为您的意思是逻辑错误,而不是语法错误。语法错误意味着它不会编译。逻辑错误意味着它不符合您的预期。

R2.SL()如果表达式为假,第一个将终止。至少在第一轮,(s=R2.SL().Trim()).Length > 0一定是假的,所以循环 1 终止并且x永远不会设置为真。这是您在两个循环之间获得差异的唯一方法,所有其他条件都相同。

在循环 2 中,中间值 forR2.SL()不是问题,只要其他循环条件保持为真。当(s=R2.SL().Trim()).Length > 0评估为真时,x将被设置。

于 2012-07-30T22:41:45.907 回答
1

使用调试器卢克。我们试图弄清楚为什么这不能给你想要的结果是没有意义的。你最好在一些帮助下解决这个问题。单击第一行并按 F9。它应该变成红色。运行你的程序,它会停在这一行。然后,您可以将鼠标悬停在不同的变量上以查看哪些变量具有哪些值。然后按 F11 继续执行您的程序。

于 2012-07-30T22:39:43.757 回答
0

在第一种情况下,R2 必须遵守三个条件,即 R2.TS("a") AND R2.TL("b") AND (s=R2.SL().Trim()).Length > 0) , 在你进入循环并返回 x 的值之前

在第二种情况下,您只有 R2 必须遵守的两个条件,即 R2.TS("a") AND R2.TL("b") 进入循环后,您在 x 值之前有一个新条件回来。

它们可能都有效,但在第一种情况下,您不提供符合循环要求的数据。

于 2012-07-30T22:38:24.373 回答
-1

它可以与 && 和 || 连接 操作。它们被缩短了。这意味着,操作会持续查看false,直到条件中第一次出现。

由于缩短了操作,您会得到 2 个不同的周期,它们具有不同的逻辑。使用 2 循环类型。它更正确。

于 2012-07-30T22:35:22.163 回答