-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 语句中使用 && 起作用。我预计它需要||,因为如果输入匹配两个性别字符串中的任何一个,我们希望它继续。我知道 && 只有在两个参数都为真时才允许代码继续。

TL;博士

    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))

上面的意思是 - genderis not MALE or gender is not FEMALE

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

同样,上面的意思是 - genderisMALE genderis FEMALE

于 2012-06-10T10:58:11.483 回答
0

英文:“当不是 FEMALE 或 MALE,再做一次”然后在 Java 中do{...}while(!(FEMALE || MALE)); ,!(A||B) 等于 !A && !B

于 2012-06-10T11:00:56.560 回答
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

在您的循环中,如果输入的性别不是nor do-while,您希望提示用户重新输入他/她的性别。MALEFEMALE

因此,while 条件是,如果两者都 gender.equals(MALE)返回gender.equals(FEMALE)false ,那么您将重新提示用户,即循环将迭代。

这意味着如果not ofgender.equals(MALE)not ofgender.equals(FEMALE) 两者都为真,那么您的循环应该迭代。

因此,

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

于 2012-06-10T11:14:11.467 回答