-2
    import javax.swing.JOptionPane;

    public class Insurance {

    final static String INPUT_GENDER = "Please enter your gender: (Male or Female)";
    final static String MALE = "male";
    final static String FEMALE = "female";
    static String gender;
    public static void main(String args[])
    {
        do
        {
            gender = JOptionPane.showInputDialog(INPUT_GENDER).toLowerCase();
            System.out.println(gender);
        }
        while(!gender.equals(MALE) && !gender.equals(FEMALE));  
    }
}

上記のコードはリビジョンの割り当ての始まりですが、理解できないものに出くわしました。ユーザーは性別を「男性」または「女性」として入力するように求められ、入力がこれらの入力のいずれかを満たす場合にのみ、プログラムを続行する必要があります。これは、入力を MALE および FEMALE の最終的な文字列と比較することによって行われます。

私が理解していないのは、 while ステートメントで && を使用してのみ機能する理由です。入力が 2 つの性別文字列のいずれかに一致する場合に続行する必要があるため、|| が必要になると予想していました。&& は、両方の引数が true の場合にのみコードの続行を許可する必要があることを理解しました。

TL;DR

    while(!gender.equals(MALE) && !gender.equals(FEMALE));  //This works
    while(!gender.equals(MALE) || !gender.equals(FEMALE));  //This does not work
    while(gender.equals(MALE)  ||  gender.equals(FEMALE));  //This does not work
4

4 に答える 4

8
  • &&は論理and演算子です

  • ||は論理or演算子です

De Morganを使用すると、次のようになります。

while(!gender.equals(MALE) && !gender.equals(FEMALE))

次のように翻訳できます。

while(!(gender.equals(MALE) || gender.equals(FEMALE)))

(追加の括弧とその!前の配置に注意してください)。

上記の両方は、 がまたはでgenderはないことを意味します。MALEFEMALE

あなたの他のコード:

while(!gender.equals(MALE) || !gender.equals(FEMALE))

上記は -genderではないMALE か、または genderそうではないことを意味しFEMALEます。

while(gender.equals(MALE)  ||  gender.equals(FEMALE));

同様に、上記は - genderisMALE または genderisを意味しFEMALEます。

于 2012-06-10T10:58:11.483 に答える
0

&&はJavaの論理AND演算子
||ですはJavaの論理OR演算子です

例えば:

boolean a = true;
boolean b = false;
boolean c = a && b;   // c is false
boolean d = a || c;   // d is true

さらに、!Javaの論理NOT演算子です。ブール式を否定するために使用されます。

boolean p = true;
boolean q = !p;   // q is false

x && yと同じ論理値になることも注目に値します!(!x || !y)
同様に、次のx || yように書き直すことができます!(!x && !y)

于 2012-06-10T11:03:48.400 に答える
0

英語では「when not FEMALE or MALE, do again」、Java ではdo{...}while(!(FEMALE || MALE)); !(A||B) は !A && !B と等しい

于 2012-06-10T11:00:56.560 に答える
0

あなたのループでは、入力された性別がどちらでもないdo-while場合、ユーザーに性別を再入力するように促したいと考えています。MALEFEMALE

そのため、while 条件は、 と の両方 gender.equals(MALE)が falseをgender.equals(FEMALE)返す場合、ユーザーに再度プロンプトを表示する、つまりループが繰り返されるというものです。

つまり、not ofgender.equals(MALE)not of gender.equals(FEMALE) bothが true の場合、ループを反復する必要があります。

したがって、

while(!(gender.equals(MALE)) && !(gender.equals(FEMALE)))

于 2012-06-10T11:14:11.467 に答える