-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=真;

また、R2.TS("a")、R2.TL("b")、((s=R2.SL().Trim) のように、これらの関数が正しい順序で実行された場合にのみ true を返すことを知っておくと役立つ場合があります。 ()).長さ > 0).

入力は同じですが、ここで何かが確実に間違っています。何か案は ?

前もって感謝します。

4

4 に答える 4

3

はい、ループは 2 つの異なることを行います。

構文エラーではなく、論理エラーを意味していると思います。構文エラーは、コンパイルできないことを意味します。論理エラーは、期待どおりに動作しないことを意味します。

R2.SL()式が偽の場合、最初のものは終了します。少なくとも最初のラウンドは(s=R2.SL().Trim()).Length > 0必ず false でなければならないため、ループ 1 は終了し、xtrue に設定されることはありません。これが、他のすべての条件が同じである場合に、2 つのループの違いを得る唯一の方法です。

R2.SL()ループ 2 では、他のループ条件が真のままであれば、中間値は問題になりません。(s=R2.SL().Trim()).Length > 0true と評価された場合にx設定されます。

于 2012-07-30T22:41:45.907 に答える
1

デバッガー luke を使用します。これがあなたの望む結果をもたらさない理由を解明しようとしても、ほとんど意味がありません。いくつかの助けを借りてそれを解決する方が良いです. 最初の行をクリックして F9 を押します。赤くなるはずです。プログラムを実行すると、この行で停止します。次に、さまざまな変数にカーソルを合わせると、どの変数がどの値を持っているかを確認できます。次に、F11 を押してプログラムを進めます。

于 2012-07-30T22:39:43.757 に答える
0

最初のケースでは、R2 が従わなければならない 3 つの条件、すなわち R2.TS("a") AND R2.TL("b") AND (s=R2.SL().Trim()).Length > 0) があります。 、ループに入って x の値を返す前に

2 番目のケースでは、R2 が準拠しなければならない 2 つの条件、つまり R2.TS("a") AND R2.TL("b") のみがあり、ループに入った後、x 値の前に新しい条件があります。戻ってきた。

おそらくどちらも機能しますが、最初のケースでは、ループの要件に準拠するデータを提供しません。

于 2012-07-30T22:38:24.373 に答える
-1

&& と || で接続できます。オペレーション。それらは短縮されています。これは、条件で最初の操作が発生するまで、操作が継続的に検索されることを意味falseします。

短縮された操作のため、異なるロジックを持つ 2 つの異なるサイクルが得られます。2サイクルタイプをご使用ください。より正しいです。

于 2012-07-30T22:35:22.163 に答える