0

次のロジックが機能しない理由がわかりません。

                if (cursorCount > 1 && (!"x".equals(componentType) || !"y".equals(componentType))){
                        message.append("s");
                    }

したがって、カーソル数が1を超えている場合にのみ、componentTypeがxまたはyと等しくない場合にのみ、「s」を出力したいと思います。

興味深いことに、yであるがxではない場合に機能するようです。

Confused.com!:)

4

3 に答える 3

5

試す

if (cursorCount > 1 && !("x".equals(componentType) || "y".equals(componentType)))

同等にあなたはすることができます

if (cursorCount > 1 && !"x".equals(componentType) && !"y".equals(componentType))

これは、ド・モルガンの法則を論理に適用したことによるものです。

私はこれらがあなたが望むもののあなたの英語の説明とより密接に一致すると信じています。

編集:

混乱を解消するために、英語の説明の最後の部分の論理を分析してみましょう。

...ただし、componentTypeがxまたはyと等しくない場合のみ。

同じことを述べる別の方法は、「c​​omponentTypeはxでもyでもない」です。これをコードに変換するには、さらに一歩進んで、この条件を「componentTypeがxまたはcomonentTypeがyの場合ではない」と言い換える必要があります。この最終バージョンは、正しいブール式が次の形式であることを示しています。

!(A || B)

これは、形式の元のコードとは大きく異なります。

!A || !B

私の最後の言い換えはより冗長ですが、余分な言い回しは論理をより明確にすることに注意してください。

ロジックを分析する別の方法は、指定したコードを確認することです。

!"x".equals(componentType) || !"y".equals(componentType)

いくつかの例を見てみましょう。

  1. "x".equals(componentType) is true. This means the negation is false. It also means that "y" .equals(componentType) `はfalseであり、その否定はtrueです。したがって、コードはtrueと評価されます。

  2. "y".equals(componentType) is true. This means the negation is false. It also means that "x" .equals(componentType) `はfalseであり、その否定はtrueです。したがって、コードはtrueと評価されます。

  3. "x".equals(componentType) nor 「y」.equals(componentType)も真ではありません。これは、両方の否定がfalseであり、コードがfalseと評価されることを意味します。

コードは、1。と2の両方のケースでtrueと評価されることに注意してください。これは、英語の説明から期待されるものと同じ結果にはなりません。

于 2013-01-10T21:36:17.983 に答える
0

「x」条件の前に「(」があるはずです。次に、ifステートメント全体の最後からそれらの1つを削除します。「()」で一緒に属する条件は、次のように混乱するため、ラップする必要があります。このように読んでください。

if((cursorCount> 1 &&! "x" .equals(componentType))||(! "y" .equals(componentType)))

于 2013-01-10T21:39:13.550 に答える
0
if ((cursorCount > 1 && !"x".equals(componentType)) 
|| (cursorCount > 1 && !"y".equals(componentType))) 
  message.append("s");

または、それが簡単になる場合は、それらをネストすることができます

if (cursorCount > 1)
  if (componentType!="y" || componentType!="x")
    message.append("s"); 

これにより、理解が容易になり、誤謬が少なくなります。

于 2013-01-10T21:41:21.850 に答える