1

while ループで equalsIgnoreCase() を使用して、NOT (!) 演算子を使用して、意図した以外のものが書き込まれているかどうかを確認しようとしています。例えば:

String temp="A";
boolean x =(!temp.equalsIgnoreCase("a")) ;

ほら、これはwhileループで機能します。A でない場合はループし続けますが、この次の行はループしません。

boolean x =(!temp.equalsIgnoreCase("a") || !temp.equalsIgnoreCase("b")) ;

これはもう機能していないようです。これは、何を入力しても、それが a または b であっても true を返します。したがって、コード行全体を使用して、使用されていない文字をチェックすると、次のようになります。

while (!temp.equalsIgnoreCase("A") || !(temp.equalsIgnoreCase("B")) ||!temp.equalsIgnoreCase("D")|| !temp.equalsIgnoreCase("P") || !temp.equalsIgnoreCase("S"))
{ ***Do Code***}

文字の 1 つに等しい場合でも、入力したものは何でもループします。

複数の !temp.equalsIngnoreCase がある場合、コードは OR (||) では機能しません。

それを機能させる唯一の方法は、ORをANDに変更することです

while (!temp.equalsIgnoreCase("A") && !(temp.equalsIgnoreCase("B")) && !temp.equalsIgnoreCase("D")&& !temp.equalsIgnoreCase("P") && !temp.equalsIgnoreCase("S"))

解決策を見つけたように見えますが、OR が機能しないのに AND が機能する理由はまだわかりません。すべてが機能するかどうかを確認するために NOT を削除しました。文字の 1 つが入力されると、完全にループするようです。

4

4 に答える 4

3

文字の 1 つに等しい場合でも、入力したものは何でもループします。

はい、もちろんそうです。

A そうでないときもそうでないときも、継続するように求めていBます。どちらも両方 AになることはできませんB...値が等しい場合、B等しくないAため、最初のオペランドがループを続行します。値が等しい場合は等しくAないBため、2 番目のオペランドはループを続行します。

AND に変更するという解決策は正しいです。値が存在しないこともA 存在しないことも必要ですB(つまり、AでもB でもありません)。

または、内部で OR を使用することもできますが、全体を NOT で囲みます。

while (! (temp.equalsIgnoredCase("A") || temp.equalsIgnoreCase("B") || ...))
于 2013-07-28T20:06:41.817 に答える
2

なぜ OR が機能しないのに AND が機能するのかはまだわかりません。

using の式は、 tempの任意の値で||常にtrueになります。なぜなら、tempは同時に両方になることはできません。それがである場合、 の 2 番目の部分はtrueなり、それが に等しいか他の値である場合、最初の部分はtrueになり、両方の場合で式全体がtrueになります。aba||b

&&、あなたのwhile意志は、 tempがどちらでもないtrue場合のみです。ab

あるいは、多くの値に対してtempwhileをテストする場合は、条件をより単純に見えるように変更できます。

while (!"ABDPS".contains(temp.toUpperCase())) {

}
于 2013-07-28T20:08:04.653 に答える
1

それは汚い論理です。コード

(!temp.equalsIgnoreCase("A") || !(temp.equalsIgnoreCase("B")) ||!temp.equalsIgnoreCase("D")|| !temp.equalsIgnoreCase("P") || !temp.equalsIgnoreCase("S"))

意味

char が A でないか、B でないか、D でないか、P でないか、S でない場合。 is char は A であるため、常に true と評価され、B、D、S、P のいずれにもなりません。他人。

ORロジックにしたい場合は、次のようにする必要があります。

(!(temp.equalsIgnoreCase("A") || (temp.equalsIgnoreCase("B")) ||temp.equalsIgnoreCase("D")|| temp.equalsIgnoreCase("P") || temp.equalsIgnoreCase("S")))

つまり、char が A、B、D、S、または P のいずれかである場合ではありません

于 2013-07-28T20:08:33.613 に答える
0

これはすべてロジックに関するものです。

A OR B は、A が真であるか、B が真であるか、または両方が真である場合に真であることを意味します。

あなたの特別なケースでは、 equalsIgnorecase() の1つだけが機能する可能性があるため、無限ループを意味するトートロジーのようなものを書きました。ここでブール代数について読むことができます: http://en.wikipedia.org/wiki/Boolean_algebra_%28structure%29

ある種の理論ですが、ブール式を書くときに知っておくべきことを説明しています。お役に立てれば :)

于 2013-07-28T20:12:30.900 に答える